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

東西,南北兩個(gè)方向交通燈設(shè)計(jì)VHDL代碼Quartus仿真

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-240112094GV49.doc

共1個(gè)文件

名稱:東西,南北兩個(gè)方向交通燈設(shè)計(jì)VHDL代碼Quartus仿真

軟件:Quartus

語(yǔ)言:VHDL

代碼功能:

功能需求

該交通燈控制器要求能顯示十字路口東西、南北兩個(gè)方向的紅、黃、綠燈的指示狀態(tài)。用兩組紅、黃、綠三種顏色的燈分別作為東西、南北兩個(gè)方向的紅、黃、綠燈。變化規(guī)律如下:

(1)東西綠燈亮、南北紅燈亮;

(2)東西黃燈亮、南北紅燈亮;

(3)東西紅燈亮、南北綠燈亮;

(4)東西紅燈亮、南北黃燈亮;

(5)東西綠燈亮、南北紅燈亮;

(6)依次循環(huán)執(zhí)行……

南北方向是主干道車道,東西方向是支干道車道,要求兩條交叉道路上的車輛交替運(yùn)行,主干道每次通行時(shí)間設(shè)為30s、支干道每次通行時(shí)間設(shè)為20s,時(shí)間可設(shè)置修改。

在綠燈轉(zhuǎn)為紅燈時(shí),要求黃燈先亮5s,才能變換運(yùn)行車道。

要求交通燈控制器具有異步復(fù)位功能,在復(fù)位信號(hào)使能時(shí),能夠?qū)崿F(xiàn)交通燈的自動(dòng)復(fù)位,并要求所有交通燈的狀態(tài)變化在時(shí)鐘信號(hào)上升沿處。

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

演示視頻:

設(shè)計(jì)文檔:

1. 工程文件

2. 程序文件

3. 程序編譯

4. RTL圖

5. 仿真圖

整體仿真圖

分頻模塊

紅綠燈控制模塊

數(shù)碼管顯示模塊

部分代碼展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
???USE?ieee.std_logic_arith.all;
--顯示模塊
ENTITY?display?IS
???PORT?(
??????clk??:?IN?STD_LOGIC;--50MHz
??????SMG1????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);--倒計(jì)時(shí)時(shí)間
??????SMG2???:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);--倒計(jì)時(shí)時(shí)間
??????SEG??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--數(shù)碼管段選
??????SEL???:?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0)--數(shù)碼管位選
???);
END?display;
ARCHITECTURE?behavioral?OF?display?IS
???
???SIGNAL?SMG1_ten??:?INTEGER?:=?0;?
???SIGNAL?SMG1_one??:?INTEGER?:=?0;?
???SIGNAL?SMG2_ten?:?INTEGER?:=?0;?
???SIGNAL?SMG2_one?:?INTEGER?:=?0;?
SIGNAL?SMG1_int??:?INTEGER?:=?0;?
SIGNAL?SMG2_int??:?INTEGER?:=?0;
???
???SIGNAL?display_data??:?INTEGER?:=?0;?
???SIGNAL?select_num????:?STD_LOGIC_VECTOR(31?DOWNTO?0)?:=?"00000000000000000000000000000000";
???SIGNAL?geshu?????????:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000";
BEGIN
???SMG1_int<=Conv_Integer(SMG1);--轉(zhuǎn)為int類型
???SMG2_int<=Conv_Integer(SMG2);--轉(zhuǎn)為int類型
???SMG1_ten?<=?SMG1_int?/?10;--時(shí)間十位
???SMG1_one?<=?SMG1_int-?SMG1_ten?*10;--時(shí)間個(gè)位
???SMG2_ten?<=?SMG2_int?/?10;--時(shí)間十位
???SMG2_one?<=?SMG2_int-?SMG2_ten?*10;--時(shí)間個(gè)位
???
???PROCESS?(clk)
???BEGIN
??????IF?(clk'EVENT?AND?clk?=?'1')?THEN
???????????geshu?<=?geshu?+?"0000000000000001";?--掃描那個(gè)管子的指示位
??????END?IF;
???END?PROCESS;
???
???
???PROCESS?(geshu)--位選切換
???BEGIN
??????CASE?geshu(5?downto?4)?IS---仿真將geshu(15?downto?14)改為geshu(5?downto?4)
?????????WHEN?"00"?=>
????????????SEL?<=?"000";
????????????display_data?<=??SMG1_ten;--時(shí)間個(gè)位
?????????WHEN?"01"?=>
????????????SEL?<=?"001";
????????????display_data?<=??SMG1_one;--時(shí)間十位
?????????WHEN?"10"?=>
????????????SEL?<=?"010";
????????????display_data?<=??SMG2_ten;--時(shí)間個(gè)位
?????????WHEN?"11"?=>
????????????SEL?<=?"011";
????????????display_data?<=??SMG2_one;--時(shí)間十位
?????????WHEN?OTHERS?=>
??????END?CASE;
???END?PROCESS;
???
???-------段選輸出--
???PROCESS?(display_data)
???BEGIN
??????CASE?display_data?IS--數(shù)字顯示碼
?????????WHEN?0?=>
????????????SEG?<=not"11000000";
?????????WHEN?1?=>
????????????SEG?<=?not"11111001";
?????????WHEN?2?=>
????????????SEG?<=?not"10100100";
?????????WHEN?3?=>
????????????SEG?<=?not"10110000";
?????????WHEN?4?=>
????????????SEG?<=?not"10011001";
?????????WHEN?5?=>
????????????SEG?<=?not"10010010";
?????????WHEN?6?=>
????????????SEG?<=?not"10000010";
?????????WHEN?7?=>
????????????SEG?<=?not"11111000";
?????????WHEN?8?=>
????????????SEG?<=?not"10000000";
?????????WHEN?9?=>
????????????SEG?<=?not"10010000";
?????????WHEN?OTHERS?=>
??????END?CASE;
???END?PROCESS;
???
???
END?behavioral;

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

  • 2-240112094GV49.doc
    下載

相關(guān)推薦