名稱:DE0開發(fā)板交通燈控制器紅綠燈時間可配(代碼在文末下載)
軟件:QuartusII
語言:VHDL
代碼功能:
要求紅、綠燈按一定的規(guī)律亮和滅,并在亮燈期間進行倒計時,且將運行時間用數(shù)碼管顯示出來。
綠燈亮?xí)r,為該車道允許通行信號,紅燈亮?xí)r,為該車道禁止通行信號。
該代碼的主路支路通行時間可根據(jù)要求自行設(shè)置,默認主路綠燈25s,主路黃燈5s,支路綠燈20s,支路黃燈5s。
設(shè)置時間時,在頂層文件找到以下代碼,修改對應(yīng)時間的二進制值即可。
--設(shè)置時間,可自行修改時間, G1_time?<=?"00011001";--主路綠燈25s Y1_time?<=?"00000101";--主路黃燈5s G2_time?<=?"00010100";--支路綠燈20s Y2_time?<=?"00000101";--支路黃燈5s
本代碼已在DE0開發(fā)板驗證,開發(fā)板如下:
演示視頻:
FPGA代碼Verilog/VHDL代碼資源下載網(wǎng):www.hdlcode.com
部分代碼展示
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ENTITY?Traffic_Light_Control?IS ???PORT?( ??????clk?????:?IN?STD_LOGIC;--50Mhz control?:?IN?STD_LOGIC;--緊急控制按鍵 ??????R1??????:?OUT?STD_LOGIC;--高電平亮,主路紅燈 ??????G1??????:?OUT?STD_LOGIC;--高電平亮,主路綠燈 ??????Y1??????:?OUT?STD_LOGIC;--高電平亮,主路黃燈 ??????R2??????:?OUT?STD_LOGIC;--高電平亮,支路紅燈 ??????G2??????:?OUT?STD_LOGIC;--高電平亮,支路綠燈 ??????Y2??????:?OUT?STD_LOGIC;--高電平亮,支路黃燈 ??????HEX0????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);--數(shù)碼管0 ??????HEX1????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);--數(shù)碼管1 ??????HEX2????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);--數(shù)碼管2 ??????HEX3????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0)--數(shù)碼管3 ???); END?Traffic_Light_Control; ARCHITECTURE?behave?OF?Traffic_Light_Control?IS --分頻模塊 COMPONENT?CLOCK?IS--?Divide?50MHz?to?1Hz GENERIC(D?:?INTEGER?:=?50000000);--仿真時改小為500加快仿真速度,實際上板驗證時改為50000000 ???PORT(CLK:?IN?STD_LOGIC; ?????????DAV:?OUT?STD_LOGIC); ???END?COMPONENT; --顯示模塊 ???COMPONENT?HEX?IS ??????PORT?( ?????????clk?????:?IN?STD_LOGIC; ?????????SMG_1???:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????SMG_2???:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????HEX0????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0); ?????????HEX1????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0); ?????????HEX2????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0); ?????????HEX3????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0) ??????); ???END?COMPONENT; ??? --顯示值計算模塊 ???COMPONENT?SMG?IS ??????PORT?( ?????????clk?????:?IN?STD_LOGIC; ?????????R1??????:?IN?STD_LOGIC; ?????????G1??????:?IN?STD_LOGIC; ?????????Y1??????:?IN?STD_LOGIC; ?????????R2??????:?IN?STD_LOGIC; ?????????G2??????:?IN?STD_LOGIC; ?????????Y2??????:?IN?STD_LOGIC; ?????????G1_BCD??:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????Y1_BCD??:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????R1_BCD??:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????G2_BCD??:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????Y2_BCD??:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????R2_BCD??:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????G1_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????Y1_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????G2_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????Y2_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????SMG1????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????SMG2????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0) ??????); ???END?COMPONENT; ??? --交通燈控制模塊 ???COMPONENT?RGY?IS ??????PORT?( ?????????clk_1???:?IN?STD_LOGIC; control?:?IN?STD_LOGIC;--緊急控制按鍵 ?????????G1_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????Y1_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????G2_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????Y2_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????R1??????:?OUT?STD_LOGIC; ?????????G1??????:?OUT?STD_LOGIC; ?????????Y1??????:?OUT?STD_LOGIC; ?????????R2??????:?OUT?STD_LOGIC; ?????????G2??????:?OUT?STD_LOGIC; ?????????Y2??????:?OUT?STD_LOGIC; ?????????G1_BCD??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????Y1_BCD??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????R1_BCD??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????G2_BCD??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????Y2_BCD??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????R2_BCD??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0) ??????); ???END?COMPONENT; ??? ??? ???SIGNAL?clk_1??????:?STD_LOGIC; ???SIGNAL?G1_BCD?????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?Y1_BCD?????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?R1_BCD?????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?G2_BCD?????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?Y2_BCD?????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?R2_BCD?????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?SMG1???????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?SMG2???????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ??? ???SIGNAL?R1_led?????:?STD_LOGIC; ???SIGNAL?G1_led?????:?STD_LOGIC; ???SIGNAL?Y1_led?????:?STD_LOGIC; ??? ???SIGNAL?R2_led?????:?STD_LOGIC; ???SIGNAL?G2_led?????:?STD_LOGIC; ???SIGNAL?Y2_led?????:?STD_LOGIC; ??? ???SIGNAL?G1_time????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?Y1_time????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?G2_time????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?Y2_time????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ??? ???SIGNAL?HEX0_SIG?:?STD_LOGIC_VECTOR(6?DOWNTO?0); ???SIGNAL?HEX1_SIG?:?STD_LOGIC_VECTOR(6?DOWNTO?0); ???SIGNAL?HEX2_SIG?:?STD_LOGIC_VECTOR(6?DOWNTO?0); ???SIGNAL?HEX3_SIG?:?STD_LOGIC_VECTOR(6?DOWNTO?0); BEGIN ???HEX0?<=?HEX0_SIG; ???HEX1?<=?HEX1_SIG; ???HEX2?<=?HEX2_SIG; ???HEX3?<=?HEX3_SIG; ???R1?<=?R1_led;--主路紅燈 ???G1?<=?G1_led;--主路綠燈 ???Y1?<=?Y1_led;--主路黃燈 ???R2?<=?R2_led;--支路紅燈 ???G2?<=?G2_led;--支路綠燈 ???Y2?<=?Y2_led;--支路黃燈 ??? --分頻到1hz??? ???U_CLOCK?:?CLOCK ??????PORT?MAP?( ?????????clk??=>?clk, ?????????dav??=>?clk_1 ??????); --設(shè)置時間,可自行修改時間, --主路紅燈時間等于支路綠燈加黃燈 --支路紅燈時間等于主路綠燈加黃燈 --紅燈25s,綠燈20s,黃燈5s ???G1_time?<=?"00011001";--主路綠燈25s ???Y1_time?<=?"00000101";--主路黃燈5s ???G2_time?<=?"00010100";--支路綠燈20s ???Y2_time?<=?"00000101";--支路黃燈5s ??? ??? ?--交通燈控制模塊?? ???U1?:?RGY ??????PORT?MAP?( ?????????clk_1????=>?clk_1, ?????????control??=>?control, ?????????R1???????=>?R1_led, ?????????G1???????=>?G1_led, ?????????Y1???????=>?Y1_led, ????????? ?????????R2???????=>?R2_led, ?????????G2???????=>?G2_led, ?????????Y2???????=>?Y2_led, ????????? ?????????G1_time??=>?G1_time, ?????????Y1_time??=>?Y1_time, ?????????G2_time??=>?G2_time, ?????????Y2_time??=>?Y2_time, ????????? ?????????G1_BCD???=>?G1_BCD,--綠燈時間 ?????????Y1_BCD???=>?Y1_BCD,--黃燈時間 ?????????R1_BCD???=>?R1_BCD,--紅燈時間 ?????????G2_BCD???=>?G2_BCD,--綠燈時間 ?????????Y2_BCD???=>?Y2_BCD,--黃燈時間 ?????????R2_BCD???=>?R2_BCD--紅燈時間 ??????); ??? ??? ???--倒計時數(shù)據(jù)計算模塊 ???U2?:?SMG ??????PORT?MAP?( ?????????clk??????=>?clk, ????????? ?????????R1???????=>?R1_led, ?????????G1???????=>?G1_led, ?????????Y1???????=>?Y1_led, ????????? ?????????R2???????=>?R2_led, ?????????G2???????=>?G2_led, ?????????Y2???????=>?Y2_led, ????????? ?????????G1_BCD???=>?G1_BCD, ?????????Y1_BCD???=>?Y1_BCD, ?????????R1_BCD???=>?R1_BCD, ?????????G2_BCD???=>?G2_BCD, ?????????Y2_BCD???=>?Y2_BCD, ?????????R2_BCD???=>?R2_BCD, ????????? ?????????G1_time??=>?G1_time, ?????????Y1_time??=>?Y1_time, ?????????G2_time??=>?G2_time, ?????????Y2_time??=>?Y2_time, ????????? ?????????SMG1?????=>?SMG1,--數(shù)碼管顯示 ?????????SMG2?????=>?SMG2--數(shù)碼管顯示 ??????); ??? ??? ???--數(shù)碼管顯示模塊 ???U3?:?HEX ??????PORT?MAP?( ?????????clk????=>?clk, ?????????SMG_1??=>?SMG1,--數(shù)碼管數(shù)據(jù)顯示 ?????????SMG_2??=>?SMG2,--數(shù)碼管數(shù)據(jù)顯示 ????????? ?????????HEX0???=>?HEX0_SIG,--低電平亮 ?????????HEX1???=>?HEX1_SIG,--低電平亮 ?????????HEX2???=>?HEX2_SIG,--低電平亮 ?????????HEX3???=>?HEX3_SIG--低電平亮 ??????); ??? END?behave;
設(shè)計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. 管腳分配
6. Testbench
7. 仿真圖
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=227
閱讀全文