精华内容
下载资源
问答
  • VHDL交通灯控制器的设计
    2021-05-28 11:19:10

    主要内容:
    设计主干道的交叉路口交通信号灯无人自动管理的控制系统.将路口红绿灯的各种亮灯情况定义不同的状态,路口状况定义为触发条件,组成有限状态机。

    1、设计的目的
    本次课程设计的目的是通过设计交通灯控制器,了解EDA技术,了解并掌握VHDL硬件描述语言的设计方法和思想,巩固和综合运用所学过的计算机组成原理知识,提高分析、解决计算机技术实际问题的独立工作能力。

    2 、设计的基本内容
    这次课程设计的题目是交通灯控制器的设计。设计了主干道的交叉路口交通信号灯无人自动管理的控制系统.将路口红绿灯的各种亮灯情况定义不同的状态,路口状况定义为触发条件,组成有限状态机.基于此模型的交通信号灯控制系统可充分利用现有交通资源,缓解城市交通压力。

    课设报告和代码截图如下:
    在这里插入图片描述
    交通灯VHDL语言代码:
    顶层模块
    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    entity traffic_light is
    port(clk,sm,sc:in bit;
    mg,my,mr,cg,cy,cr:out bit);
    end traffic_light;

    architecture arch of traffic_light is
    type state_type is (a,b,c,d

    更多相关内容
  • VHDL交通灯

    2012-11-25 22:13:13
    模拟十字路口交通灯的控制情况,支持紧急情况 用实验台上4个红灯,4个绿灯,4个黄灯模拟4个路口的交通灯情况; 数时钟源的脉冲个数,当大于5000时,将一信号CLK1置‘1’,并复位计数;否则将该信号CLK1置‘0’,继续...
  • VHDL 交通灯

    2020-12-15 15:20:45
    Entity traffic is Port(clk,rst:in std_logic; led:out std_logic_vector(5 downto 0)); end traffic; Architecture behavior of traffic is signal cnt:std_logic_vector(5 downto 0); type traffic_st is(westg,...

    交通灯变换说明

    Entity traffic is
    Port(clk,rst:in std_logic;
             led:out std_logic_vector(5 downto 0));
    end traffic;
    Architecture behavior of traffic is
    signal cnt:std_logic_vector(5 downto 0);
    type traffic_st is(westg,westy,northg,northy);
    signal st_traffic:traffic_st;
    begin
    process(clk,rst)
    begin
    if rst='0' then
        cnt<="000000"
        led<="000000";
        st_traffic<=westg;
    elsif rising_edge(clk) then
        case st_traffic is
        when westg=>
        led<="001100";
        if cnt=29 then
            cnt<="000000";
            st_traffic<=westy;
        else
            cnt<=cnt+1;
        end if;
        when westy=>
        led<="010100";
        if cnt=5 then
            cnt<="000000";
            st_traffic<=northg;
        else
            cnt<=cnt+1;
        end if;
        when northg=>
        led<="100001";
        if cnt=29 then    
            cnt<="000000";        
            st_traffic<=northy;    
        else
            cnt<=cnt+1;    
        end if;
        when northy=>
        led<="100010";    
        if cnt=5 then  
            cnt<="000000";        
            st_traffic<=westg; 
        else        
            cnt<=cnt+1;   
        end if;
        when others=>
        end case;
    end if;
    end process;
    
    展开全文
  • vhdl交通灯

    2011-11-06 22:29:45
    vhdl编写的交通灯程序,其中使用了ps2键盘来控制,可直接在ise中编译就能使用,也可将代码文件复制在quartus中编译,同样能够通过。
  • 能实现两个方向交通灯功能,vhdl语言实现,使用quartus平台
  • vhdl交通灯实验

    2013-04-10 12:56:36
    本文档记载了交通灯控制部分的各程序源代码,模拟了简单的交通灯系统
  • VHDL交通灯代码

    2019-04-21 23:16:23
    VHDL交通灯代码
  • 实现主干道交通灯显示,以状态机程序实现,并用数码管进行红绿灯倒计时的显示,内置计数模块,交通灯控制模块,数码管显示模块,并对各模块用电路图的方式进行连接。对于学习VHDL语言有所帮助。
  • vhdl 交通灯程序

    2010-05-29 20:28:40
    本程序为交通灯控制芯片的VHDL程序,在MAXPLUSII上编译通过,仿真时序正确。四川理工
  • VHDL交通灯课程设计.pdf
  • vhdl交通灯设计源代码

    2012-06-17 16:48:59
    本设计通过了验证 实现交通灯的自主控制 东西方向红绿灯及黄灯闪烁 南北方向红绿灯通行及黄灯闪烁 紧急情况下的亮灯控制
  • 基于vhdl交通灯课程设计说明书.pdf
  • 基于vhdl交通灯设计与实现说明书.pdf
  • 基于vhdl交通灯控制器设计说明书.pdf
  • 基于VHDL交通灯系统的设计论文.doc
  • 基于vhdl交通灯控制器设计与仿真说明书.pdf
  • 基于vhdl交通灯控制器的设计和实现说明书.pdf
  • 一共十二个,东西南北四个方向,采用vhdl语言设计,用了block diagram综合
  • VHDL交通灯源码

    2014-07-04 17:02:15
    我这次做的是十字路口交通控制器的设计,在...根据不同情况下路段的繁忙程度,可以调整交通灯的控制时间来改变不同方向的通行时间,在高峰期,主干道的车辆会比较多,所以在转为高峰状态时,主干道的通行时间会有所增加
  • 设计一个交通控制器,用LED显示来表示交通状态,并以7段数码管显示器显示当前状态的剩余秒数,集体要求如下: 主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行,主干道每次放行35s,支干道每次放行...

    一、设计要求

    设计一个交通控制器,用LED显示灯来表示交通状态,并以7段数码管显示器显示当前状态的剩余秒数,集体要求如下:  
    
    1. 主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行,主干道每次放行35s,支干道每次放行25s。每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯时间为5s,状态转换如下表所示。
    2. 能实现正常的倒计时显示功能。
    3. 能实现特殊状态的功能显示:进入特殊状态时,主干道、支干道路口均显示红灯状态。

    二、设计原理

    根据要求可以画出交通灯点亮规律的状态转换表,如下表所示。由表可知共有4个状态,可以利用状态机来实现各种状态之间的转换。
    
    状态主干道支干道时间
    S1绿灯亮红灯亮35s
    S2黄灯亮红灯亮5s
    S3红灯亮绿灯亮25s
    S4红灯亮黄灯亮5s

    三、相关代码

    1、主代码

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;
    
    entity traffic_light is
        Port ( 
               clk      : in STD_LOGIC;                          --系统时钟100MHZ
               jin      : in STD_LOGIC;                          --禁止通行信号
               scan     : out STD_LOGIC_VECTOR (3 downto 0);    --数码管片选信号
               seg7     : out STD_LOGIC_VECTOR (6 downto 0);    --数码管七段显示控制信号abcdefg
               a_ryg    : out STD_LOGIC_VECTOR (2 downto 0);    --主干道红、黄、蓝灯  
               b_ryg    : out STD_LOGIC_VECTOR (2 downto 0)     --支干道红、黄、蓝灯          
               );          
    end traffic_light;
    
    architecture Behavioral of traffic_light is
      type states is (s1,s2,s3,s4);                                 --定义四种状态
      signal state            : states:=s1;                         --当前状态
      signal clk_1khz,clk_1hz : std_logic:='0';                    --分频信号1khz,1hz
      signal count1           : integer range 0 to 49999:=0;       --1khz分频计数信号
      signal count2           : integer range 0 to 499:=0;         --1hz分频计数信号
      signal ten,one          : std_logic_vector(3 downto 0);     --倒计时的十位、个位
      signal cnt              : integer range 0 to 1:=0;           --数码管扫描计数信号
      signal data             : std_logic_vector(3 downto 0);
      signal seg7_temp        : std_logic_vector(6 downto 0):=(others=>'1');
      signal a                : std_logic_vector(2 downto 0);             --主干道红、黄、绿交通灯
      signal b                : std_logic_vector(2 downto 0);             --支干道红、黄、绿交通灯
      signal qh               : std_logic_vector(3 downto 0);             --计数的高位
      signal ql               : std_logic_vector(3 downto 0);             --计数的低位
     
    begin
    --1khz分频计数
      count1_gen:process(clk)  
      begin
        if(clk'event and clk='1')then
          if(count1=49999)then                -- N=(clk/clk_1khz)/2-1
            count1<=0;
          else
            count1<=count1+1;
          end if;
        end if;
      end process;
    
    --1khz分频(用于扫描数码管)
      clk_1khz_gen:process(clk)
      begin
        if(clk'event and clk='1')then
          if(count1=0)then
            clk_1khz<=not clk_1khz;
          else
            clk_1khz<=clk_1khz;
          end if;
        end if;
      end process;
      
    --1hz分频计数
      count2_gen:process(clk_1khz)
      begin
        if(clk_1khz'event and clk_1khz='1')then
          if(count2=499)then             
            count2<=0;
          else
            count2<=count2+1;
          end if;
        end if;
      end process;
      
    --1hz分频(用于数码管倒计时)
      clk_1hz_gen:process(clk_1khz)
      begin
        if(clk_1khz'event and clk_1khz='1')then
          if(count2=0)then
            clk_1hz<=not clk_1hz;
          else
            clk_1hz<=clk_1hz;
          end if;
        end if;
      end process;
      
    --各个状态倒计时赋初值、计时
      process(clk_1hz)
      variable temp : std_logic := '0';                 --倒计时赋值标志位
      begin
          if(clk_1hz'event and clk_1hz='1')then
            case state is
              when s1 =>                                 --实现倒计时35s
                if(temp='0')then
                  qh<="0011";
                  ql<="0100";
                  temp:='1';
                else
                  if(qh="0000" and ql="0001")then
                    qh<="0000";
                    ql<="0000";
                    temp:='0';
                  elsif(qh/="0000" and ql="0000")then
                    ql<="1001";
                    qh<=qh-1;
                  else
                    ql<=ql-1;            
                  end if;
                end if;
              when s2 =>                                 --实现倒计时5s
                if(temp='0')then
                  qh<="0000";
                  ql<="0100";
                  temp:='1';
                else
                  if(ql="0001")then
                    qh<="0000";
                    ql<="0000";
                    temp:='0';
                  else
                    ql<=ql-1;
                  end if;
                end if;
              when s3 =>                                --实现倒计时25s
                if(temp='0')then
                  qh<="0010";
                  ql<="0100";
                  temp:='1';
                else
                  if(qh="0000" and ql="0001")then
                    qh<="0000";
                    ql<="0000";
                    temp:='0';
                  elsif(qh/="0000" and ql="0000")then
                    ql<="1001";
                    qh<=qh-1;
                  else
                    ql<=ql-1;           
                  end if;
                end if;
              when s4 =>                                   --实现倒计时5s
                if(temp='0')then
                  qh<="0000";
                  ql<="0100";
                  temp:='1';
                else
                  if(qh="0000" and ql="0001")then
                    qh<="0000";
                    ql<="0000";
                    temp:='0';
                  else
                    ql<=ql-1;
                  end if;
                end if;
            end case;    
          end if;
          ten<=qh;
          one<=ql;
      end process;
    
    --交通状态转移
      process(clk_1hz)    
      begin
       if(jin='0')then
        if(clk_1hz'event and clk_1hz='1')then
          case state is
            when s1=>                                      --状态s1,主干道通行35s          
                if(qh="0000" and ql="0001")then
                  state<=s2;
                end if;         
            when s2=>                                      --状态s2,主干道黄灯倒计时5s          
                if(qh="0000" and ql="0001")then
                  state<=s3;
                end if;         
            when s3=>                                     --状态s3,支干道通行25s          
                if(qh="0000" and ql="0001")then
                  state<=s4;
                end if;        
            when s4=>                                     --状态s4,支干道黄灯倒计时5s         
                if(qh="0000" and ql="0001")then
                  state<=s1;
                end if;
          end case;
        end if;
       end if;
      end process;
      
    --主干道情况(红黄蓝)
      a_gen:process(clk)
      begin
          if(jin='0')then
            case state is
              when s1 =>
                a<="001";
              when s2 =>
                a<="010";
              when s3 =>
                a<="100";
              when s4 =>
                a<="100";
            end case;
          else
            a<="100";        --禁止信号,主干道亮红灯
          end if;
          a_ryg<=a;
      end process;
    
    --支干道情况(红黄蓝)
      b_gen:process(clk)
      begin
          if(jin='0')then
            case state is
              when s1 =>
                b<="100";
              when s2 =>
                b<="100";
              when s3 =>
                b<="001";
              when s4 =>
                b<="010";
            end case;
          else
            b<="100";         --禁止信号,支干道亮红灯
          end if;
          b_ryg<=b;
      end process;  
      
    --数码管动态扫描计数
      process(clk_1khz)
      begin
        if(clk_1khz'event and clk_1khz='1')then
          cnt<=cnt+1;
          if(cnt=1)then
            cnt<=0;      
          end if;
        end if;
      end process;
    
    --数码管动态扫描
      process(clk)
      begin
        if(clk'event and clk='1')then
          case cnt is
            when 0=>
              data<=one;
            when 1=>
              data<=ten;
            when others=>null;
          end case;
        end if;
      end process;
      
      process(clk)
      begin
        if(clk'event and clk='1')then
          case cnt is
            when 0=>
              scan<="1011";
            when 1=>
              scan<="0111";
            when others=>null;
          end case;
        end if;
      end process;
      
    --七段译码
      process(clk)
      begin
          case data is                                --abcdefg(约束时,a应该是最低位)
            when "0000"=>seg7_temp<="0000001";      --显示0
            when "0001"=>seg7_temp<="1001111";      --显示1
            when "0010"=>seg7_temp<="0010010";      --显示2
            when "0011"=>seg7_temp<="0000110";      --显示3
            when "0100"=>seg7_temp<="1001100";      --显示4
            when "0101"=>seg7_temp<="0100100";      --显示5
            when "0110"=>seg7_temp<="0100000";      --显示6
            when "0111"=>seg7_temp<="0001111";      --显示7
            when "1000"=>seg7_temp<="0000000";      --显示8
            when "1001"=>seg7_temp<="0000100";      --显示9
            when others =>seg7_temp<="0110000";      --显示E,代表出错
          end case;
      end process;
    
    --禁止通行信号,数码管闪烁显示
      process(clk)
      begin  
        if(jin='1')then
          --实现数码管闪烁显示
          seg7(0)<=seg7_temp(0) and clk_1hz;
          seg7(1)<=seg7_temp(1) and clk_1hz;
          seg7(2)<=seg7_temp(2) and clk_1hz;
          seg7(3)<=seg7_temp(3) and clk_1hz;
          seg7(4)<=seg7_temp(4) and clk_1hz;
          seg7(5)<=seg7_temp(5) and clk_1hz;
          seg7(6)<=seg7_temp(6) and clk_1hz;
        else
          seg7<=seg7_temp;      
        end if;  
      end process;
      
    end Behavioral;
    

    2、测试文件(testbench)

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    
    entity traffic_light_tb is
    --  Port ( );
    end traffic_light_tb;
    
    architecture Behavioral of traffic_light_tb is
      component traffic_light
         Port ( 
                clk      : in STD_LOGIC;                          --系统时钟100MHZ
                jin      : in STD_LOGIC;                          --禁止通行信号
                scan     : out STD_LOGIC_VECTOR (1 downto 0);    --数码管片选信号
                seg7     : out STD_LOGIC_VECTOR (6 downto 0);    --数码管七段显示控制信号abcdefg
                a_ryg    : out STD_LOGIC_VECTOR (2 downto 0);    --主干道红、黄、蓝灯  
                b_ryg    : out STD_LOGIC_VECTOR (2 downto 0)     --支干道红、黄、蓝灯          
                );
      end component;
      signal clk   : std_logic:='0';
      signal jin   : std_logic:='0';
      signal scan  : std_logic_vector(1 downto 0);
      signal seg7  : std_logic_vector(6 downto 0);
      signal a_ryg : std_logic_vector(2 downto 0);
      signal b_ryg : std_logic_vector(2 downto 0);  
      constant clk_period : time := 20ns;
    begin
      instant : traffic_light port map
        (clk=>clk,jin=>jin,scan=>scan,seg7=>seg7,a_ryg=>a_ryg,b_ryg=>b_ryg);
      
      clk_gen:process
      begin
        wait for clk_period/2;
        clk<='1';
        wait for clk_period/2;
        clk<='0';
      end process;
      
      jin_gen:process
      begin
        wait for 7 us;
        jin<='1';
        wait for 60ns;
        jin<='0';
        wait;
      end process;
    end Behavioral;
    

    3、约束文件(XDC)

    set_property PACKAGE_PIN W5 [get_ports clk]                            
      set_property IOSTANDARD LVCMOS33 [get_ports clk]
      create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports clk]
     
    set_property PACKAGE_PIN V17 [get_ports jin]                    
      set_property IOSTANDARD LVCMOS33 [get_ports jin]
    
    set_property PACKAGE_PIN U16 [get_ports {a_ryg[0]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {a_ryg[0]}]
    set_property PACKAGE_PIN E19 [get_ports {a_ryg[1]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {a_ryg[1]}]
    set_property PACKAGE_PIN U19 [get_ports {a_ryg[2]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {a_ryg[2]}]
    
    set_property PACKAGE_PIN N3 [get_ports {b_ryg[0]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {b_ryg[0]}]
    set_property PACKAGE_PIN P1 [get_ports {b_ryg[1]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {b_ryg[1]}]
    set_property PACKAGE_PIN L1 [get_ports {b_ryg[2]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {b_ryg[2]}]
           
    set_property PACKAGE_PIN W7 [get_ports {seg7[6]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {seg7[6]}]
    set_property PACKAGE_PIN W6 [get_ports {seg7[5]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {seg7[5]}]
    set_property PACKAGE_PIN U8 [get_ports {seg7[4]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {seg7[4]}]
    set_property PACKAGE_PIN V8 [get_ports {seg7[3]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {seg7[3]}]
    set_property PACKAGE_PIN U5 [get_ports {seg7[2]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {seg7[2]}]
    set_property PACKAGE_PIN V5 [get_ports {seg7[1]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {seg7[1]}]
    set_property PACKAGE_PIN U7 [get_ports {seg7[0]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {seg7[0]}]
    
    set_property PACKAGE_PIN U2 [get_ports {scan[0]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {scan[0]}]
    set_property PACKAGE_PIN U4 [get_ports {scan[1]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {scan[1]}]
    set_property PACKAGE_PIN V4 [get_ports {scan[2]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {scan[2]}]
    set_property PACKAGE_PIN W4 [get_ports {scan[3]}]                    
      set_property IOSTANDARD LVCMOS33 [get_ports {scan[3]}]  
    

    四、总结

    这段时间一直在找状态机的例子学习,这个交通灯的例子融合了数码管动态扫描、时钟分频、有限状态机等知识,我觉得还是很适合新手练习的。
    在我的约束文件中,LED[2…0]分别表示主干道红黄绿灯;LED[15…13]分别表示支干道红黄绿灯;Switches[0]表示禁止通行信号,高电平有效,在这个状态下,主干道,支干道都亮红灯,切数码管闪烁显示。
    在这里插入图片描述

    展开全文
  • 应用VHDL语言设计数字系统,大部分设计工作可在计算机上完成,从而缩短系统开发时间,提高工作效率。下面介绍基于VHDL设计交通灯控制器的一种方案,并给出源程序和仿真结果。
  • vhdl 交通灯源代码

    2011-02-24 11:38:01
    vhdl 交通灯源代码 支持预置时间及紧急状态
  • vhdl 交通灯资料打包

    2009-12-22 12:10:55
    这是我们系组织学习vhdl完成后的作品,一个有复位控制、东西特殊状态、南北特殊状态的交通灯,程序采用多进程控制,易于新手学习。大家下载后,如果有什么不懂,请和楼主发消息。 胖蛇集团 “西安文理学院机电系...
  • VHDL 交通灯设计

    2008-12-28 08:58:40
    VHDL语言实现十字路口的交通信号控制系统,红灯9秒时间,绿灯6秒,黄灯3秒
  • vhdl交通灯代码

    2014-12-29 13:33:47
    利用VHDL语言,设计交通灯,使得交通灯自动闪灭,控制时间。
  • 交通灯VHDL

    2011-10-22 23:45:52
    有一个实际的十字路口设置有东西、南北两个方向的干道,为确保车辆安全通行,在每条干道的每个入口设置了一组两位数码管显示装置和四组红、绿、黄信号,分别用来指示东西方向直行、南北方向直行、东西方向转弯和南北...
  • VHDL交通灯控制器设计

    2009-12-18 16:16:55
    VHDL实现的交通灯控制器 基于状态机实现 代码明晰
  • 当有人按下此按钮时,主干道变为黄灯,设置计数器计时时间为X秒;X秒过后,主干道变为红灯,计数器继续计时(计时时间为Y秒),在Y秒内若有人再次按按钮,计数器不重新计时。所以选择了状态机设计方法输入方式的设计...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 606
精华内容 242
关键字:

vhdl交通灯

友情链接: B样条python.zip