名称:十字路口的交通灯控制电路设计VHDL代码Quartus DE2-115开发板
软件:Quartus
语言:VHDL
代码功能:
十字路口的交通灯控制电路
要求:
(1)设计一个十字路口的交通灯控制电路,每条路配有红、黄、绿交通信号灯,通过电路对十字路口的两组交通灯的状态实现自动循环控制;
(2)实现东西车道和南北车道上的车辆交替运行,每次通行时间为20秒;
(3)要求黄灯亮3秒后,红灯才能转为绿灯,黄灯亮时要每秒闪亮一次;
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在DE2-115开发板验证,DE2-115开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
工程文件
程序文件
管脚分配
程序编译
RTL图
仿真图
交通灯控制模块仿真
显示模块仿真
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY Traffic_Light_Control IS PORT ( clk : IN STD_LOGIC;--50Mhz 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);--数码管0 HEX1 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--数码管1 HEX2 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--数码管2 HEX3 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)--数码管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 RGY IS PORT ( clk_1 : IN STD_LOGIC; clk : 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);--输出数码管显示数 SMG2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--输出数码管显示数 ); 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 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 and clk_1;--主路黄灯 R2 <= R2_led;--支路红灯 G2 <= G2_led;--支路绿灯 Y2 <= Y2_led and clk_1;--支路黄灯 --分频到1hz U_CLOCK : CLOCK PORT MAP ( clk => clk, dav => clk_1 ); --设置时间,可自行修改时间, --主路红灯时间等于支路绿灯加黄灯 --支路红灯时间等于主路绿灯加黄灯 G1_time <= "00010100";--主路绿灯20s Y1_time <= "00000011";--主路黄灯3s G2_time <= "00010100";--支路绿灯20s Y2_time <= "00000011";--支路黄灯3s
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1219
阅读全文
310