当前位置:文档之家› 交通信号灯_数字逻辑程序设计

交通信号灯_数字逻辑程序设计

石家庄经济学院信息工程学院数字逻辑课程设计报告题目十字路口交通灯控制器姓名赵永超学号************班号4091090706指导老师成绩2010年6月目录1. 功能描述 (52)2. 开发工具选择 (52)3. 设计方案 (52)4.模块描述 (52)5. VHDL实现 (52)6. 调试仿真 (52)7. 课程设计回顾总结 (52)参考文献 (52)附录 (52)1.功能描述ar,ay,ag 和br,by,bg分别表示A和B道的红灯,黄灯,绿灯的驱动信号。

信号灯在高电平时亮,低电平时熄灭。

十字路口的交通灯控制电路功能:十字路口交通灯控制规则为:当A道无车时,传感器输出X=0,A 道红灯一直亮,B道绿灯一直亮,直到15s定时时间到且A道有车为止;当B道通行15s且A道有车时,B道绿灯亮变成黄灯,经过5s后变成红灯亮,A道由红灯亮变成绿灯亮,直到10s定时时间到或者X=0为止;最后A道黄灯亮,B道红灯亮,直到5s定时时间到,再回到B道绿灯亮,A道红灯亮的初始状态。

2.开发工具选择选择VHDL语言描述,利用Quartus II 5.1工具。

3. 设计方案在设计方案之前,我们应明确课程设计的任务和要求:该数字系统完成对十字路口交通信号灯的控制,十字路口由一条南北方向的支干道(简称A道)和东西方向的主干道(简称B道)构成。

A道安装有车辆检测传感器X,当该道有车时,传感器输出信号为高电平,当该道无车时,传感器输出低电平信号。

十字路口交通灯控制规则为:当A道无车时,传感器输出X=0,A 道红灯一直亮,B道绿灯一直亮,直到15s定时时间到且A道有车为止;当B道通行15s且A道有车时,B道绿灯亮变成黄灯,经过5s后变成红灯亮,A道由红灯亮变成绿灯亮,直到10s定时时间到或者X=0为止;最后A道黄灯亮,B道红灯亮,直到5s定时时间到,再回到B道绿灯亮,A道红灯亮的初始状态。

(1)、首先对问题进行仔细分析设东西和南北方向的车流量大致相同,从题目中计数值与交通灯的亮灭的关系如下图所示:(2) 经过认真分析后制定设计方案如图3十字路口交通灯控制系统由定时器模块、控制器模块和输出模块组成。

定时器模块由15s 、5s 、10s 三个定时器构成,分别确定A 道、B 道通行时间(绿灯亮时间)、缓冲时间(黄灯亮时间)和禁止时间(红灯亮时间)。

三个定时器采用以秒为时钟的计数器来实现,e15,e5,e10分别是三个定时计数器的工作使能信号,即当e15,e5,e10为1时,相应的定时器计数;tm15、tm5、tm10为定时计数器的计数指示信号,当计数器在计数过程中,相应的指示信号为0,当计时时间到即计时结束时,相应的指示信号为1。

交通灯控制器模块的作用是对系统工作状态的转换进行控制,根据十字路口交通控制信号灯控制规则则可得到系统状态转换表如图4示,其中ar ,ay ,ag 和br ,by ,bg 分别表示由控制器输出的A 道和B 道红、黄、绿灯点B 道A0sec 35sec15sec 图2亮信号,e15、e10、e5分别表示由控制器输出传给15s、10s、5s三个定时计数器的计数使能信号,x为输入控制器的车辆传感器信号,tm15、tm5、tm10分别表示由15s、10s、5s定时计数器产生的计时时间到信号,它们是控制器的输入信号。

从图4可知系统有5个状态,编码为S0(00)、S1(01)、S2(10)、S3(11)、S4(xx),各信号高电平有效,低电平无效。

输出模块的作用是将控制器输出的各个信号进行驱动以点亮对应的信号灯,。

定时器模块控制器模块输出模块图3十字路口交通灯控制器状态转换表(图4)4.模块描述该控制系统主要分为三大模块:定时计数器模块和控制器模块和连接模块Ⅰ、定时计数器模块:该模块分为三个定时电路,假设时基脉冲为1Hz,则需要设计一个15进制计数器、一个5进制计数器和一个10进制计数器,且每个计数器应具有计数使能控制端和计时时间到信号输出端。

本设计中可采用异步清零、同步置位的4位十进制加法计数器74LS160构成。

(1)、模10定时计数器的简化形式如下图:表二模10计数器功能真值表(2)、模5定时计数器的简化形式如下图:(3)、模15定时计数器的简化形式如下图:表三模15计数器功能真值表Ⅱ、控制器模块的简化形式如下图:5.VHDL实现:下面是程序实现的vhdl代码(1)模5定时计数器实现代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY counter5 isPORT (cp, e5,reset: IN STD_LOGIC; --定义输入信号tm5: OUT STD_LOGIC); --定义输出信号END counter5;ARCHITECTURE cnt5 of counter5 is --结构体BEGINPROCESS(cp, reset) --进程的敏感信号是cp和reset,进程描述摸5计数过程V ARIABLE cnt: INTEGER RANGE 5 DOWNTO 0; --定义变量cnt 为整数,范围5到0BEGINIF reset='1' THENcnt:=0;ELSIF (cp'EVENT AND cp='1') THEN --如果CP信号发生变化且变化后结果是CP=’1’IF e5='1' AND cnt<5 THENcnt:=cnt+1;ELSEcnt:=0;END IF;END IF;IF cnt=5 THENtm5<='1' ;ELSEtm5<='0';END IF;END PROCESS;END cnt5;(2)、模10定时计数器实现代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY counter10 ISPORT(cp, e10, reset: IN STD_LOGIC; --定义输入信号tm10: OUT STD_LOGIC); --定义输出信号END counter10;ARCHITECTURE cnt10 OF counter10 ISBEGINPROCESS(cp, reset) --进程的敏感信号是cp和reset,进程描述摸5计数过程V ARIABLE cnt: INTEGER RANGE 10 DOWNTO 0; --定义变量cnt 为整数,范围10到0BEGINIF reset='1' thencnt:=0;ELSIF (cp'EVENT AND cp='1') THEN --如果CP信号发生变化且变化后结果是CP=’1’IF e10='1' and cnt<10 THENcnt:=cnt+1;ELSEcnt:=0;END IF;END IF;IF cnt=10 thentm10<='1';ELSEtm10<='0';END IF;END process;END cnt10;(3)、模15定时计数器实现代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY counter15 isPORT (cp, e15, reset: IN STD_LOGIC; --定义输入信号tm15: OUT STD_LOGIC); --定义输出信号END counter15;ARCHITECTURE cnt15 of counter15 isBEGINPROCESS(cp, reset) --进程的敏感信号是cp和reset,进程描述摸15计数过程V ARIABLE cnt: INTEGER RANGE 15 DOWNTO 0; --定义变量cnt为整数,范围15到0BEGINIF reset='1' THENcnt:=0;ELSIF (cp'EVENT AND cp='1') THEN --如果CP信号发生变化且变化后结果是CP=’1’IF e15='1' AND cnt<15 THENcnt:=cnt+1;ELSEcnt:=0;END IF;END IF;IF cnt=15 THENtm15<='1' ;ELSEtm15<='0';END IF;END PROCESS;END cnt15;(4)、控制器controller实现代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY controller ISPORT(cp,x,reset,tm10,tm5,tm15:IN STD_LOGIC; --定义输入信号br,by,bg,ar,ay,ag,e10,e5,e15:OUT STD_LOGIC); --定义输出信号end controller;ARCHITECTURE behave_control OF controller IS --结构体TYPE CONTROL_STATE IS (S0,S1,S2,S3) ; --定义枚举类型数据,4个状态SIGNAL state:CONTROL_STATE:=S0; --定义初始信号为S0BEGINPROCESS(CP,X,RESET) --进程的敏感信号是cp,x和reset,进程描述控制器运行BEGINIF RESET='1' THENstate<=S0;ELSIF (cp'EVENT AND cp='1') THEN --如果CP信号发生变化且变化后结果是CP=’1’CASE state ISWHEN S0=>IF (x AND tm15)='1' THENstate<=S1;END IF;WHEN S1=>IF tm5='1' THENstate<=S2;END IF;WHEN S2=>IF ((NOT x)OR tm10)='1' THENstate<=S3;END IF;WHEN S3=>IF tm5='1' THENstate<=S0;END IF;END CASE;END IF;END PROCESS;br<='1' when state=S2 or state=S3 else '0';by<='1' when state=S1 else '0';bg<='1' when state=S0 else '0';ar<='1' when state=S0 or state=S1 else '0';ay<='1' when state=S3 else '0';ag<='1' when state=S2 else '0';e10<='1' when state=S2 else '0';e5<='1' when state=S1 or state=S3 else '0';e15<='1' when state=S0 else '0';END behave_control;(5)、连接模块(对各接口进行例化)实现代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;LIBRARY LATTICE;ENTITY RYG ISPORT(cp, reset, x: IN STD_LOGIC;br, by, bg, ar, ay, ag: OUT STD_LOGIC);END RYG;ARCHITECTURE BE_RYG OF RYG ISCOMPONENT counter10 --元件说明:模10计数器PORT(cp, e10, reset: IN STD_LOGIC;tm10: OUT STD_LOGIC);END COMPONENT;COMPONENT counter5 --元件说明:模5计数器PORT (cp, e5, reset: IN STD_LOGIC;tm5: OUT STD_LOGIC);END COMPONENT;COMPONENT counter15 --元件说明:模15计数器PORT (cp, e15, reset: IN STD_LOGIC;tm15: OUT STD_LOGIC);END COMPONENT;COMPONENT controller --元件说明:控制器PORT(cp, x, reset, tm10, tm5, tm15: IN STD_LOGIC;br, by,bg, ar, ay, ag, e10, e5, e15: OUT STD_LOGIC);END COMPONENT;signal tag1, tag2, tag3, tag4, tag5, tag6: std_logic;BEGINU1: counter10 PORT MAP(cp=>cp, e10=>tag1, reset=>reset, tm10=>tag4); --模10元件例化U2: counter5 PORT MAP(cp=>cp, e5=>tag2, reset=>reset, tm5=>tag5); --模5元件例化U3: counter15 PORT MAP(cp=>cp, e15=>tag3,reset=> reset, tm15=>tag6); --模15元件例化U4: controller PORT MAP(cp=>cp, x=>x, reset=>reset, tm10=>tag4,tm5=>tag5, tm15=>tag6, br=>br, by=>by, bg=>bg, ar=>ar, ay=>ay, ag=>ag, e10=>tag1, e5=>tag2, e15=>tag3); --控制器元件例化END BE_RYG;6.调试仿真(1)、模5计数器调试仿真结果:(2)、模10计数器调试仿真结果:(3)、模15计数器调试仿真结果:(4)、控制器controller调试仿真结果:(5)、十字路口交通灯控制系统仿真波形:7.课程设计回顾总结及心得体会设计逻辑电路时,首先分析功能,确定输入和输出,划分功能模块。

相关主题