十字路口交通灯控制器.doc
如有侵权,请联系网站删除,仅供学习与交流十字路口交通灯控制器【精品文档】第 7 页EDA实验报告-十字路口交通灯控制器设计姓名:康淼学号:13020710015指导教师:徐少莹一、 设计目的1、熟悉数字电路中时序逻辑电路与组合逻辑电路的设计。2、熟悉并掌握用移位寄存器设计彩灯数码管控制的方法。二、 设计任务及其要求设计一个十字路口交通控制系统,要求:(1)其东西,南北两个方向除了有红、黄、绿灯指示是否允许通行外。(2)设有时钟,以倒计时方式显示每一路允许通行的时间,绿灯,黄灯,红灯的持续时间分别是40、5和45秒。(3)当东西或南北两路中任一道上出现特殊情况,例如有消防车,警车要去执行任务,此时交通控制系统应可由交警手动控制立即进入特殊运行状态,即两条道上的所有车辆皆停止通行,红灯全亮,时钟停止计时,且其数字在闪烁。当特殊运行状态结束后,管理系统恢复原来的状态,继续正常运行。 实际状态示意图如下:三、 设计思路首先路口的情况分为两种情况,第一是普通情况,第二是紧急情况。因此设计一个EN作为交警手动控制位。当EN=0时,交通灯工作在普通模式,当EN=1时,交通灯工作在紧急模式。一、 普通模式交通灯有三种颜色,红黄绿。通过观察可以发现这三种颜色处在一个循环当中当南北路口的红灯转绿灯时,东西路口应是黄灯转红灯;当南北路口的绿灯转黄灯时,东西路口应是红灯不变;当南北路口的黄灯转红灯时,东西路口应是红灯转绿灯。因此发现东西路口缺少了一种绿转黄的状态,因此可知在程序设计时考虑四种情况:1、南北路口的红灯转绿灯,此时东西路口黄灯转红灯,南北置数39,东西置数442、南北路口的绿灯转黄灯,此时东西路口红灯不变,南北置数4,东西不置数3、南北路口的黄灯转红灯,此时东西路口红灯转绿灯,南北置数44,东西置数394、东西路口绿灯转黄灯,此时南北路口的红灯不变,南北不置数,东西置数4其他情况里东西南北的置数递减即可。二、 紧急模式计时停止;当前的计时状态与0000进行交替闪烁。双向道路全部变成红灯。四、 程序编写library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity trafficlight is port( clk,en:in std_logic; -clock and en pin input led_ns,led_we:out std_logic_vector(2 downto 0); -out pins: north and south led; west and east ledt_ns_h,t_ns_l,t_we_h,t_we_l:out std_logic_vector(3 downto 0) -clock of north and south or west and eastend trafficlight;architecture one of trafficlight is signal temp:std_logic; -clock signalsignal l_ns:std_logic_vector(2 downto 0):="100" -red yellow greensignal l_we:std_logic_vector(2 downto 0):="010"-at the begining ns is stopped,we is allowedsignal temp_ns_h:std_logic_vector(3 downto 0):="0100" -north and south counter high bitsignal temp_ns_l:std_logic_vector(3 downto 0):="0100" -north and south counter low bitsignal temp_we_h:std_logic_vector(3 downto 0):="0011" -west and east counter high bitsignal temp_we_l:std_logic_vector(3 downto 0):="1001" -west and east counter low bitsignal a,b:std_logic_vector(3 downto 0):="0000"signal c,d:std_logic_vector(3 downto 0):="0000"signal state:std_logic:='0' begin process(clk,en)begin if(clk'event and clk='1') then if(en='0') then-work in normal if(temp_ns_h="0000" and temp_ns_l="0000" and l_ns="100") then-north and south time is 0;red led is on temp_ns_h<="0011"temp_ns_l<="1001" -ns time is to 39;l_ns<="010" -ns road : red led is to low; green led is to high;temp_we_h<="0100" temp_we_l<="0100" -we time is to 44;l_we<="100" -we road : red led is to high;elsif(temp_ns_h="0000" and temp_ns_l="0000" and l_ns="010") then-if north and south time is 0;green led is on temp_ns_h<="0000"temp_ns_l<="0100"l_ns<="001"temp_we_l<=temp_we_l-1;-west and east sub 1elsif(temp_ns_h="0000" and temp_ns_l="0000" and l_ns="001") then-if north and south time is 0;yellow led is on temp_ns_h<="0100"temp_ns_l<="0100"-44l_ns<="100"temp_we_h<="0011"temp_we_l<="1001"-39l_we<="010"-green is onelsif(temp_we_h="0000" and temp_we_l="0000" and l_we="010") then temp_we_h<="0000"temp_we_l<="0100"l_we<="001"temp_ns_l<=temp_ns_l-1;else-sub ing if(temp_ns_l="0000" and temp_we_l>"0000") then temp_ns_l<="1001" temp_ns_h<=temp_ns_h-1; else temp_ns_l<=temp_ns_l-1; end if;if(temp_we_l="0000" and temp_ns_l>"0000") then temp_we_l<="1001" temp_we_h<=temp_we_h-1;else temp_we_l<=temp_we_l-1;end if;if(temp_ns_l="0000" and temp_we_l="0000") then temp_ns_l<="1001" temp_we_l<="1001" temp_ns_h<=temp_ns_h-1; temp_we_h<=temp_we_h-1; end if;end if;a<=temp_ns_h;b<=temp_ns_l;c<=temp_we_h;d<=temp_we_l;t_ns_h<=temp_ns_h;t_ns_l<=temp_ns_l;t_we_h<=temp_we_h;t_we_l<=temp_we_l;led_ns<=l_ns;led_we<=l_we;end if;end if;if(en='1') then-work in enmergency if(clk='1') then a<="0000" b<="0000" c<="0000" d<="0000" else a<=temp_ns_h; b<=temp_ns_l; c<=temp_we_h; d<=temp_we_l; end if; t_ns_h<=a; t_ns_l<=b; t_we_h<=c; t_we_l<=d; led_ns<="100" led_we<="100"end if; end process;end one;五、 下载调试将代码进行拷贝在电脑上,分析。无错误后进行pins 配置 ,下载到fpga。功能实现:计时状态正确,外部中断实现。运行波形图1.紧急情况时2.正常运行时六、 课后分析感想 在编写程序之前,自己把课上内容重新看了一遍,并且熟悉了软件的运用方法,然后从图书馆借鉴了一些书籍,从中得到了编写程序的方法,并且在同学和老师的帮助下完成了EDA实验的调试与实现仿真,并在老师的指导下安排好管脚,实现了交通灯的设计,最后还是感谢老师细心教导我们,帮助我们完成实验。