軟件:Quartus
語言:Verilog
代碼功能:
用 Verilog HDL或VHDL語言設(shè)計(jì)有限狀態(tài)機(jī)及其附屬電路(定時(shí)器),實(shí)現(xiàn)交通燈控制器。其功能為東西方向、南北方向各紅、黃綠三個(gè)燈。綠燈每次亮30秒,黃燈每次亮3秒定時(shí)器的輸入時(shí)鐘頻率為1Hz。狀態(tài)機(jī)的輸入時(shí)鐘與定時(shí)器相同,狀態(tài)機(jī)有復(fù)位輸入,復(fù)位后進(jìn)入某個(gè)確定狀態(tài)。
要求
(1)畫出狀態(tài)轉(zhuǎn)移圖;
2)完整的源代碼,含有限狀態(tài)機(jī)、附屬電路(定時(shí)器);(附代碼說明文檔、或代碼詳細(xì)注釋)
(3)仿真波形截圖(含簡(jiǎn)單說明),(可采用任意工具軟件,如: Modelsim
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. 狀態(tài)圖
5. Testbench
6. 仿真圖
部分代碼展示:
/* 紅->綠?綠->黃?黃->紅 1、紅--計(jì)時(shí)main_red_times------------------------綠--計(jì)時(shí)main_green_times---main_yellow_times黃燈---------------紅 2、綠--計(jì)時(shí)branch_green_times---branch_yellow_times黃燈--------------------紅--計(jì)時(shí)branch_reg_times-------------------綠 */ //交通燈控制 module?traffic_light( input?clk_1Hz,//1Hz input?reset,//復(fù)位 output?reg?main_red,//主路燈(東西方向) output?reg?main_green,// output?reg?main_yellow,// output?reg?branch_red,//支路燈(南北方向) output?reg?branch_green,// output?reg?branch_yellow ); reg?[7:0]?main_green_BCD; reg?[7:0]?main_yellow_BCD; reg?[7:0]?main_red_BCD; reg?[7:0]?branch_green_BCD; reg?[7:0]?branch_yellow_BCD; reg?[7:0]?branch_red_BCD; parameter?main_green_state=3'd0; parameter?main_yellow_state=3'd1; parameter?branch_green_state=3'd2; parameter?branch_yellow_state=3'd3; //定義路口個(gè)燈持續(xù)時(shí)間,修改此處時(shí)間 //主路綠燈+主路黃燈=支路紅燈時(shí)間 //支路綠燈+支路黃燈=主路紅燈時(shí)間 wire?[7:0]?main_green_time; wire?[7:0]?main_yellow_time; wire?[7:0]?branch_green_time; wire?[7:0]?branch_yellow_time; assign?main_green_time=8'd30; assign?main_yellow_time=8'd3; assign?branch_green_time=8'd30; assign?branch_yellow_time=8'd3; reg?[2:0]?state=3'd0; reg?[7:0]?main_green_cnt=8'd1; reg?[7:0]?main_yellow_cnt=8'd1; reg?[7:0]?branch_green_cnt=8'd1; reg?[7:0]?branch_yellow_cnt=8'd1; //主路綠燈+主路黃燈=支路紅燈時(shí)間 //支路綠燈+支路黃燈=主路紅燈時(shí)間 always@(posedge?clk_1Hz?or?negedge?reset) if(!reset) state<=main_green_state;//reset else case(state) main_green_state: if(main_green_cnt<main_green_time)?begin//主路綠燈 state<=main_green_state; main_green_cnt<=main_green_cnt+'d1; end else?begin state<=main_yellow_state;//計(jì)數(shù)到后到下一狀態(tài) main_green_cnt<='d1; end main_yellow_state:??? ???if(main_yellow_cnt<main_yellow_time)?begin//主路黃燈 state<=main_yellow_state; ??????main_yellow_cnt<=main_yellow_cnt+'d1; end else?begin state<=branch_green_state;//計(jì)數(shù)到后到下一狀態(tài) ??????main_yellow_cnt<='d1; end ???branch_green_state: if(branch_green_cnt<branch_green_time)?begin//支路綠燈 state<=branch_green_state; branch_green_cnt<=branch_green_cnt+'d1; end else?begin state<=branch_yellow_state;//計(jì)數(shù)到后到下一狀態(tài) branch_green_cnt<='d1; end???? ???branch_yellow_state: ???if(branch_yellow_cnt<branch_yellow_time)?begin//支路3s黃燈 state<=branch_yellow_state; ??????branch_yellow_cnt<=branch_yellow_cnt+'d1; end else?begin state<=main_green_state;//計(jì)數(shù)到后到下一狀態(tài) ??????branch_yellow_cnt<='d1; end default:state<=main_green_state; endcase //交通燈狀態(tài)控制,state為相應(yīng)狀態(tài)時(shí)亮相應(yīng)燈 always@(posedge?clk_1Hz?) begin if(state==main_green_state) main_green<=1; else main_green<=0; if(state==main_yellow_state?) main_yellow<=1; else main_yellow<=0; if(state==branch_green_state?|?state==branch_yellow_state) main_red<=1; else main_red<=0; end //交通燈狀態(tài)控制,state為相應(yīng)狀態(tài)時(shí)亮相應(yīng)燈 always@(posedge?clk_1Hz?) begin if(state==branch_green_state) branch_green<=1; else branch_green<=0; if(state==branch_yellow_state?) branch_yellow<=1; else branch_yellow<=0; if(state==main_green_state?|?state==main_yellow_state) branch_red<=1; else branch_red<=0; end endmodule
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=403