名称:多功能交通灯控制系统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
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在DE2-115开发板验证,开发板如下,其他开发板可以修改管脚适配:
代码下载:多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板名称:多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板(代码在文末下载)软件:Quartus II语言:VHDL代码功能:要求设计一个多功能交通灯控制系统。并进行软件仿真与硬件实现。要求做到 (1)主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行,主干道每次放行60s,支干道每次放行45s.每次由绿灯变为红灯的过程中,黄灯亮3S作为过渡; (2)能实现正常的倒计时显示功http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=263
设计文档:
1. 工程文件
2. 程序文件
3. 管脚分配
4. 程序编译
5. RTL图
6. 仿真图
整体仿真图
分频模块仿真图
交通灯控制模块
显示模块
文章来源:https://www.toymoban.com/news/detail-762383.html
部分代码展示:文章来源地址https://www.toymoban.com/news/detail-762383.html
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;
到了这里,关于多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!