名稱:交通燈控制器設(shè)計Verilog代碼Basys3開發(fā)板vivado軟件(代碼在文末下載)
軟件:VIVADO
語言:Verilog
代碼功能:
交通燈控制器
1.設(shè)計要求
分兩個方向(1、2),每個方向各有紅綠黃(RGY)三個交通燈。有自動、手動兩種控制方式。
在自動方式下,控制器的狀態(tài)轉(zhuǎn)移表為:
狀態(tài)? ? 亮燈? ? ?停留時間
S0? ? ? R1,G2? ? 2秒
S1? ? ? R1,Y2? ? 1秒
S2? ? ? G1,R2? ? 2秒
S3? ? ? Y1,R2? ? 1秒
在手動方式下,按下K0~K3時直接進(jìn)入對應(yīng)序號的狀態(tài),隨后轉(zhuǎn)入自動方式
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在Basys3開發(fā)板驗證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設(shè)計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. 管腳分配
5. Testbench
6. 仿真圖
紅綠燈自動變化
按鍵K0~K3控制狀態(tài)變化
紅綠燈自動變化
部分代碼展示:
module?traffic_light( ????input?clk_100M, ????input?key0,//按鍵按下高電平--BTNL ????input?key1,//按鍵按下高電平--BTNR ????input?key2,//按鍵按下高電平--BTNU ????input?key3,//按鍵按下高電平--BTND ????output?reg?R1,///紅1--LD0 ????output?reg?G1,//綠1--LD1 ????output?reg?Y1,//黃1--LD2 ????output?reg?R2,//紅2--LD3 ????output?reg?G2,//綠2--LD4 ????output?reg?Y2//黃2--LD5 ????); parameter?count_second=32'd100_000_000;//100M時鐘計數(shù)到100_000_000就是1s,仿真改小為100 reg?[31:0]?count=32'd0; always@(posedge?clk_100M) if(key0?|?key1?|?key2?|?key3) ????count<=32'd0;//有按鍵按下時重新計時 else ????if(count>=count_second)begin//100M時鐘計數(shù)到count_second就是1s ????????count<=32'd0; ????????end ????else?begin ????????count<=count+32'd1;//計數(shù) ????????end //定義狀態(tài)S0~S3 parameter?S0=2'd0; parameter?S1=2'd1; parameter?S2=2'd2; parameter?S3=2'd3; reg?[1:0]?state=S0; reg?[1:0]?count_s=2'd0; always@(posedge?clk_100M) ????if(key0)begin ????????state<=S0;//按鍵K0,進(jìn)入S0狀態(tài) ????????count_s<=0; ????????end ????else?if(key1)begin ????????state<=S1;//按鍵K1,進(jìn)入S1狀態(tài) ????????count_s<=0; ????????end ????else?if(key2)begin ????????state<=S2;?//按鍵K2,進(jìn)入S2狀態(tài)??? ????????count_s<=0; ????????end ????else?if(key3)begin ????????state<=S3;//按鍵K3,進(jìn)入S3狀態(tài) ????????count_s<=0; ????????end ????else ????????if(count==count_second)//1秒判斷一次狀態(tài)是否跳轉(zhuǎn) ????????????case(state) ????????????????S0:begin ????????????????????if(count_s>=1)begin//0~1表2秒 ????????????????????????count_s<=0;? ????????????????????????state<=S1;//到S1 ????????????????????????end ????????????????????else?begin ????????????????????????count_s<=count_s+1;????? ????????????????????????state<=S0;//S0保持2s
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=302