多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板
名称:多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板(代码在文末下载)
软件:Quartus II
语言:VHDL
代码功能:
要求设计一个多功能交通灯控制系统。并进行软件仿真与硬件实现。要求做到
(1)主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行,主干道每次放行60s,支干道每次放行45s.每次由绿灯变为红灯的过程中,黄灯亮3S作为过渡;
(2)能实现正常的倒计时显示功能;
(3)能实现总体清零功能:计数器由初始状态开始计数,对应状态的指示灯亮
(4)能实现特殊状态的功能显示:进入特殊状态时,东西、南北路口均显示红灯状态
(5)在任何一个时刻,有一盏灯亮而且只有一盏灯亮。否则发出故障信号,提醒相关人员去维修。
本代码的通行时间可以设置,如下代码修改即可:
--主、支干道均有车时,两者交替允许通行, --主干道每次放行60秒,支干道每次放行45秒, --设立60秒、45秒计时、显示电路 --设置时间,可自行修改时间, --主路红灯时间等于支路绿灯加黄灯 --支路红灯时间等于主路绿灯加黄灯 G1_time <= "00111100";--主路绿灯60s Y1_time <= "00000011";--主路黄灯3s G2_time <= "00101101";--支路绿灯45s Y2_time <= "00000011";--支路黄灯3s
要求学生有一定的模拟及数字电子技术知识,对VHDL语言比较熟悉,有一定的动手能力

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在DE2-115开发板验证,开发板如下,其他开发板可以修改管脚适配:

演示视频:
设计文档:
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;--复位
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);--数码管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;
reset_n : IN STD_LOGIC;--复位
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);--输出数码管显示数
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 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计数
led1_cnt<=('0'& R1_led) + ('0'& G1_led) + ('0'& Y1_led);
led2_cnt<=('0'& R2_led) + ('0'& G2_led) + ('0'& Y2_led);
--判断是否有2个以上灯亮,若有输出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
);
--主、支干道均有车时,两者交替允许通行,
--主干道每次放行60秒,支干道每次放行45秒,
--设立60秒、45秒计时、显示电路
--设置时间,可自行修改时间,
--主路红灯时间等于支路绿灯加黄灯
--支路红灯时间等于主路绿灯加黄灯
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,--数码管显示
SMG2 => SMG2--数码管显示
);
--数码管显示模块
U3 : HEX
PORT MAP (
clk => clk,
SMG_1 => SMG1,--数码管数据显示
SMG_2 => SMG2,--数码管数据显示
HEX0 => HEX0_SIG,--低电平亮
HEX1 => HEX1_SIG,--低电平亮
HEX2 => HEX2_SIG,--低电平亮
HEX3 => HEX3_SIG--低电平亮
);
END behave;代码文件(付费下载):
![]()
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板