名稱:多功能交通燈控制系統(tǒng)VHDL十字路口紅綠燈倒計(jì)時(shí)DE2-115開發(fā)板(代碼在文末下載)
軟件:Quartus II
語言:VHDL
代碼功能:
要求設(shè)計(jì)一個(gè)多功能交通燈控制系統(tǒng)。并進(jìn)行軟件仿真與硬件實(shí)現(xiàn)。要求做到:
(1)主干道綠燈亮?xí)r,支干道紅燈亮,反之亦然,兩者交替允許通行,主干道每次放行60s,支干道每次放行45s.每次由綠燈變?yōu)榧t燈的過程中,黃燈亮3S作為過渡;
(2)能實(shí)現(xiàn)正常的倒計(jì)時(shí)顯示功能;
(3)能實(shí)現(xiàn)總體清零功能:計(jì)數(shù)器由初始狀態(tài)開始計(jì)數(shù),對應(yīng)狀態(tài)的指示燈亮
(4)能實(shí)現(xiàn)特殊狀態(tài)的功能顯示:進(jìn)入特殊狀態(tài)時(shí),東西、南北路口均顯示紅燈狀態(tài)
(5)在任何一個(gè)時(shí)刻,有一盞燈亮而且只有一盞燈亮。否則發(fā)出故障信號,提醒相關(guān)人員去維修。
本代碼的通行時(shí)間可以設(shè)置,如下代碼修改即可:
--主、支干道均有車時(shí),兩者交替允許通行, --主干道每次放行60秒,支干道每次放行45秒, --設(shè)立60秒、45秒計(jì)時(shí)、顯示電路 --設(shè)置時(shí)間,可自行修改時(shí)間, --主路紅燈時(shí)間等于支路綠燈加黃燈 --支路紅燈時(shí)間等于主路綠燈加黃燈 ???G1_time?<=?"00111100";--主路綠燈60s ???Y1_time?<=?"00000011";--主路黃燈3s ???G2_time?<=?"00101101";--支路綠燈45s ???Y2_time?<=?"00000011";--支路黃燈3s
要求學(xué)生有一定的模擬及數(shù)字電子技術(shù)知識,對VHDL語言比較熟悉,有一定的動(dòng)手能力
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在DE2-115開發(fā)板驗(yàn)證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設(shè)計(jì)文檔:
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ù)位 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;--高電平亮,支路黃燈 alarm???:?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);--仿真時(shí)改小為500加快仿真速度,實(shí)際上板驗(yàn)證時(shí)改為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?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); SIGNAL?led1_cnt????:?STD_LOGIC_VECTOR(1?DOWNTO?0); SIGNAL?led2_cnt????:?STD_LOGIC_VECTOR(1?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 --每條路led計(jì)數(shù) ???led1_cnt<=('0'&?R1_led)?+?('0'&?G1_led)?+?('0'&?Y1_led); led2_cnt<=('0'&?R2_led)?+?('0'&?G2_led)?+?('0'&?Y2_led); --判斷是否有2個(gè)以上燈亮,若有輸出1 alarm<='1'?when(led1_cnt?>?"01"?)?or?(led2_cnt?>?"01")?else?'0'?; ???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í),兩者交替允許通行, --主干道每次放行60秒,支干道每次放行45秒, --設(shè)立60秒、45秒計(jì)時(shí)、顯示電路 --設(shè)置時(shí)間,可自行修改時(shí)間, --主路紅燈時(shí)間等于支路綠燈加黃燈 --支路紅燈時(shí)間等于主路綠燈加黃燈 ???G1_time?<=?"00111100";--主路綠燈60s ???Y1_time?<=?"00000011";--主路黃燈3s ???G2_time?<=?"00101101";--支路綠燈45s ???Y2_time?<=?"00000011";--支路黃燈3s ??? ??? ?--交通燈控制模塊?? ???U1?:?RGY ??????PORT?MAP?( ?????????clk_1????=>?clk_1, clk????=>?clk, reset_n=>reset_n, ?????????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, ????????? ?????????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;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=263