1、2.2 实现方案2.2.1 从题目中计数值与交通灯的亮灭的关系如图(1)所示:图一2.2.2 交通灯控制器系统框图如图2 所示:3、硬件电路设计3.1 分频器的设计 分频器实现的是将高频时钟信号转换成低频的时钟信号,用于触发控制器和计数器。该分频器实现的是一千分频,将一千赫兹的时钟信号分频成一赫兹的时钟信号。生成的Symbol 文件如图3 和仿真波形如图4 所示。 图三图四3.2 控制器的设计 控制器的作用是根据计数器的计数值及t1 的输入数据控制发光二极管的亮、灭,以及输出正计时数值给七段数码管的分位译码电路。本控制器是利用时钟沿的下降沿读取前级计数器的计数值,然后作出反应;生成的实体模块如
2、图5 和仿真波形如图6所示。图五图六3.3 计数器的设计 计数器1 的计数范围为由t1 引脚输入。计到t1 后,下一个时钟沿恢复到0,开始下一轮计数。仿真波形如图当t1 取7 时,计数器计数到7 后清零。实体模块如图7 和仿真波形如图8。计数器2 和计数器3 的实体模块如图9 和图10 所示。图7图9图10图83.4 分位译码电路的设计-1 由于控制器输出的正计时数值可能是1 位或者2 位十进制数,因此在七段数码管的译码电路前要加上分位电路(即将其分成2 个1 位的十进制数,如40 分成4 和0,5分为0 和5)。与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。控制器中,
3、引入了寄存器。本电路中分位电路使用组合逻辑电路实现。生成的实体模块如图11 及仿真波形如图12。图11图123.5 分位译码电路的设计2分位译码电路2 和分位译码电路1 的功能是一样的,为了区别两个不同的引脚图( 8)图(11)图(12)NumC3.0和NumD3.0因此再设计一个电路,只是引脚名的名称不同,如图13。3.6 数码管驱动的设计绿灯和红灯驱动 要求数码管共阳极连接(共阳极的公共端为低电平时,LED 不亮),在设计中为每个数码管都添加了一个驱动电路,在使用时通过调用模块来实现。本模块设计为时序逻辑电路,采用下降沿触发。实体模块如图14 和仿真波形如图15。图14图153.7 数码管
4、驱动的设计黄灯驱动 由于黄灯固定时间是5 秒,因此变化范围是0 至5 秒,七段数码管只要能显示0-5 的数就行了,所以单独用一个数码管驱动。实体模块如图16和仿真波形如图17。图16图173.8 顶层连接及其仿真交通灯控制器的顶层文件连接图如图18 和仿真波形如图19。图18图19 对图18 和19 的解释:在图18 中,绿灯计数器直接接分位译码器1,红灯计数器直接接分位译码器2,每个译码器分别接两个驱动电路,然后接输出。左边5 个驱动器接的数码管显示的是甲车道各个灯亮的时间,右边5 个驱动器接的数码管显示的是乙车道各个灯亮的时间。在19 图中可以看出甲、乙车道绿灯亮的时间加上黄灯亮的时间等于
5、甲车道红灯灭的时间。同时我们可以看出该系统满足我们所需的要求。4、程序设计4.1 分频器的设计library ieee;use ieee.std_logic_1164.all;entity fredevider is -分频器port(clkin:in std_logic;clkout:out std_logic);end;architecture devider of fredevider isconsta nt N:integer:=499;signa l counter:integer range 0 to N;图( 1signa l Clk:std_logic;beginprocess
6、(clkin)if rising_ed ge(clkin)thenif Counter=N thencounter=0;clk=not clk;else=counter+1;end if;end process;clkout=clk;4.2 控制器的设计 控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出正计时数值给七段译码管的分译码电路。entity control is -控制器port (clk :c1,c2,c3:out std_logic; -计数器工作时能信号,为1 时计数w1,w2,w3: -计数器指示信号,在计数过程中,相应的指示信号为0,计数结束时为1r1,r2
7、 : -分别为甲乙车道红灯y1,y2 : -分别为甲乙车道黄灯g1,g2 : -分别为甲乙车道绿灯reset :in std_logic); -复位信号,高电平有效end control ;architecture a of control istype state_space is (s3,s2,s1,s0) ; -四种状态signa l state : state_space ;process (clk)if reset=1 thenstateif w1=s1;end if ;when s1=if w2=s2;when s2=if w3=s3;when s3=end case;c1=whe
8、n state =s0 else 0;c2when state =s1 or state =s3 else c3when state =s2 else r1when state =s1 or state =s0 else y1when state =s3else g1r2when state =s2 or state =s3 else y2when state =s1 else g2end a ;4.3 计数器的设计4.3.1 绿灯计数器entity counter1 isenable :t1 :in integer range 0 to 40 ; -绿灯可设置亮的时间c1 :end coun
9、ter1 ;architecture a of counter1 isvariable cnt : integer range 0 to 40 ; -变量cnt 定义为常数,取值范围为0到40if (clk) then -时钟上升沿到来if enable=a nd cntt1 then -使能信号为1,并且cnt 小于t1 时cnt:=cnt+1; -加计数if cnt=t1 then -乙道开始通行,S0 状态4.3.2 红灯计数器entity counter2 isc2 :end counter2 ;architecture a of counter2 isconsta nt y:Inte
10、ger:=5; -黄灯固定时间为5 秒signa l t2 : integer range 0 to 45; -红灯亮的时间 integer range 0 to 45 ; -变量cnt 定义为常数,取值范围为0到45t2=t1+y;t2 then -使能信号为1,并且cnt 小于t2 时if cnt=t2 then -工作在S1 或S3 状态end a;4.3.3黄灯计数器entity counter3 isc3 :m3 :out integer range 0 to 5 );end counter3;architecture a of counter3 is integer range 0
11、 to 5 ; -变量cnt 定义为常数,取值范围为0到55 then -使能信号为1,并且cnt 小于5 时if cnt=5 then -工作在S2 状态m3=40 THEN -输入计时数据大于40NumA=4; -把十位数字送给ANumB=30 THEN=3;=Numin-30;=20 THEN=2;=Numin-20;=10 THEN=1;=Numin-10;ELSE=Numin;END IF;END PROCESS;4.5 分位译码电路的设计2ENTITY Fenwei2 ISNumC,NumD:OUT Integer RANGE 0 to 9 -红灯亮的时间,十位和个位ARCHITE
12、CTURE behavior OF Fenwei2 IS=40 THENNumCNumDsegout0110000when 2=1101101when 3=1111001when 4=0110011when 5=1011011when 6=0011111when 7=1110000when 8=1111111when 9=1110011when others =null;END CASE;4.6.2 黄灯驱动ENTITY HDqudong IS -黄灯驱动IN integer RANGE 0 TO 5; -黄灯变化范围ARCHITECTURE behavior OF HDqudong IS5硬
13、件测试 把顶层文件连接图进行编译仿真后就可以进行硬件测试了,我们所用的仿真实验箱是GW48 系列SOPC/EDA 实验开发系统(杭州康芯电子有限公司现代DSP 实验开发系统)。在实验箱中因为有1HZ 的频率并且自带译码器,所以在下载时用的顶层文件连接图就把分频器和译码器驱动电路给去掉了,如图(20),在实验过程中由于数码管不够,图中5 个数码管显示的是一个车道的绿、红、黄灯时间。图206、引脚锁定在下载之前,要进行引脚的锁定,我们用的是模式5,各个端口的引脚锁定如图21。图21 在确定引脚锁定正确后再编译一次,然后下载到实验箱中。首先对绿灯时间t1 进行置数,可在0 到40 任意置数,不妨设为
14、7 秒,然后系统开始工作,绿灯从0 开始正计时到7 再跳到黄灯从0 开始正计时到5 然后再跳到红灯从0 开始正计时到12。相应的另一车道的红、绿、黄灯会变化只是没有显示相应的时间。7、心得体会 EDA 课程设计,使我对EDA 的认识有提高了一个层次,现在能够熟练的使用QuartsII,能够用VHDL 语言编写简单的、实用的小程序,这次EDA 课程设计重点学习了交通灯部分程序的编写、调试、还有硬件下载、操作等过程。在整个课程设计的过程中,我查阅了大量的关于EDA 的资料,特别是在网上和图书馆我找到了大量的关于硬件编程的资料。另外,图(21)- 22 -在课程设计的过程中我认为调试程序是很重要的,
15、要有耐心。我在第一次编译时有三十几个错误,其中有输入错误、语法错误,如:工程名和实体名不一致,少了分号或者少了END IF 等错误。发现错误之后就要一遍一遍的仔细查错,直到没有错误,然后可以进行波型仿真了。8参考文献(1)潘松,黄继业.EDA 技术实用教程.科学出版社.2006.9(2)李辉.PLD 与数字系统设计.西安电子科技大学出版社.2005(3)蒋璇.臧蠢华.数字系统设计与PLD 应用(第二版).电子工业出 版社.2005(4)刘笃仁、杨万海编著.在系统可编程技术及其器件原理与应用. 西安:电子科技大学出版社.2001(5)张原编著.可编程逻辑器件设计及应用.北京:机械工业出版 社.2001
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1