EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx

上传人:b****6 文档编号:8389842 上传时间:2023-05-11 格式:DOCX 页数:15 大小:149.29KB
下载 相关 举报
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第1页
第1页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第2页
第2页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第3页
第3页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第4页
第4页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第5页
第5页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第6页
第6页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第7页
第7页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第8页
第8页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第9页
第9页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第10页
第10页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第11页
第11页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第12页
第12页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第13页
第13页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第14页
第14页 / 共15页
EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx

《EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx》由会员分享,可在线阅读,更多相关《EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。

EDA基于VHDL语言的交通灯设计报告通过验证Word文件下载.docx

St3:

支干道亮绿灯25秒,数码管显示25秒倒计时;

主干道亮红灯,数码管显示从29秒倒计时到05秒。

St4:

支干道亮黄灯5秒,数码管显示5秒倒计时;

主干道亮红灯,数码管显示从04秒倒计时到00秒。

把交通灯的工作分成五个状态,则写程序的时候思路就比较清晰,只要在相应的状态里完成相应的工作,控制好黄绿红灯和数码管的倒计时显示,而且把握好五个状态转换的条件即可。

实现起来也方便。

二、设计分析

根据设计思路可以把整体设计分为三个模块:

1、分频模块:

把实验板上的50MHz的频率分成1Hz信号(用于倒计时计数的时钟信号)、1kHz信号(用于数码管扫描显示的片选时钟信号)和2hz(用于黄灯的闪烁);

2、交通灯控制以及倒计时(五个状态的控制)模块;

3、数码管译码扫描显示模块。

整体的系统框图如下:

段码输出

位码输出

1khz信号

50Mhz信号分频2hz信号数码显

1hz信号示模块

七段译码

数码管位选

交通灯控制以

及倒计时模块六个led灯输出

分频模块,就是把输入的50MHz时钟频率50000分频得到1KHz的频率用于数码管的位选信号,其原理就是设计一个0到50000循环计数的的计数器,当计数溢出,即计数到50000时使输出量取反,就得到了1KHz的方波,作为数码管位选信号。

同理,1Khz再经分频即可得到2hz(黄灯闪烁信号)和1hz(倒计时计数信号)。

交通灯控制及倒计时模块,就是五个状态的转换模块,是整个系统的最主要模块,其五个状态分别st0、st1、st2、st3、st4。

其中st0是当支干道没有车通行的状态,st1是主干道绿灯亮45秒的状态,st2是主干道黄灯闪烁5秒的状态,st3是支干道亮绿灯25秒的状态,st4是支干道黄灯闪烁5秒的状态。

当主干道亮绿灯和黄灯闪烁时,支干道都是亮红灯,当支干道亮绿灯和黄灯闪烁时,主干道都是亮红灯,并且主、支干道都会显示亮灯的倒计时时间,主、支干道的红黄绿灯用实验板上的的最左边三个和最右边三个LED发光二极管代替。

数码管倒计时显示,是用实验板上的其中四个数码管,分别表示主干道和支干道的秒倒计时,动态扫描的频率用的是1KHz的频率。

三、各模块电路符号如下:

1、顶层电路图如下:

图2-3顶层文件原理图

三、单元模块设计与仿真

3.1时钟分频模块

时钟分频模块就是把输入的2kHz时钟频率2000分频得到1Hz的频率用于数码管倒计时的时钟信号,其原理就是设计一个0到999循环计数的的计数器,当计数溢出,即计数到999时使输出量取反,则输出为0.5秒的高电平和0.5秒的低电平交替出现,就得到了1Hz的方波,作为秒倒计时的时钟信号。

时钟分频模块生成的元件符号如下:

2、分频模块

实验板上的50Mhz频率经分频后得到1Khz、2hz、1hz三路信号。

3、交通灯控制及计时模块

此模块是整个系统的核心部分,主要功能是完成五个状态的转换,并且在每个状态里完成相应的控制作用,即控制主干道和支干道的红黄绿灯的点亮和各自数码管倒计时显示。

编程时主要是用一个进程语句,其敏感信号是时钟分频模块产生的1Hz时钟信号,进程里主要用case语句完成五个状态的控制,在每个状态里要控制主干道和支干道的红黄绿灯的点亮,而且要控制各自数码管倒计时的显示,并为扫描显示译码模块提供倒计时时间,同时要使每个状态结束时能顺利进入下一个状态。

4、数码管显示译码和扫描模块

此模块中含有七段

数码管译码和扫描显示两个部分。

其中clk1khz是输入的扫描时钟信号

四、硬件验证结果

1、引脚配置如下:

2、硬件验证效果如下:

说明:

主干道和支干道分别继续亮绿灯和红灯,同时主干道的数码管从44开始一秒一秒地倒计时显示直至倒计时到00,而支干道的数码管从49开始一秒一秒地倒计时显示,并且主、支干道的数码管显示值始终相差5。

当主干道的倒计时到00(支干道倒计时到05)后的下一秒,主干道的绿灯灭,黄灯闪烁,而且主干道的数码管从04开始秒倒计时直至00,支干道的红灯在这一过程中始终是亮的,而且数码管正常倒计时,和主干道的数码管显示。

当主、支干道数码管倒计时到00后的下一秒,主干道的黄灯灭,红灯亮,数码管从29开始一秒一秒地倒计时,而支干道的红灯灭,绿灯亮,数码管开始从24一秒一秒地倒计时,始终和主干道的数码管少5,直至倒计时到00。

当支干道数码管倒计时到00(主干道为05)的下一秒后,支干道的绿灯灭,黄灯闪烁,数码管开始从04一秒一秒地倒计时直至00,而主干道在这一过程中继续亮红灯,数码管继续正常地倒计时,而和支干道数码管显示相同。

当主、支干道倒计时到00的下一秒,则进入到主干道亮绿灯,支干道亮红灯的状态。

五、心得体会

这次设计给我最大的收获就是做什么事都不要急,要一步一步的做好前提工作,我开始看到这个课题的时候就动手去写程序,只是凭着自己脑子里想一点就写一点,但是经过几次反复的修改还是没有成功,看不到效果,所以后来干脆就放下来先把每一步每一个模块都弄清楚再动手去写,可以再本子上把各个模块的端口以及连接都画好,再去写,这样能做到事半工倍的效果,而且在设计的时候不懂得地方可以参考别人写的程序,毕竟,不管做什么课程设计都是为了让自己弄懂、学好,只要将别人的程序设计转为自己的知识就ok了,在次基础上加上自己的一些想法,学会变通,或许还有些知识没学到,比如状态机这部分,但是通过别人的程序能让自己学到更多的知识,而且能巩固知识,所以我觉得要想把程序写好平常一定要多写多练多参考,这就是我这次设计的收获。

附:

各模块程序代码

1、分频模块

libraryieee;

--对开发板上的50MHZ信号进行分频得到1khz位选信号、--2hz黄灯闪烁信号和1hz计时信号

useieee.std_logic_1164.all;

entitydiv_freqis

port(freq_in:

instd_logic;

flag_1khz,flag_2hz,flag_1hz:

bufferstd_logic);

endentity;

architectureoneofdiv_freqis

signalcomplete_1khz:

integerrange0to50000;

signalcomplete_2hz:

integerrange0to499;

signalcomplete_1hz:

integerrange0to1000;

begin

process(freq_in)--此进程得到的是1khz的位选信号

if(freq_in'

eventandfreq_in='

1'

)then

complete_1khz<

=complete_1khz+1;

if(complete_1khz=50000)then

=0;

elsif(complete_1khz<

25000)then

flag_1khz<

='

0'

;

else

endif;

endprocess;

process(flag_1khz)--此进程是得到2hz信号

if(flag_1khz'

eventandflag_1khz='

complete_2hz<

=complete_2hz+1;

if(complete_2hz=500)then

flag_2hz<

process(flag_1khz)--此进程是得到1hz信号

complete_1hz<

=complete_1hz+1;

if(complete_1hz=1000)then

flag_1hz<

endarchitectureone;

2、交通灯控制及倒计时模块

--交通灯控制及计时模块

useieee.std_logic_unsigned.all;

entitystate5is

port(clk1hz,clk2hz:

--1hz倒计时时钟信号

one1,ten1,one2,ten2:

outintegerrange0to10;

--倒计时数

ra,ga,ya,rb,gb,yb:

outstd_logic);

--主支干道红黄绿灯

end;

architecturetwoofstate5is

typestatesis(st0,st1,st2,st3,st4);

--定义五个状态

signalr1,g1,y1,r2,g2,y2:

std_logic;

signala,y11,y22:

-------------------------------------------------

--------------------

---------------------

process(clk1hz)-------5states

variablest:

states;

variableeoc:

--倒计时结束标志位

variableh1,l1,h2,l2:

integerrange0to10;

begin--------------------------------------------------------------

ifclk1hz'

eventandclk1hz='

then

casestis

whenst0=>

st:

=st1;

h1:

=4;

l1:

h2:

l2:

=9;

whenst1=>

-----主干道绿灯亮45秒

ifeoc='

eoc:

g1<

r1<

y1<

g2<

r2<

y2<

else

ifh1=0andl1=1then

=st2;

eoc:

h1:

h2:

=5;

elsifl1=0then

l1:

=h1-1;

=l2-1;

elsifl2=0then

l2:

=h2-1;

=l1-1;

elsel1:

endif;

whenst2=>

-----主干道黄灯亮5秒

----------------------------------------------

g1<

-------------------------------

ifl1=1then

=st3;

whenst3=>

-----支干道绿灯亮25秒

=2;

ifh2=0andl2=1then

=st4;

elsel2:

whenst4=>

------支干道黄灯亮5秒

ifl2=1then

endcase;

ra<

=r1;

ga<

=g1;

ya<

=y11;

rb<

=r2;

gb<

=g2;

yb<

=y22;

one1<

=l1;

ten1<

=h1;

one2<

=l2;

ten2<

=h2;

process(clk2hz)

ifclk2hz'

eventandclk2hz='

a<

=nota;

if(y1='

)theny11<

=a;

elsey11<

if(y2='

)theny22<

elsey22<

3、数码管译码显示及位选模块

entitydisplayis

port(clk_1khz:

--扫描时钟信号

inintegerrange0to10;

scan:

outstd_logic_vector(3downto0);

--片选输出信号

seg_7:

outstd_logic_vector(7downto0));

--七段译码输出

endentitydisplay;

architecturethreeofdisplayis

signaldata:

signalseg77:

std_logic_vector(7downto0);

signalcnt:

std_logic_vector(1downto0);

process(data)-------七段译码

casedatais

when0=>

seg77<

="

00000011"

when1=>

10011111"

when2=>

00100101"

when3=>

00001101"

when4=>

10011001"

when5=>

01001001"

when6=>

01000001"

when7=>

00011111"

when8=>

00000001"

when9=>

00001001"

when10=>

11111111"

whenothers=>

null;

seg_7<

=seg77;

process(clk_1khz,one1,ten1,one2,ten2)----------数码管动态扫描计数

ifclk_1khz'

eventandclk_1khz='

then--00到11循环计数器

ifcnt="

11"

thencnt<

00"

elsecnt<

=cnt+1;

process(cnt,one1,ten1,one2,ten2)----数码管动态扫描显示

casecntis

when"

=>

data<

=one1;

scan<

0111"

01"

=ten1;

1011"

10"

=one2;

1101"

=ten2;

1110"

whenothers=>

endthree;

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

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2