EDA交通灯课程设计Word文档下载推荐.docx
《EDA交通灯课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《EDA交通灯课程设计Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
2.2实现方案
2.2.1从题目中计数值与交通灯的亮灭的关系如图
(1)所示:
图一
2.2.2交通灯控制器系统框图如图2所示:
3、硬件电路设计
3.1分频器的设计
分频器实现的是将高频时钟信号转换成低频的时钟信号,用于触发控制器和计数器。
该分频器实现的是一千分频,将一千赫兹的时钟信号分频成一赫兹的时钟信号。
生成的Symbol文件如图3和仿真波形如图4所示。
图三
图四
3.2控制器的设计
控制器的作用是根据计数器的计数值及t1的输入数据控制发光二极管的亮、灭,以及输出正计时数值给七段数码管的分位译码电路。
本控制器是利用时钟沿的下降沿读取前级计数器的计数值,然后作出反应;
生成的实体模块如图5和仿真波形如图6所示。
图五
图六
3.3计数器的设计
计数器1的计数范围为由t1引脚输入。
计到t1后,下一个时钟沿恢复到0,开始下一轮计数。
仿真波形如图当t1取7时,计数器计数到7后清零。
实体模块如图7和仿真波形如图8。
计数器2和计数器3的实体模块如图9和图10所示。
图7
图9
图10
图8
3.4分位译码电路的设计--1
由于控制器输出的正计时数值可能是1位或者2位十进制数,因此在七段数码管的译码电路前要加上分位电路(即将其分成2个1位的十进制数,如40分成4和0,5分为0和5)。
与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。
控制器中,引入了寄存器。
本电路中分位电路使用组合逻辑电路实现。
生成的实体模块如图11及仿真波形如图12。
图11
图12
3.5分位译码电路的设计—2
分位译码电路2和分位译码电路1的功能是一样的,为了区别两个不同的引脚
图(8)
图(11)
图(12)
NumC[3..0]和NumD[3..0]因此再设计一个电路,只是引脚名的名称不同,如图13。
3.6数码管驱动的设计——绿灯和红灯驱动
要求数码管共阳极连接(共阳极的公共端为低电平时,LED不亮),在设计中为每个数码管都添加了一个驱动电路,在使用时通过调用模块来实现。
本模块设计为时序逻辑电路,采用下降沿触发。
实体模块如图14和仿真波形如图15。
图14
图15
3.7数码管驱动的设计——黄灯驱动
由于黄灯固定时间是5秒,因此变化范围是0至5秒,七段数码管只要能显示0-5的数就行了,所以单独用一个数码管驱动。
实体模块如图16和仿真波形如图17。
图16
图17
3.8顶层连接及其仿真
交通灯控制器的顶层文件连接图如图18和仿真波形如图19。
图18
图19
对图18和19的解释:
在图18中,绿灯计数器直接接分位译码器1,红灯计数器直接接分位译码器2,每个译码器分别接两个驱动电路,然后接输出。
左边5个驱动器接的数码管显示的是甲车道各个灯亮的时间,右边5个驱动器接的数码管显示的是乙车道各个灯亮的时间。
在19图中可以看出甲、乙车道绿灯亮的时间加上黄灯亮的时间等于甲车道红灯灭的时间。
同时我们可以看出该系统满足我们所需的要求。
4、程序设计
4.1分频器的设计
libraryieee;
useieee.std_logic_1164.all;
entityfredevideris----------分频器
port
(clkin:
instd_logic;
clkout:
outstd_logic);
end;
architecturedevideroffredevideris
constantN:
integer:
=499;
signalcounter:
integerrange0toN;
图(1
signalClk:
std_logic;
begin
process(clkin)
ifrising_edge(clkin)then
ifCounter=Nthen
counter<
=0;
clk<
=notclk;
else
=counter+1;
endif;
endprocess;
clkout<
=clk;
4.2控制器的设计
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出正计时数值给七段译码管的分译码电路。
entitycontrolis-----------控制器
port(clk:
c1,c2,c3:
outstd_logic;
------计数器工作时能信号,为1时计数
w1,w2,w3:
------计数器指示信号,在计数过程中,相应的指示信号为0,计数结束时为1
r1,r2:
------分别为甲乙车道红灯
y1,y2:
-------分别为甲乙车道黄灯
g1,g2:
------分别为甲乙车道绿灯
reset:
instd_logic);
-------复位信号,高电平有效
endcontrol;
architectureaofcontrolis
typestate_spaceis(s3,s2,s1,s0);
-----四种状态
signalstate:
state_space;
process(clk)
ifreset='
1'
then
state<
=s0;
--------复位时状态为S0
elseif(clk'
eventandclk='
)then-------时钟上升沿到来
casestateis
whens0=>
ifw1='
=s1;
endif;
whens1=>
ifw2='
=s2;
whens2=>
ifw3='
=s3;
whens3=>
endcase;
c1<
='
whenstate=s0else'
0'
;
c2<
whenstate=s1orstate=s3else'
c3<
whenstate=s2else'
r1<
whenstate=s1orstate=s0else'
y1<
whenstate=s3else'
g1<
r2<
whenstate=s2orstate=s3else'
y2<
whenstate=s1else'
g2<
enda;
4.3计数器的设计
4.3.1绿灯计数器
entitycounter1is
enable:
t1:
inintegerrange0to40;
-------绿灯可设置亮的时间
c1:
endcounter1;
architectureaofcounter1is
variablecnt:
integerrange0to40;
-----变量cnt定义为常数,取值范围为0
到40
if(clk'
)then-----时钟上升沿到来
ifenable='
andcnt<
t1then-----使能信号为1,并且cnt小于t1时
cnt:
=cnt+1;
------加计数
ifcnt=t1then
---------乙道开始通行,S0状态
4.3.2红灯计数器
entitycounter2is
c2:
endcounter2;
architectureaofcounter2is
constanty:
Integer:
=5;
---------黄灯固定时间为5秒
signalt2:
integerrange0to45;
-------红灯亮的时间
integerrange0to45;
----------变量cnt定义为常数,取值范围为0
到45
t2<
=t1+y;
t2then-----使能信号为1,并且cnt小于t2时
ifcnt=t2then
-------工作在S1或S3状态
enda;
4.3.3黄灯计数器
entitycounter3is
c3:
m3:
outintegerrange0to5);
endcounter3;
architectureaofcounter3is
integerrange0to5;
-------变量cnt定义为常数,取值范围为0
到5
5then-----使能信号为1,并且cnt小于5时
ifcnt=5then
---------工作在S2状态
m3<
=cnt;
4.4分位译码电路设计--1
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFenwei1IS
PORT
(Numin:
INintegerRANGE0TO45;
NumA,NumB:
OUTIntegerRANGE0to9-------绿灯亮的时间,十位和个位数字
);
END;
ARCHITECTUREbehaviorOFFenwei1IS
BEGIN
process(Numin)
IFNumin>
=40THEN-------输入计时数据大于40
NumA<
=4;
-------把十位数字送给A
NumB<
=Numin-40;
-------把个位数字送给B
ELSIFNumin>
=30THEN
=3;
=Numin-30;
=20THEN
=2;
=Numin-20;
=10THEN
=1;
=Numin-10;
ELSE
=Numin;
ENDIF;
ENDPROCESS;
4.5分位译码电路的设计—2
ENTITYFenwei2IS
NumC,NumD:
OUTIntegerRANGE0to9-----红灯亮的时间,十位和个位
ARCHITECTUREbehaviorOFFenwei2IS
=40THEN
NumC<
NumD<
4.6数码管驱动的设计
4.6.1红绿灯驱动
ENTITYqudongIS
(clk:
inSTD_LOGIC;
data:
INintegerRANGE0TO9;
------输入数字
segout:
outSTD_LOGIC_VECTOR(6downto0));
-------七段显示器输出
ARCHITECTUREbehaviorOFqudongIS
process(Clk,data)
IFfalling_edge(Clk)andenable='
then------下降沿到来和使能信号为1时
casedatais
when0=>
segout<
="
1111110"
when1=>
0110000"
when2=>
1101101"
when3=>
1111001"
when4=>
0110011"
when5=>
1011011"
when6=>
0011111"
when7=>
1110000"
when8=>
1111111"
when9=>
1110011"
whenothers=>
null;
ENDCASE;
4.6.2黄灯驱动
ENTITYHDqudongIS---------黄灯驱动
INintegerRANGE0TO5;
------黄灯变化范围
ARCHITECTUREbehaviorOFHDqudongIS
5﹑硬件测试
把顶层文件连接图进行编译仿真后就可以进行硬件测试了,我们所用的仿真实验箱是GW48系列SOPC/EDA实验开发系统(杭州康芯电子有限公司现代DSP实验开发系统)。
在实验箱中因为有1HZ的频率并且自带译码器,所以在下载时用的顶层文件连接图就把分频器和译码器驱动电路给去掉了,如图(20),在实验过程中由于数码管不够,图中5个数码管显示的是一个车道的绿、红、黄灯时间。
图20
6、引脚锁定
在下载之前,要进行引脚的锁定,我们用的是模式5,各个端口的引脚锁定如图21。
图21
在确定引脚锁定正确后再编译一次,然后下载到实验箱中。
首先对绿灯时间t1进行置数,可在0到40任意置数,不妨设为7秒,然后系统开始工作,绿灯从0开始正计时到7再跳到黄灯从0开始正计时到5然后再跳到红灯从0开始正计时到12。
相应的另一车道的红、绿、黄灯会变化只是没有显示相应的时间。
7、心得体会
EDA课程设计,使我对EDA的认识有提高了一个层次,现在能够熟练的使用QuartsII,能够用VHDL语言编写简单的、实用的小程序,这次EDA课程设计重点学习了交通灯部分程序的编写、调试、还有硬件下载、操作等过程。
在整个课程设计的过程中,我查阅了大量的关于EDA的资料,特别是在网上和图书馆我找到了大量的关于硬件编程的资料。
另外,图(21)-22-在课程设计的过程中我认为调试程序是很重要的,要有耐心。
我在第一次编译时有三十几个错误,其中有输入错误、语法错误,如:
工程名和实体名不一致,少了分号或者少了ENDIF等错误。
发现错误之后就要一遍一遍的仔细查错,直到没有错误,然后可以进行波型仿真了。
8﹑参考文献
(1)潘松,黄继业.EDA技术实用教程.科学出版社.2006.9
(2)李辉.PLD与数字系统设计.西安电子科技大学出版社.2005
(3)蒋璇.臧蠢华.数字系统设计与PLD应用(第二版).电子工业出
版社.2005
(4)刘笃仁、杨万海编著.在系统可编程技术及其器件原理与应用.
西安:
电子科技大学出版社.2001
(5)张原编著.可编程逻辑器件设计及应用.北京:
机械工业出版
社.2001