名稱:紅綠燈和等待信號時間顯示的設計和實現(xiàn)Verilog代碼vivado? basys3開發(fā)板
軟件:vivado
語言:Verilog
代碼功能:
紅綠燈和等待信號時間顯示的設計和實現(xiàn)
?端口:紅燈控制信號red(輸出),綠燈控制信號green(輸出),黃燈控制信號yellow(輸出),強制控制端 pass(輸入),其他端口可自定義。
?紅燈10s->綠燈10s->紅燈 反復交替。
?強制控制端pass 功能為當前燈為紅燈時pass置1則紅燈保持3s后變綠燈(模擬過馬路燈)
?選擇一個7段碼顯示管顯示紅燈或綠燈剩下的等待時間。
任意選擇兩個led燈當做綠燈,紅燈。選擇任意一個按鍵當做pass。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在?basys3開發(fā)板驗證,?basys3開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. 管腳約束
部分代碼展示:
`timescale?1ns?/?1ps ////////////////////////////////////////////////////////////////////////////////// //?Company:? //?Engineer:? //? //?Create?Date:?2019/11/30?17:30:21 //?Design?Name:? //?Module?Name:?red_green_light //?Project?Name:? //?Target?Devices:? //?Tool?Versions:? //?Description:? //? //?Dependencies:? //? //?Revision: //?Revision?0.01?-?File?Created //?Additional?Comments: //? ////////////////////////////////////////////////////////////////////////////////// module?red_green_light( ????input?clk_100M,//100M時鐘 ????input?pass_key,//中間按鍵 ????output?reg?red_led, ????output?reg?green_led, ????output?[3:0]?bit_select,//數(shù)碼管位選 ????output?reg?[7:0]?lednum_select//數(shù)碼管段選 ????); //100M分頻到1s reg?[31:0]?data_cnt=32'd0; reg?clk_1Hz=0; always@(posedge?clk_100M) ????if(data_cnt>=32'd100_000_000)//100MHz計數(shù)到100_000_000就是1s ????????data_cnt<=32'd0; ????else ????????data_cnt<=data_cnt+32'd1; always@(posedge?clk_100M) ????if(data_cnt>=32'd50_000_000) ????????clk_1Hz<=0;//1Hz時鐘 ????else ????????clk_1Hz<=1; //time_cnt為19~10為紅燈,9~0為綠燈,數(shù)碼管顯示time_cnt的個位 reg?[4:0]?time_cnt=5'd19; always@(posedge?clk_1Hz?or?posedge?pass_key) ????if(pass_key==1)//pass_key按下 ????????time_cnt<=5'd13;//紅燈3秒 ????else ????????if(time_cnt==5'd0)//計時到0后回到19 ????????????time_cnt<=5'd19; ????????else ????????????time_cnt<=time_cnt-5'd1;//減1,倒計時 //紅燈 always@(*) ????if(time_cnt>5'd9?&&?time_cnt<5'd20)//time_cnt為19~10為紅燈 ????????red_led<=1; ????else ????????red_led<=0; //綠燈 always@(*) ????if(time_cnt<5'd10)//time_cnt為9~0為綠燈 ????????green_led<=1; ????else ????????green_led<=0; assign?bit_select=4'b1110; //數(shù)碼管顯示 always@(*) begin case(time_cnt%10)//除以10取余得到個位 0?:?lednum_select=?(8'hc0);?//數(shù)碼管段選 1?:?lednum_select=?(8'hf9);? 2?:?lednum_select=?(8'ha4);? 3?:?lednum_select=?(8'hb0);? 4?:?lednum_select=?(8'h99);? 5?:?lednum_select=?(8'h92); 6?:?lednum_select=?(8'h82);? 7?:?lednum_select=?(8'hf8);? 8?:?lednum_select=?(8'h80);? 9?:?lednum_select=?(8'h90);? endcase end endmodule
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=460