多功能交通灯控制系统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

要求.jpg

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在DE2-115开发板验证,开发板如下,其他开发板可以修改管脚适配:

DE2-115.png

代码下载:多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板名称:多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板(代码在文末下载)软件:Quartus II语言:VHDL代码功能:要求设计一个多功能交通灯控制系统。并进行软件仿真与硬件实现。要求做到 (1)主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行,主干道每次放行60s,支干道每次放行45s.每次由绿灯变为红灯的过程中,黄灯亮3S作为过渡; (2)能实现正常的倒计时显示功icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=263

设计文档:

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;

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值