E D A 课程设计报告交通信号控制器的VHDL设计班级:2009级通信工程一班姓名:陈洁学号:2009550606指导老师:刘奇能交通信号控制器的VHDL的设计一、设计任务模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。
能达到的要求:(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;(2)交通灯红变绿是直接进行的,没有间隔时间;(3)主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4)在任意时间,显示每个状态到该状态结束所需的时间。
主干道图1 路口交通管理示意图表1 交通信号灯的4种状态二、设计原理1、设计目的:学习DEA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。
通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制2、设计说明(1)第一模块:clk时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。
因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。
模块说明:系统输入信号:Clk: 由外接信号发生器提供256的时钟信号;系统输出信号:full:产生每秒一个脉冲的信号;(2)第二模块:计数秒数选择电路计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。
模块说明:系统输入:full: 接收由clk电路的提供的1hz的时钟脉冲信号;系统输出信号:tai:产生显示电路状态转换信号gw:倒计数值秒数个位变化控制信号sw:倒计数值秒数十位变化控制信号sgw:次倒计数值秒数个位变化控制信号;ssw:次倒计数值秒数十位变化控制信号;(3)第三模块:红绿灯状态转换电路本电路负责红绿灯的转换。
模块说明:系统输入信号:full: 接收由clk电路的提供的1hz的时钟脉冲信号;tai: 接收计数秒数选择电路状态转换信号;系统输出信号:zhuangtai: 负责红绿灯的状态显示。
(4)第四模块:时间显示电路本电路负责红绿灯的计数时间的显示。
模块说明:系统输入信号:gw:倒计数值秒数个位变化控制信号;sw:倒计数值秒数十位变化控制信号;sgw:次倒计数值秒数个位变化控制信号;ssw:次倒计数值秒数十位变化控制信号;系统输出信号:led7gw: 负责主红绿灯的显示秒数个位。
led7sw:负责主红绿灯的显示秒数十位。
sled7gw: 负责支干红绿灯的显示秒数个位。
s led7sw:负责支干红绿灯的显示秒数十位。
三、设计方案图2 交通信号灯控制器的原理框图采用VHDL语言输入的方式实现交通信号灯控制器间显示数据输信号灯输出图3 交通信号灯控制器程序原理框图该程序由7个进程组成,进程P1和P2将CLK信号分频后产生1秒信号,进程P3、P4、P5构成两个带有预置数功能的十进制计数器,其中P4产生允许十位计数器计数的控制信号。
进程P6实现状态转换和产生状态转换的控制信号,进程P7产生次态信号和信号灯输出信号,以及每一个状态的时间值。
四、VHDL程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY chenjie ISPORT (clk:in std_logic;led7gw:out std_logic_vector(6 downto 0);led7sw:out std_logic_vector(6 downto 0);sled7gw:out std_logic_vector(6 downto 0);sled7sw:out std_logic_vector(6 downto 0);zhuangtai:out std_logic_vector(5 downto 0));END;ARCHITECTURE one OF chenjie ISTYPE tai IS (s0,s1,s2,s3);SIgnal xiantai,citai:tai;SIGNAL gw :STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL sw:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL sgw :STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL ssw:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL tm :STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL ts :STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL TIME :STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINPROCESS(clk)BEGINIF clk'EVENT AND clk='1' THENIF TIME<"1000011" THENTIME<=TIME+1;ELSe TIME <="0000000";END IF;END IF;END PROCESS;REG:process( clk,xiantai)BEGINIF clk='1' AND clk'EVENT THENxiantai<=citai;END IF;END process;COM:process( xiantai, time)begincase xiantai iswhen s0=>zhuangtai<="001100";tm<=39-time;ts<=43-time; if time=39 then citai<=s1;else citai<=s0;end if;when s1=>zhuangtai<="010100";tm<=43-time;ts<=43-time; if time=43 then citai<=s2;else citai<=s1;end if;when s2=>zhuangtai<="100010";tm<=67-time;ts<=63-time; if time=63 then citai<=s3;else citai<=s2;end if;when s3=>zhuangtai<="100001";tm<=67-time;ts<=67-time; if time=67 then citai<=s0;else citai<=s3;end if;end case;end process;PROCESS(tm)BEGINIF tm>=30 THEN sw<="11";gw<=tm-30; ELSIF tm>=20 THEN sw<="10";gw<=tm-20; ELSIF tm>=10 THEN sw<="01";gw<=tm-10; ELSE sw<="00";gw<=tm;END IF;END PROCESS;PROCESS(ts)BEGINIF ts>=40 THEN ssw<="100";sgw<=ts-40; ELSIF ts>=30 THEN ssw<="011";sgw<=ts-30; ELSIF ts>=20 THEN ssw<="010";sgw<=ts-20; ELSIF ts>=10 THEN ssw<="001";sgw<=ts-10; ELSE ssw<="000";sgw<=ts;END IF;END PROCESS;process(sw,gw)begincase sw iswhen"00"=>led7sw<="0111111";when"01"=>led7sw<="0000110";when"10"=>led7sw<="1011011";when"11"=>led7sw<="1001111";when others=>null;end case;case gw iswhen "0000000"=>led7gw<="0111111";when"0000001"=>led7gw<="0000110";when"0000011"=>led7gw<="1001111";when"0000100"=>led7gw<="1100110";when "0000101"=>led7gw<="1101101";when "0000110"=>led7gw<="1111101";when"0000111"=>led7gw<="0000111";when "0001000"=>led7gw<="1111111";when "0001001"=>led7gw<="1101111";when others=>null;end case;end process;process(ssw,sgw)begincase ssw iswhen"000"=>sled7sw<="0111111";when"001"=>sled7sw<="0000110";when"010"=>sled7sw<="1011011";when"011"=>sled7sw<="1001111";when"100"=>sled7sw<="1001111";when others=>null;end case;case sgw iswhen "0000000"=>sled7gw<="0111111";when"0000001"=>sled7gw<="0000110";when "0000010"=>sled7gw<="1011011";when"0000011"=>sled7gw<="1001111";when"0000100"=>sled7gw<="1100110";when "0000101"=>sled7gw<="1101101";when "0000110"=>sled7gw<="1111101";when"0000111"=>sled7gw<="0000111";when "0001001"=>sled7gw<="1101111";when others=>null;end case;end process;end;五、仿真结果(如下图)未修改的程序程序修改后图ABCDE六引脚设置选择的引脚锁定方法如下图所示。