• 方案介紹
  • 附件下載
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

十字路口交通燈控制器VHDL代碼Quartus仿真

13小時前
222
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

2-240110162951A1.doc

共1個文件

名稱:十字路口交通燈控制器VHDL代碼Quartus仿真

軟件:Quartus

語言:VHDL

代碼功能:

十字路口交通燈控制器的VHDL設計(每班21號以后的單號)

設計要求:利用硬件描述語言FPGA器件,設計實現(xiàn)一個由一條主干道和一條支干道的匯合點形成的十字交叉路口的交通燈控制器,具體要求如下:

(1)主、支干道各設有一個綠、黃、紅指示燈,兩個顯示數(shù)碼管。

(2)在主干道和支干道的兩個方向上各設有一組綠、黃、紅交通燈,其中一個方向是綠燈、黃燈、紅燈,另一個方向是紅燈、綠燈、黃燈。

(3)數(shù)碼管以倒計時的方式顯示允許通行或禁止通行的時間,主干道每次放行40s60s70s,支干道每次放行20s30s40s50s,在每次由亮綠燈變成亮紅燈的轉(zhuǎn)換過程中要亮5s的黃燈作為過渡,并進行減計時顯示,時鐘信號由實驗箱上50MHz分頻得到1H。

(4)設置交主干道優(yōu)先通行電路(選做

各放行定時器的實體名為:XXX放行時間,XXX為自己姓名的首字母。

任務學號對應:21、23、25號選(70150);27、29、31選(60140)33、35、37-選(5030);39、41、43選(40120)。

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

演示視頻:

設計文檔:

1. 工程文件

2. 程序文件

3. 程序編譯

4. RTL圖

5. 仿真圖

整體仿真圖

分頻模塊

紅綠燈控制模塊

上圖顯示了主路和支路的紅綠燈以及對應的倒計時

數(shù)碼管顯示模塊

上圖仿真了主路數(shù)碼管顯示10,支路數(shù)碼管顯示18

部分代碼展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
--控制模塊
ENTITY?QJP_6040_RGY?IS
???PORT?(
??????clk_1????:?IN?STD_LOGIC;
clk????:?IN?STD_LOGIC;
reset??:?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;--紅綠燈信號
??????SMG1?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--輸出數(shù)碼管顯示數(shù)
??????SMG2?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--輸出數(shù)碼管顯示數(shù)
???);
END?QJP_6040_RGY;
ARCHITECTURE?behave?OF?QJP_6040_RGY?IS
????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?state????:?STD_LOGIC_VECTOR(2?DOWNTO?0)?:=?"000";
???SIGNAL?G1_cnt???:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000001";
???SIGNAL?Y1_cnt???:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000001";
???SIGNAL?G2_cnt???:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000001";
???SIGNAL?Y2_cnt???:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000001";??
???--?Declare?intermediate?signals?for?referenced?outputs
???SIGNAL?R1_temp?:?STD_LOGIC:='0';
???SIGNAL?G1_temp?:?STD_LOGIC:='0';
???SIGNAL?Y1_temp?:?STD_LOGIC:='0';
???SIGNAL?R2_temp?:?STD_LOGIC:='0';
???SIGNAL?G2_temp?:?STD_LOGIC:='0';
???SIGNAL?Y2_temp?:?STD_LOGIC:='0';
????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);--正計時
BEGIN
--設置時間,可自行修改時間,
--主路紅燈時間等于支路綠燈加黃燈
--支路紅燈時間等于主路綠燈加黃燈
???G1_time?<=?"00111100";--主路綠燈60s
???Y1_time?<=?"00000101";--主路黃燈5s
???G2_time?<=?"00101000";--支路綠燈40s
???Y2_time?<=?"00000101";--支路黃燈5s
???--?Drive?referenced?outputs
???R1?<=?R1_temp;--紅
???G1?<=?G1_temp;--綠
???Y1?<=?Y1_temp;--黃燈
???R2?<=?R2_temp;--紅
???G2?<=?G2_temp;--綠
???Y2?<=?Y2_temp;--黃燈
???
???PROCESS?(clk_1,reset)
???BEGIN
if(reset='1')THEN
state?<=?"001";--異步復位
elsIF?(clk_1'EVENT?AND?clk_1?=?'1')?THEN
?????????CASE?state?IS
????????????WHEN?"001"?=>--主路綠燈
???????????????IF?(G1_cnt?<?G1_time)?THEN
??????????????????state?<=?"001";
??????????????????G1_cnt?<=?G1_cnt?+?"00000001";
???????????????ELSE
??????????????????state?<=?"010";--//計時到后切換下一狀態(tài)
??????????????????G1_cnt?<=?"00000001";
???????????????END?IF;
????????????WHEN?"010"?=>--主路黃燈
???????????????IF?(Y1_cnt?<?Y1_time)?THEN
??????????????????state?<=?"010";
??????????????????Y1_cnt?<=?Y1_cnt?+?"00000001";
???????????????ELSE
??????????????????state?<=?"011";--計時到后切換下一狀態(tài)
??????????????????Y1_cnt?<=?"00000001";
???????????????END?IF;
????????????WHEN?"011"?=>--支路綠燈
???????????????IF?(G2_cnt?<?G2_time)?THEN
??????????????????state?<=?"011";
??????????????????G2_cnt?<=?G2_cnt?+?"00000001";
???????????????ELSE
??????????????????state?<=?"100";--計時到后切換下一狀態(tài)
??????????????????G2_cnt?<=?"00000001";
???????????????END?IF;
????????????WHEN?"100"?=>--支路黃燈
???????????????IF?(Y2_cnt?<?Y2_time)?THEN
??????????????????state?<=?"100";
??????????????????Y2_cnt?<=?Y2_cnt?+?"00000001";
???????????????ELSE
??????????????????state?<=?"001";--計時到后切換下一狀態(tài)
??????????????????Y2_cnt?<=?"00000001";
???????????????END?IF;
????????????WHEN?OTHERS?=>
???????????????state?<=?"001";
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???--控制東西方向交通燈
???PROCESS?(clk_1)
???BEGIN
??????IF?(clk_1'EVENT?AND?clk_1?=?'1')?THEN
?????????IF?(state?=?"001")?THEN
????????????G1_temp?<=?'1';
?????????ELSE
????????????G1_temp?<=?'0';
?????????END?IF;
?????????IF?(state?=?"010")?THEN
????????????Y1_temp?<=?'1';
?????????ELSE
????????????Y1_temp?<=?'0';
?????????END?IF;
?????????IF?(state?=?"011"?OR?state?=?"100")?THEN
????????????R1_temp?<=?'1';
?????????ELSE
????????????R1_temp?<=?'0';
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???--控制南北方向交通燈
???PROCESS?(clk_1)
???BEGIN
??????IF?(clk_1'EVENT?AND?clk_1?=?'1')?THEN
?????????IF?(state?=?"011")?THEN
????????????G2_temp?<=?'1';
?????????ELSE
????????????G2_temp?<=?'0';
?????????END?IF;
?????????IF?(state?=?"100"?)?THEN
????????????Y2_temp?<=?'1';
?????????ELSE
????????????Y2_temp?<=?'0';
?????????END?IF;
?????????IF?(state?=?"001"?OR?state?=?"010")?THEN
????????????R2_temp?<=?'1';
?????????ELSE
????????????R2_temp?<=?'0';
?????????END?IF;
??????END?IF;
???END?PROCESS;

點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=528

  • 2-240110162951A1.doc
    下載

相關推薦