华北电力大学科技学院EDA课程设计汇编.docx

上传人:b****5 文档编号:24677534 上传时间:2023-05-31 格式:DOCX 页数:19 大小:178.41KB
下载 相关 举报
华北电力大学科技学院EDA课程设计汇编.docx_第1页
第1页 / 共19页
华北电力大学科技学院EDA课程设计汇编.docx_第2页
第2页 / 共19页
华北电力大学科技学院EDA课程设计汇编.docx_第3页
第3页 / 共19页
华北电力大学科技学院EDA课程设计汇编.docx_第4页
第4页 / 共19页
华北电力大学科技学院EDA课程设计汇编.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

华北电力大学科技学院EDA课程设计汇编.docx

《华北电力大学科技学院EDA课程设计汇编.docx》由会员分享,可在线阅读,更多相关《华北电力大学科技学院EDA课程设计汇编.docx(19页珍藏版)》请在冰豆网上搜索。

华北电力大学科技学院EDA课程设计汇编.docx

华北电力大学科技学院EDA课程设计汇编

 

科技学院

课程设计报告

(2015--2016年度第一学期)

 

名称:

EDA课程设计

题目:

交通灯控制系统设计

院系:

科技学院

班级:

13k2

学号:

31

学生姓名:

指导教师:

胡老师

设计周数:

2

成绩:

日期:

2015年12月10日

一、课程设计的目的与要求

1.1实验目的

掌握交通灯控制系统的基本原理,及用VHDL状态机实现该系统的方法。

1.2实验内容

设计一个由一条主干道和一条支干道的汇合点形成的十字交叉路口的交通灯控制系统,具体要求如下:

(1)主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。

(2)主、支道交替允许通行,主干道每次放行45s,支干道每次放行25s,在每次由亮绿灯变成亮红灯的转换过程中,要亮5s的黄灯作为过渡,并进行减计时显示。

1.3实验要求

1、用8段数码管分别显示两个干道的交通计时。

2、能够正常实现红、黄、绿灯的切换。

二、设计正文

1.1设计思路 

主、干支道交替允许通行,主干道每次放行45秒,支干道每次放行25秒,由黄转绿的过程中要亮5秒红灯。

分析可以得到,主干道绿灯亮45秒,黄灯亮5秒,红灯亮25秒。

而且对应于主干道这一过程,支干道依次亮45秒红灯,25秒绿灯,5秒黄灯。

 

1.2、分频器的设计 

试验箱上提供的最小信源信号频率是2赫兹,而红绿灯系统的设计是秒计时,需要1赫兹的信号,因此需要对试验箱提供的2赫兹信号进行二分频。

本设计中利用T触发器对信源信号二分频。

具体实现步骤为:

设置信号cp,每当信源信号clk的上升沿到来一次,cp取反翻转一次,从而实现二分频。

 

1.3、红绿灯转换的设计 

设置一个计时器,cp信号上升沿每到来一次,计时器加1。

 因为红绿黄灯完成一次转换的时间是75秒,所以设计计时器计时达到75秒时自动清零,重新计时。

设从计时器开始计时,主干道的状态为绿、黄、红,相应的支干道的状态为红、绿、黄。

从计时器开始计时为起点,设置时间轴,根据时间判断亮红灯还是绿灯、黄灯。

判断规则是:

对于主干道,当时间countnum小于45秒,绿灯亮;当时间大于等于45秒小于50秒,黄灯亮;当时间大于等于50秒,红灯亮。

其中,时间等于45秒和50秒处是绿黄灯、黄红灯转换点。

同理,对于支干道,当时间countnum小于45秒时,红灯亮;当时间大于等于45秒小于70秒时,绿灯亮;当时间大于等于70秒时,黄灯亮。

其中,时间等于5秒和70秒处是红绿灯,绿黄等转换点。

主干道和支干道用同一个计时器计时,用两个进程分别判断。

 

1.4、交通计时的设计 

数码管是减计时显示灯亮剩余时间。

设置信号numA,numB分别计算主干道和支干道上灯亮剩余时间。

因为绿灯亮45秒,黄灯亮5秒,红灯亮25秒,所以在时间轴上,当主干道绿灯亮时,numA等于45减countnum,黄灯亮时,numA等于50减countnum,红灯亮时numA等于75减countnum。

当支干道上红灯亮时,numB等于45减countnum,绿灯亮时,numB等于70减countnum,黄灯亮时,numB等于75减countnum。

从而实现倒计时的功能。

 5、数码管的设计 

每条道路上有两个数码管,分别显示倒计时时间的十位和个位。

利用10整除倒计时时间得到十位上数字,对时间求余得到个位上数字。

结合数码管的管脚信息,利用状态机将十进制数字和驱动数码管显示的七位二进制码一一对应起来。

三、课程设计总结

1.1在这次课程设计中我学到很多理论之外的东西,EDA这门课程的实用性很强。

这次课程设计就是一个列子,平时看到红绿灯没觉得制作是需要很多的知识,这次做了交通灯的设计之后发现需要大量的EDA书本上的知识。

这次的课程设计就相当于把平时的一些小实验和知识点全部综合起来得到的结果,经历过这次的课程设计之后我明白了,如果平时不认真学号一些基础知识,到最后是根本做不出来的。

同时我也在网上查找了很多资料,从之前的不会到慢慢的学会看代码,改代码和写代码。

1.2设计的时候需要先理解红绿黄这三个灯的跳转,还有数码管的显示,和计算器的倒计时。

在进行实验仿真的时候,我第一次做的是直接显示十进制的数字,但是在最后匹配管脚的时候匹配不了,所以我自己重新改了代码,改成二进制输出,此时仿真实验图显示的是十进制转换成二进制的数,我坚信是对的,所以我最后在实验箱里出现了正确的现象。

我觉得自己应该相信自己。

五、参考文献

[1]胡正伟,谢志远,范寒柏编著.电子设计自动化.中国电力出版社

[2]邹彦编著.EDA技术与数字系统设计.2007年.北京:

电子工业出版社.

[3]潘松,黄继业编著.EDA技术与VHDL(第二版).2007年.北京:

清华大学出版社.

[4]王锁萍编著.电子设计自动化教程.2000年.成都:

电子科技大学出版社.

附录

1.红绿灯显示示意图

主干道

绿灯45秒

黄灯5秒

红灯25秒

支干道

红灯45秒

绿灯25秒

黄灯5秒

2.交通灯控制系统框图

3.程序

libraryieee;

useieee.std_logic_1164.all;

entitypbd_16is

port(clk:

instd_logic;

redA,greenA,yellowA:

outstd_logic;

redB,greenB,yellowB:

outstd_logic;

seg1,seg2,seg3,seg4:

outstd_logic_vector(6downto0));

endentitypbd_16;

architecturertlofpbd_16is

signalcp:

std_logic;

signalcountnum:

integerrange0to75:

=0;

signalnumA,numB:

integerrange0to45;

signalnumA1,numB1:

integerrange0to4;

signalnumA2,numB2:

integerrange0to9;

begin

process(clk)

begin

ifclk'eventandclk='1'thencp<=notcp;

endif;

endprocess;

process(cp)

begin

ifcp'eventandcp='1'then

ifcountnum=75then

countnum<=0;

else

countnum<=countnum+1;

endif;

endif;

endprocess;

process(cp)

begin

ifcountnum<45then

redA<='0';

greenA<='1';

yellowA<='0';

numA<=45-countnum;

elsifcountnum<50then

redA<='0';

greenA<='0';

yellowA<='1';

numA<=50-countnum;

else

redA<='1';

greenA<='0';

yellowA<='0';

numA<=75-countnum;

endif;

endprocess;

process(cp)

begin

ifcountnum<45then

redB<='1';

greenB<='0';

yellowB<='0';

numB<=45-countnum;

elsifcountnum<70then

redB<='0';

greenB<='1';

yellowB<='0';

numB<=70-countnum;

else

redB<='0';

greenB<='0';

yellowB<='1';

numB<=75-countnum;

endif;

endprocess;

process(cp)

begin

numB1<=numB/10;

numB2<=numBrem10;

numA1<=numA/10;

numA2<=numArem10;

endprocess;

process(numA1)

begin

casenumA1is

when0=>seg1<="1111110";

when1=>seg1<="0110000";

when2=>seg1<="1101101";

when3=>seg1<="1111001";

when4=>seg1<="0110011";

endcase;

endprocess;

process(numA2)

begin

casenumA2is

when0=>seg2<="1111110";

when1=>seg2<="0110000";

when2=>seg2<="1101101";

when3=>seg2<="1111001";

when4=>seg2<="0110011";

when5=>seg2<="1011011";

when6=>seg2<="0011111";

when7=>seg2<="1110000";

when8=>seg2<="1111111";

when9=>seg2<="1111011";

endcase;

endprocess;

process(numB1)

begin

casenumB1is

when0=>seg3<="1111110";

when1=>seg3<="0110000";

when2=>seg3<="1101101";

when3=>seg3<="1111001";

when4=>seg3<="0110011";

endcase;

endprocess;

process(numB2)

begin

casenumB2is

when0=>seg4<="1111110";

when1=>seg4<="0110000";

when2=>seg4<="1101101";

when3=>seg4<="1111001";

when4=>seg4<="0110011";

when5=>seg4<="1011011";

when6=>seg4<="0011111";

when7=>seg4<="1110000";

when8=>seg4<="1111111";

when9=>seg4<="1111011";

endcase;

endprocess;

endarchitecturertl;

题目二:

数字频率计设计

一、实验目的

学习并掌握数字频率计原理、设计、分析和测试方法。

二、实验内容

用高频率信号检测低频率的信号,通过对高频率脉冲个数的计数得到低频率信号的频率。

(高频率信号的频率为已知,低频率信号为所测量值)。

或用低频率信号检测高频率信号(低频率信号的频率为已知,高频率信号为所测值)。

三、实验要求

1.用7段数码管显示频率值。

2.频率值用十进制表示。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityldz_11is

port(clk1,rst,setsec,setmin,sethour:

instd_logic;

sec1,sec0,min1,min0,hr1,hr0:

bufferstd_logic_vector(3downto0);

speaker:

outstd_logic;

a1,a2,a3,a4,a5,a6:

outstd_logic;

b1,b2,b3,b4,b5,b6:

outstd_logic;

c1,c2,c3,c4,c5,c6:

outstd_logic;

h1,h2,h3,h4,h5,h6:

outstd_logic;

e1,e2,e3,e4,e5,e6:

outstd_logic;

f1,f2,f3,f4,f5,f6:

outstd_logic;

g1,g2,g3,g4,g5,g6:

outstd_logic;

dot:

outstd_logic);

endentityldz_11;

architectureoneofldz_11is

componentledis

port(data:

instd_logic_vector(3downto0);

a,b,c,d,e,f,g:

outstd_logic);

endcomponentled;

signaltmp,clk:

std_logic;

begin

p0:

process(clk)--分频注释见①

variablecount:

std_logic_vector(1downto0);

begin

if(clk1'eventandclk1='1')then

if(count="10")then

count:

=(others=>'0');

tmp<=nottmp;else

count:

=count+1;

endif;

endif;

endprocessp0;clk<=tmp;

p1:

process(clk,rst,setsec,setmin,sethour)--校时注释见②

variables1,s0,m1,m0,h1,h0:

std_logic_vector(3downto0);

begin

ifclk'eventandclk='1'then

ifrst='1'then

ifsetsec='1'then

s0:

=s0+1;

ifs0="1010"thens0:

="0000";

s1:

=s1+1;

ifs1="0110"then

s1:

="0000";

endif;

endif;

endif;

ifsetmin='1'

thenm0:

=m0+1;

ifm0="1010"

thenm0:

="0000";

m1:

=m1+1;

ifm1="0110"

thenm1:

="0000";

endif;

endif;

endif;

ifsethour='1'then

h0:

=h0+1;

ifh0="1010"then

h0:

="0000";

h1:

=h1+1;

ifh0="0100"andh1="0010"thenh0:

="0000";h1:

="0000";

endif;

endif;

endif;

elses0:

=s0+1;--秒,分、时的计时注释见③

ifs0="1010"thens0:

="0000";

s1:

=s1+1;

ifs1="0110"thens1:

="0000";

m0:

=m0+1;

ifm0="1010"thenm0:

="0000";

m1:

=m1+1;

ifm1="0110"

thenm1:

="0000";

h0:

=h0+1;

ifh0="1010"thenh0:

="0000";

h1:

=h1+1;

ifh0="0100"andh1="0010"

thenh1:

="0000";

h0:

="0000";

endif;

endif;

endif;

endif;

endif;

endif;

endif;

sec0<=s0;

sec1<=s1;

min0<=m0;

min1<=m1;

hr0<=h0;

hr1<=h1;

endif;

ifclk1'eventandclk1='1'then--报时注释见④

ifm1="0101"andm0="1001"ands1="0101"then

ifs0="0101"ors0="0110"ors0="0111"ors0="1000"ors0="1001"thenspeaker<='1';

elsespeaker<='0';

endif;

endif;

endif;

endprocess;

led1:

ledportmap(data=>sec0,

a=>a1,

b=>b1,

c=>c1,

d=>h1,

e=>e1,

f=>f1,

g=>g1);

led2:

ledportmap(data=>sec1,

a=>a2,

b=>b2,

c=>c2,

d=>h2,

e=>e2,

f=>f2,

g=>g2);

led3:

ledportmap(data=>min0,

a=>a3,

b=>b3,

c=>c3,

d=>h3,

e=>e3,

f=>f3,

g=>g3);

led4:

ledportmap(data=>min1,

a=>a4,

b=>b4,

c=>c4,

d=>h4,

e=>e4,

f=>f4,

g=>g4);

led5:

ledportmap(data=>hr0,

a=>a5,

b=>b5,

c=>c5,

d=>h5,

e=>e5,

f=>f5,

g=>g5);

led6:

ledportmap(data=>hr1,

a=>a6,

b=>b6,

c=>c6,

d=>h6,

e=>e6,

f=>f6,

g=>g6);

endarchitectureone;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1