VHDL交通灯信号控制器的设计.docx
《VHDL交通灯信号控制器的设计.docx》由会员分享,可在线阅读,更多相关《VHDL交通灯信号控制器的设计.docx(10页珍藏版)》请在冰豆网上搜索。
VHDL交通灯信号控制器的设计
交通灯信号控制器的设计
1.实验目的
(1)熟悉MAX+plusⅡ软件的基本使用方法。
(2)熟悉GW48—CKEDA实验开发系统的基本使用发放。
(3)学习VHDL基本逻辑电路和状态机电路的综合设计应用。
2.Forpersonaluseonlyinstudyandresearch;notforcommercialuse
3.
4.实验内容
设计并调试好一个十字交叉路口的交通灯控制器,具体要求如下:
(1)东西、南北方向有红、黄、绿指示灯,两个显示数码管。
(2)Forpersonaluseonlyinstudyandresearch;notforcommercialuse
(3)
(4)当南北方向允许通行亮绿灯时,东西方向亮红灯,而东西方向允许通行亮绿灯时,南北方向亮红灯。
(5)工作顺序为东西方向红灯亮45秒,前40秒南北方向绿灯亮,后5秒黄灯亮。
然后南北方向红灯亮45秒,前40秒东西方向绿灯亮,后5秒黄灯亮。
整个设计包括计时信号发生器、交通灯控制器以及译码显示电路的设计。
用GW48—CKEDA实验开发系统进行硬件验证。
Forpersonaluseonlyinstudyandresearch;notforcommercialuse
5.实验条件
(1)开发软件:
MAX+plusⅡ。
(2)Forpersonaluseonlyinstudyandresearch;notforcommercialuse
(3)
(4)实验设备:
GW48—CKEDA实验开发系统。
(5)拟用芯片:
EPF10K10-OLCC84。
6.实验设计
(1)Forpersonaluseonlyinstudyandresearch;notforcommercialuse
(2)
(3)系统的原理框图
(4)VHDL源程序
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.ALL;
ENTITYnclightIS
Port(clk:
instd_logic;
--xsh1:
outstd_logic_vector(5downto0);
--xsh2:
outstd_logic_vector(5downto0);
ra,rb,ya,yb,ga,gb:
outstd_logic);
ENDnclight;
Architectureaofnclightis
typestateis(S0,S1,S2,S3);
signalpresentstate,nextstate:
state;
--signaltmp40:
integerrange0to40:
=0;
--signaltmp5:
integerrange0to5:
=0;
signaltmp40:
std_logic_vector(5downto0):
="101000";
signaltmp5:
std_logic_vector(2downto0):
="101";
signaltimeout40,timeout5:
std_logic;
signalrst40,rst5:
std_logic:
='0';
signalen40,en5:
std_logic:
='0';
signalq:
std_logic_vector(1downto0);
signalsec:
std_logic;
Begin
----get1hzclockpulse
hz1:
process(clk)
begin
ifclk'eventandclk='1'thenq<=q+1;endif;
sec<=q
(1);--get1hzclockpulse
endprocess;
---
reg:
process(sec)
begin
ifsec'eventandsec='1'thenpresentstate<=nextstate;endif;
endprocessreg;
---------------------------
changestate:
process(presentstate)
Begin
casepresentstateis
whenS0=>ra<='0';ya<='0';ga<='1';
rb<='1';yb<='0';gb<='0';
whenS1=>ra<='0';ya<='1';ga<='0';
rb<='1';yb<='0';gb<='0';
whenS2=>ra<='1';ya<='0';ga<='0';
rb<='0';yb<='0';gb<='1';
whenS3=>ra<='1';ya<='0';ga<='0';
rb<='0';yb<='1';gb<='0';
whenothers=>ra<='1';ya<='0';ga<='0';rb<='1';yb<='0';gb<='0';
endcase;
endprocess;
--------------------------
timing:
process(presentstate,timeout40,timeout5)
begin
casepresentstateis
whenS0=>rst40<='0';en40<='1';rst5<='1';en5<='0';
iftimeout40='1'thennextstate<=s1;elsenextstate<=s0;endif;
whenS1=>rst5<='0';en5<='1';rst40<='1';en40<='0';iftimeout5='1'thennextstate<=s2;elsenextstate<=s1;endif;
whenS2=>rst40<='0';en40<='1';rst5<='1';en5<='0';iftimeout40='1'thennextstate<=s3;elsenextstate<=s2;endif;
whenS3=>rst5<='0';en5<='1';rst40<='1';en40<='0';iftimeout5='1'thennextstate<=s0;elsenextstate<=s3;
endif;
whenothers=>nextstate<=s0;rst40<='0';en40<='0';rst5<='0';en5<='0';
endcase;
endprocess;
-----------------------
cnt40:
process(sec,rst40,en40)
begin
ifrst40='1'thentmp40<="101000";
elsifsec'eventandsec='1'then
ifen40='1'then
iftmp40="000001"thentmp40<="101000";
elsetmp40<=tmp40-1;
endif;--
endif;
endif;
iftmp40="000001"thentimeout40<='1';elsetimeout40<='0';
endif;
endprocess;
------------------------
cnt5:
process(sec,rst5,en5)
begin
ifrst5='1'thentmp5<="101";
elsifsec'eventandsec='1'then
ifen5='1'then
iftmp5="001"thentmp5<="101";
elsetmp5<=tmp5-1;
endif;--
endif;
endif;
iftmp5="001"thentimeout5<='1';elsetimeout5<='0';
endif;--
endprocess;
---------------
enda;
(3)管脚锁定文件
设计实体
I/O标识
插座序号
芯片可用
资源序号
芯片管脚
序号
RA
PIO8
I/O8
17
YA
PIO9
I/O9
16
GA
PIO10
I/O10
19
RB
PIO11
I/O11
21
TB
PIO12
I/O12
22
GB
PIO13
I/O13
23
TMP40
(6TO4)
PIO22-20
I/O22-20
37,36,35
TMP40
(3TO0)
PIO19-16
I/O19-16
30,29,28,27
TMP5
(2TO0)
PIO46-44
I/O46-44
78,73,72
备注
验证设备:
GW48—CK;实验模式:
NO.5
实验芯片:
EPF10K10-OLCC84;
7.实验结果及总结
(1)系统仿真情况
从系统仿真结果(本仿真结果可通过同时按下“ALT+PrtSc”键抓取当前屏幕信息放入剪贴板中,再在WORD文档中通过粘贴的方法获得)可以看出,本系统完全符合设计要求。
(2)硬件测试情况
接好后,计时开始,RA亮时YB,GB先后亮,然后RB亮时,YA,GA先后亮;绿灯,黄灯亮的同时,数显器计数情况为40,39,38……40;5,4,3,2,1,5……。
从实验结论可以看出,本系统满足设计要求。
(3)实验体会总结
这次一整天的EDA课程设计,可以说是苦多于甜,但是不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。
在程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。
在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示:
在设定输入的时钟信号后,计时开始,但是始终看不到红黄绿灯的变化。
后来,在几次的调试之后,才发现是因为输入的时钟信号对于器件的延迟时间来说太短了。
经过屡次调试,终于找到了比较合适的输入数值:
Endtime的值需要设置的长一点:
1000us左右,这样就可以观察到完整的仿真结果。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。
最后,对给过我帮助的同学和老师再次表示忠心的感谢!
仅供个人用于学习、研究;不得用于商业用途。
Forpersonaluseonlyinstudyandresearch;notforcommercialuse.
NurfürdenpersönlichenfürStudien,Forschung,zukommerziellenZweckenverwendetwerden.
Pourl'étudeetlarechercheuniquementàdesfinspersonnelles;pasàdesfinscommerciales.
толькодлялюдей,которыеиспользуютсядляобучения,исследованийинедолжныиспользоватьсявкоммерческихцелях.
以下无正文