名稱:交通燈控制器的設(shè)計Verilog代碼Quartus? 實驗箱
軟件:Quartus
語言:VHDL
代碼功能:
交通燈控制器的設(shè)計
1.系統(tǒng)設(shè)計任務(wù)及要求
(1)能顯示十字路口東西、南北兩個方向的紅、黃、綠燈的指示狀態(tài)。用兩組紅、黃、綠燈表示分別作為東西、南北兩個方向的紅、黃、綠燈。變化規(guī)律為:東西綠燈亮,南北紅燈→東西黃燈亮,南北紅燈亮→東西紅燈亮,南北綠燈亮→東西紅燈亮,南北黃燈亮→東西綠燈亮,南北紅燈亮……,這樣依次循環(huán)。
(2)用兩組數(shù)碼管作為東西、南北方向的倒計時顯示,時間可以預(yù)置,如時間為紅燈35s、綠燈32s、黃燈3s。
(3)使用一個按鍵能實現(xiàn)特殊狀態(tài)的功能:計數(shù)器停止計數(shù)并保持在原來的狀態(tài);東西、南北、路口均顯示紅燈狀態(tài);特殊狀態(tài)解除后能繼續(xù)計數(shù)。
(4)要求交通燈控制器具有復(fù)位功能,在復(fù)位信號的控制下能夠?qū)崿F(xiàn)交通燈的復(fù)位,計數(shù)器由初始狀態(tài)計數(shù),對應(yīng)狀態(tài)的指示燈亮。
(5)用VHDL語言設(shè)計符合上述功能要求的交通燈控制器,并用層次化設(shè)計方法設(shè)計該電路。
(6)控制器、置數(shù)器的功能用功能仿真的方法驗證,可通過有關(guān)波形確認電路設(shè)計是否正確。
(7)完成電路全部設(shè)計后,下載到實驗開發(fā)系統(tǒng)驗證設(shè)計的正確性。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在實驗箱驗證,實驗箱如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設(shè)計文檔:
1、工程文件
2、程序文件
3、程序編譯
4、管腳分配
5、RTL圖
6、仿真圖
整體仿真圖
分頻模塊
控制模塊
顯示模塊
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; USE?ieee.std_logic_unsigned.all; --交通燈 ENTITY?Traffic_Light_Control?IS ???PORT?( ??????clk?????:?IN?STD_LOGIC;--50Mhz reset_n?:?IN?STD_LOGIC;--復(fù)位--K2 control?:?IN?STD_LOGIC;--特殊功能--K1 ??????R1??????:?OUT?STD_LOGIC;--高電平亮,主路紅燈 ??????G1??????:?OUT?STD_LOGIC;--高電平亮,主路綠燈 ??????Y1??????:?OUT?STD_LOGIC;--高電平亮,主路黃燈 ??????R2??????:?OUT?STD_LOGIC;--高電平亮,支路紅燈 ??????G2??????:?OUT?STD_LOGIC;--高電平亮,支路綠燈 ??????Y2??????:?OUT?STD_LOGIC;--高電平亮,支路黃燈 ??????bit_select?????:?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0);--數(shù)碼管位選 ??????seg_select?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管段選 ???); 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); ??????bit_select?????:?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0);--數(shù)碼管位選 ??????seg_select?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管段選 ??????); ???END?COMPONENT; ??? --交通燈控制模塊 ???COMPONENT?RGY?IS ??????PORT?( ?????????clk_1???:?IN?STD_LOGIC; clk???:?IN?STD_LOGIC; reset_n?:?IN?STD_LOGIC;--復(fù)位 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; ??????SMG1?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--輸出數(shù)碼管顯示數(shù) ??????SMG2?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--輸出數(shù)碼管顯示數(shù) ??????); ???END?COMPONENT; ??? ??? ???SIGNAL?clk_1??????:?STD_LOGIC; ???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); BEGIN ???R1?<=?R1_led;--主路紅燈 ???G1?<=?G1_led;--主路綠燈 ???Y1?<=?Y1_led;--主路黃燈 ???R2?<=?R2_led;--支路紅燈 ???G2?<=?G2_led;--支路綠燈 ???Y2??clk, ?????????dav??=>?clk_1 ??????); --主、支干道均有車時,兩者交替允許通行, --主干道每次放行60秒,支干道每次放行45秒, --設(shè)立60秒、45秒計時、顯示電路 --設(shè)置時間,可自行修改時間, --主路紅燈時間等于支路綠燈加黃燈 --支路紅燈時間等于主路綠燈加黃燈 ???G1_time?<=?"00100000";--主路綠燈32s ???Y1_time?<=?"00000011";--主路黃燈3s ???G2_time?<=?"00100000";--支路綠燈32s ???Y2_time?<=?"00000011";--支路黃燈3s
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1530