名稱:交通燈控制器帶左轉(zhuǎn)燈Verilog代碼Quartus仿真
軟件:Quartus
語(yǔ)言:Verilog
代碼功能:
利用狀態(tài)機(jī),按照?qǐng)D1中十字路口交通運(yùn)行的實(shí)際情況,使用 Verilog HDL語(yǔ)言,設(shè)計(jì)一個(gè)交通燈系統(tǒng)控制器。
其中方向1是主干道,車流量大,因此綠燈時(shí)間較長(zhǎng);方向2是次干道,綠燈時(shí)間較短,兩個(gè)方向的交通燈變化顯示時(shí)間,如表1所示。
從表1可以看出每個(gè)方向四種燈按“綠燈→黃燈→左轉(zhuǎn)燈→黃燈→紅燈”順序依次點(diǎn)亮,不斷循環(huán),且每個(gè)方向紅燈亮的時(shí)間與另一方向綠、黃、左轉(zhuǎn)、黃燈亮的總時(shí)間相等。
假設(shè)用“1”表示燈亮,“0”表示燈滅,方向1和方向2的綠燈、黃燈、左轉(zhuǎn)燈和紅燈分別用字母G1、Y1、L1、R1和G2、Y2、L2、R2來表示,則該交通燈控制器的功能表,如表2所示。
2、設(shè)計(jì)要求
根據(jù)圖1,設(shè)計(jì)一個(gè)交通燈系統(tǒng)控制器,具體要求如下:
(1)利用狀態(tài)機(jī),使用 Verilog HDL語(yǔ)言描述實(shí)現(xiàn)該交通燈控制器,要求方向1和方向2的紅(R)、黃(Y)、綠(G)和左拐(L)四盞燈按照表1和表2的顯示時(shí)間與功能狀態(tài)循環(huán)亮滅,將燈亮的時(shí)間以倒計(jì)時(shí)的形式顯示出來,且能夠方便地進(jìn)行設(shè)置和修改,給出 Quartus I平臺(tái)的編譯結(jié)果。
(2)畫出該狀態(tài)機(jī)的結(jié)構(gòu)框圖、狀態(tài)轉(zhuǎn)換圖;
(3)編寫測(cè)試模塊,在 Modelsim上對(duì)所設(shè)計(jì)的交通燈控制器進(jìn)行仿真,驗(yàn)證所有結(jié)果,并給出其時(shí)序仿真波形圖;要求按照兩組不同參數(shù)設(shè)定,其中一組參數(shù)限定為仿真時(shí)間2000ns,在100ns前完成復(fù)位,CLK時(shí)鐘激勵(lì)周期10ns,占空比50%;另一組參數(shù)自由選擇。
(4)時(shí)序波形圖中要求將現(xiàn)態(tài)變量(current_state)和次態(tài)變量? ? (next state)的狀態(tài)變換值以十進(jìn)制形式顯示,每一個(gè)方向上每一種顏色燈亮的持續(xù)時(shí)間以十進(jìn)制形式顯示出來。
(5)使用系統(tǒng)函數(shù)$ monitor、$time,以二進(jìn)制形式打印待測(cè)模塊的輸出數(shù)據(jù),顯示當(dāng)前的時(shí)間單位,并給出一段清晰截圖。注意:要求圖形清晰,建議用 Visio或 Edraw(億圖)畫圖,直接復(fù)制粘貼至word。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
各模塊框圖
分頻模塊
狀態(tài)機(jī)控制模塊
顯示模塊
5. Testbench(仿真代碼)
仿真參數(shù)1
仿真參數(shù)2
6. 仿真圖(以仿真參數(shù)1為例)
整體仿真圖
Moniter輸出
State狀態(tài)
分頻模塊仿真圖
狀態(tài)機(jī)控制模塊仿真圖
顯示模塊仿真圖
部分代碼展示:
//交通燈 module?trafic( input?clk,//時(shí)鐘 input?key,//復(fù)位 output?main_red,//主干道紅燈--R1 output?main_green,//主干道綠燈--G1 output?main_yellow,//主干道黃燈--Y1 output?main_left,//主干道左轉(zhuǎn)燈--L1 output?branch_red,//支干道紅燈--R2 output?branch_green,//支干道綠燈--G2 output?branch_yellow,//支干道黃燈--Y2 output?branch_left,//支干道左轉(zhuǎn)燈--L2 output?[7:0]?HEX0,//數(shù)碼管0--支干道倒計(jì)時(shí)個(gè)位 output?[7:0]?HEX1,//數(shù)碼管1--支干道倒計(jì)時(shí)十位 output?[7:0]?HEX2,//數(shù)碼管2---主干道倒計(jì)時(shí)個(gè)位 output?[7:0]?HEX3//數(shù)碼管3--主干道倒計(jì)時(shí)十位 ); wire?clk_1Hz; wire?[7:0]?main_cnt; wire?[7:0]?branch_cnt; //分頻模塊 div?i_div( .?clk(clk),//時(shí)鐘 .?clk_1Hz(clk_1Hz)//1Hz ); //狀態(tài)機(jī)控制模塊 state_machine?i_state_machine( .?clk_1Hz(clk_1Hz),//1Hz .?key(key), .?main_red(main_red), .?main_green(main_green), .?main_yellow(main_yellow), .?main_left(main_left), .?branch_red(branch_red), .?branch_green(branch_green), .?branch_yellow(branch_yellow), .?branch_left(branch_left), .?main_cnt(main_cnt), .?branch_cnt(branch_cnt) );
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=527