• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于FPGA的交通灯控制器设计VHDL代码ISE 仿真

07/29 09:03
658
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-2405242006254R.doc

共1个文件

名称:基于FPGA的交通灯控制器设计VHDL代码ISE仿真

软件:ISE

语言:VHDL

代码功能:

交通灯控制器设计要求

1.控制对象为单个十字路口的南北向交通灯,具体包含一个左转箭头灯(可以显示红色,绿色)和一个圆形指示灯(可以显示红色,绿色,以及黄色);

2.圆形指示灯:当接收到东西向左转箭头灯的左转完成信号(外界输入)后,经过3次黄灯闪烁(一秒闪烁一次)后由原本的红灯跳转为绿灯,绿灯维持24秒,经过3次黄灯闪烁跳转回红灯,并输出一个左转允许信号;

3.左转箭头灯:当接收到圆形指示灯的左转允许信号后,由红色跳转为绿色,维持15秒后跳转回红色,并输出一个左转完成信号;

4.设置一个交通管制按钮,该按钮按下后,所有信号灯亮起红色;

5.需要分别完成以下两个模块的VHDL设计并分别进行仿真测试:圆灯控制器和箭头灯控制器;

6.按照合理逻辑将上述两个模块进行连接,必要时适当添加周边电路,完成整体的VHDL设计,再进行仿真测试。

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

演示视频:

设计文档:

1. 工程文件

2. 程序文件

圆灯控制模块

箭头灯控制模块

整体模块

3. 程序编译

4. Testbench

5. 仿真图

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--箭头灯控制模块 
ENTITY left_ctrl IS
   PORT (
      clk           : IN STD_LOGIC;--1Hz时钟
      reset         : IN STD_LOGIC;--复位
      critical_key  : IN STD_LOGIC;--交通管制按键
      round_left_done  : IN STD_LOGIC;--圆灯左转允许
      left_red         : OUT STD_LOGIC;--左转箭头红色
      left_green       : OUT STD_LOGIC;--左转箭头绿色
left_left_done   : OUT STD_LOGIC--南北方向输出左转完成信号
   );
END left_ctrl;
ARCHITECTURE behave OF left_ctrl IS
   TYPE State_type IS (s_red, s_green, s_critical);  -- 定义状态
   SIGNAL state : State_Type;    -- 创建信号
   SIGNAL green_cnt : STD_LOGIC_VECTOR(4 DOWNTO 0) := "00000";
BEGIN
   PROCESS (clk, reset)
   BEGIN
      IF (reset = '1') THEN
         state <= s_red;--复位
      ELSIF (clk'EVENT AND clk = '1') THEN
         IF (critical_key = '1') THEN--交通管制按键
            state <= s_red;--红灯
         ELSE
            CASE state IS
               WHEN s_red =>--红灯状态
                  IF (round_left_done = '1') THEN--圆灯左转允许
                     state <= s_green;
                  ELSE
                     state <= s_red;
                  END IF;
               WHEN s_green =>--绿灯状态
                  IF (green_cnt >= "01110") THEN--绿灯计时
                     state <= s_red;
                  ELSE
                     state <= s_green;
                  END IF;
               WHEN OTHERS =>
                  state <= s_red;--红灯状态
            END CASE;
         END IF;
      END IF;
   END PROCESS;
   
   --绿灯状态计时
   PROCESS (clk, reset)
   BEGIN
      IF (reset = '1') THEN
         green_cnt <= "00000";
      ELSIF (clk'EVENT AND clk = '1') THEN
         IF (state = s_green) THEN
            green_cnt <= green_cnt + "00001";--绿灯计时
         ELSE
            green_cnt <= "00000";
         END IF;
      END IF;
   END PROCESS;
   
   --红灯状态
   PROCESS (state)
   BEGIN
      IF (state = s_red) THEN
         left_red <= '1';--输出左转红灯
      ELSE
         left_red <= '0';
      END IF;
   END PROCESS;
   
   --绿灯状态
   PROCESS (state)
   BEGIN
      IF (state = s_green) THEN
         left_green <= '1';--输出左转绿灯
      ELSE
         left_green <= '0';
      END IF;
   END PROCESS;
   
   ----南北方向输出左转完成信号
   PROCESS (clk, reset)
   BEGIN
      IF (reset = '1') THEN
         left_left_done <= '0';
      ELSIF (clk'EVENT AND clk = '1') THEN
         IF (state = s_green AND green_cnt >= "01110") THEN
            left_left_done <= '1';
         ELSE
            left_left_done <= '0';
         END IF;
      END IF;
   END PROCESS;   
END behave;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=785

  • 2-2405242006254R.doc
    下载

相关推荐