《EDA红绿灯控制设计讲课教案.doc》由会员分享,可在线阅读,更多相关《EDA红绿灯控制设计讲课教案.doc(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Good is good, but better carries it.精益求精,善益求善。EDA红绿灯控制设计-目录前言:1一、设计任务:2二、题目分析与整体构思:2三、硬件电路设计:3四、程序设计:7五、心得体会:20六、设计创新:20七、参考文献:20前言伴随着社会的发展以及人类生活水平的提高,汽车的数量在D的DEA技术的发展和应用领域的扩大与深入,EDA技术在电子信息,通信,自动,控制及计算机应用等领域的重要性日益突出。随着技术市场与人才市场对DEA的不断的增加,交通的问题日益突出,单单依靠人力来指挥交通已经不可行了,所以,设计交通灯来完成这个需求就显的越加迫切了.为了确保十字路口的行
2、人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。以下就是运用数字电子设计出的交通灯:其中红灯亮,表示该条路禁止通行;黄灯亮表示停车;绿灯亮表示允许通行。一设计任务设计一个十字路口的交通灯控制系统,用实验平台上的LED发光二极管显示车辆通过的方向(东西和南北各一组),用数码管显示该方向的剩余时间。要求:工作顺序为东西方向红灯亮45秒,前40秒南北方向绿灯亮,后5秒黄灯亮。然后南北方向红灯亮45秒,前40秒东西方向绿灯亮,后5秒黄灯亮。依次重复。有紧急事件时允许将某方向一直开绿灯或者开红灯,另外允许特定情况两方向均为红灯,车辆禁行,比如十字路口恶性交通事故时,东西,南北两个方向均有
3、两位数码管适时显示该方向亮灯时间。二、题目分析与整体构思(1)该交通灯控制器应具备的功能设东西和南北方向的车流量大致相同,因此红、黄、绿灯的时长也相同,定为红灯45sec,黄灯5sec,绿灯40sec,同时用数码管指示当前状态(红、黄、绿)剩余时间。另外,设计一个紧急状态,当紧急状态出现时,两个方向都禁止通行,指示红灯。紧急状态解除后,重新计数并指示时间。(2)实现方案一从题目中计数值与交通灯的亮灭的关系如图(1)所示三硬件电路设计(1)分频器分频器实现的是将高频时钟信号转换成底频的时钟信号,用于触发控制器、计数器和扫描显示电路。该分频器实现的是一千分频,将一千赫兹的时钟信号分频成一赫兹的时钟
4、信号。(2)控制器设计控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。此外,当检测到特殊情况(HOLD=1)发生时,无条件点亮红灯的二极管。本控制器可以有两种设计方法,一种是利用时钟烟的下降沿读取前级计数器的计数值,然后作出反应;另一种则是将本模块设计成纯组合逻辑电路,不需要时钟驱动。这两种方法各有所长,必须根据所用器件的特性进行选择:比如有些FPGA有丰富的寄存器资源,而且可用与组合逻辑的资源则相对较少,那么使用第一种方法会比较节省资源;而有些CPLD的组合逻辑资源则比较多,用第二种方法可能更好。(3)计数器设计这里需要的计数器的计数范围
5、为0-90。计到90后,下一个时钟沿回复到0,开始下一轮计数。此外,当检测到特殊情况(HOLD=1)发生是,计数器暂停计数,而系统复位信号RESET则使计数器异步清零。(4)分位译码电路设计-1因为控制器输出的到计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如25分为2和5,7分为0和7)。与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。控制器中,引入了寄存器。为了让读者开拓眼界,分位电路就用组合逻辑电路实现。(5)分位译码电路设计2(6)数码管驱动设计串行连接,即每个数码管对应的引脚都接在一起(如每个数码管
6、的a引脚都接到一起,然后再接到CPLD/FPGA上的一个引脚上),通过控制公共端为高电平控制相应数码管的亮、灭(共阴极数码管的公共端为高电平时,LED不亮;共阳极的公共端为低电平时,LED不亮)。串行法的优点在于消耗的系统资源少,占用的I/O口少,N个数码管只需要(7+N)个引脚(如果需要小数点,则是(8+N)个引脚)。其缺点是控制起来不如并行法容易。(7)下图为交通灯控制器的顶层文件连接图四、程序设计(1)分频器的设计LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;ENTITYFreDeviderISPORT(Clkin:INStd_Logic;Clkout:O
7、UTStd_Logic);END;ARCHITECTUREDeviderOFFreDeviderISCONSTANTN:Integer:=499;signalcounter:Integerrange0toN;signalClk:Std_Logic;BEGINPROCESS(Clkin)beginIFrising_edge(Clkin)THENIFCounter=Nthencounter=0;Clk=notclk;elsecounter=counter+1;endif;endif;endprocess;clkout=clk;end;(2)控制设计控制器的作用是根据计数器的计数值控制发光二极管的亮
8、、灭,以及输出倒计时数值给七段译管的分译码电路。此外,当检测到特殊情况(Hold=1)发生时,无条件点亮红色的发光二极管。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcountrollerISPORT(Clock:INSTD_LOGIC;Hold:instd_logic;CountNum:inINTEGERRANGE0TO89;NumA,NumB:outINTEGERRANGE0TO45;RedA,GreenA,YellowA:outstd_logic;RedB,GreenB,YellowB:outstd_logic);END;ARCHITECTU
9、REbehaviorOFCountrollerISBEGINprocess(Clock)BEGINIFfalling_edge(Clock)THENIFHold=1THENRedA=1;RedB=1;GreenA=0;GreenA=0;YellowA=0;YellowB=0;ELSIFCountNum=39THENNumA=40-CountNum;RedA=0;GreenA=1;YellowA=0;ELSIFCountNum=44THENNumA=45-CountNum;RedA=0;GreenA=0;YellowA=1;ELSENumA=90-CountNum;RedA=1;GreenA=0
10、;YellowA=0;ENDIF;IFCountNum=44THENNumB=45-CountNum;RedB=1;GreenB=0;YellowB=0;ELSIFCountNum=84THENNumB=85-CountNum;RedB=0;GreenB=1;YellowB=0;ELSeNumB=90-CountNum;RedB=0;GreenB=0;YellowB=1;ENDIF;ENDIF;ENDPROCESS;END;(3)计数器的设计这里计数器的计数范围为045S。计到45后,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(Hold=1)发生时,计数器暂停计数,而系统复位
11、号Reset则使计数器异步清0。程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcounterISPORT(clock:INSTD_LOGIC;reset:instd_logic;Hold:instd_logic;countNum:BuFFeRINTEGERRANGE0TO90);END;ARCHITECTUREbehaviorOFcounterISBEGINprocess(reset,Clock)BEGINIFReset=1THENcountNum=0;ELSIFrising_edge(Clock)THENIFHold=1thencount
12、Num=countNum;ELSEIFcountNum=90THENcountNum=0;ELSEcountNum=40THENNumA=4;NumB=30THENNumA=3;NumB=20THENNumA=2;NumB=10THENNumA=1;NumB=Numin-10;ELSENumA=0;NumB=40THENNumC=4;NumD=30THENNumC=3;NumD=20THENNumC=2;NumD=10THENNumC=1;NumD=Numin-10;ELSENumC=0;NumDsegoutsegoutsegoutsegoutsegoutsegoutsegoutsegouts
13、egoutsegoutnull;ENDCASE;ENDPROCESS;END;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_unsigned.ALL;ENTITYdtsmISPORT(clk:inSTD_LOGIC;NumA,NumB,NumC,NumD:inSTD_LOGIC_VECTOR(3downto0);segout1:outSTD_LOGIC_VECTOR(6downto0);led_sel:outSTD_LOGIC_VECTOR(3downto0);ENDdtsm;architecturebhvofdtsmisco
14、mponentbcd_dataisport(bcd_data:inSTD_LOGIC_VECTOR(3downto0);segout:outSTD_LOGIC_VECTOR(6downto0);endcomponent;signalx:STD_LOGIC_VECTOR(3downto0);signalq:STD_LOGIC_VECTOR(1downto0);beginp1:process(clk)beginifclkeventandclk=1thenQled_sel=1110;xled_sel=1101;xled_sel=1011;xled_sel=0111;xnull;endcase;end
15、process;u1:bcd_dataPORTmap(bcd_data=x,segout=segout1);end五设计创新1模块化编程,模块化接线,再编译总原理图,思路比较清楚解容易。2可以比较容易的改变红绿灯的时间。3有的模块可以供其它任务通用。六心得体会EDA设计我感觉程序调试最重要,试验软件、硬件熟悉其次。我在编完各模块程序之后,编译查错最初有三十几个错误,有输入错误、语法错误。一遍一遍的变异查错,直到没有错误。必须注意工程名和实体名一致,不然一般会出错。在没有错误之后可以进行波型仿真。若与理想的不同,再查看程序,有无原理上的编辑错误或没有查出的输入错误。都通过可以进行管脚配对,把程序烧入芯片,在实物机上看结果,从显示中得出还需改正的地方,再去改程序。必须注意没改一次都要编译,重新烧入。七参考文献(1)潘松,黄继业.2006.EDA技术使用教程.北京:科学出版社。(2)黄任;2005;VHDL入门.解惑.经典实例.经验总结.北京:北京航空航天大学出版社。(3)徐志军,徐光辉.2002.CPLD/FPGA的开发与应用.北京:电子工业出版社。(4)褚振勇.FPGA设计与应用.西安:西安电子科技大学出版社。-
限制150内