• 方案介紹
  • 附件下載
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

紅綠燈和等待信號時間顯示的設計和實現(xiàn)Verilog代碼vivado basys3開發(fā)板

7小時前
273
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

2-231230131209423.doc

共1個文件

名稱:紅綠燈和等待信號時間顯示的設計和實現(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ā)板可以修改管腳適配:

basys3開發(fā)板.png

演示視頻:

設計文檔:

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

  • 2-231230131209423.doc
    下載

相關推薦