实验报告.docx
《实验报告.docx》由会员分享,可在线阅读,更多相关《实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
实验报告
JIANGSUTEACHERSUNIVERSITYOFTECHNOLOGY
VHDL课程设计
交通灯控制器
学院名称:
电信学院
专业:
自动控制
班级:
05自控
(1)
姓名:
曹亮
学号:
05312236
指导教师姓名:
朱雷
指导教师职称:
助教
2007年12月
前言
学习了将近了10个周的EDA课程,多少对VHDL语言的应用了解了一些,比较喜欢这门课程,因为它和单片机的汇编语言一样,也是一门描述性的语言,我们虽然学习的VHDL语言的语句不多,但是30%的基本VHDL语句就可以完成95%以上的电路设计,所以我们要用心多钻研常用语句,理解这些语句的硬件含义。
VHDL语言比和传统的原理图输入法的关系就好比高级语言和汇编语言的关系。
VHDL语言的可移植性好,使用方便,但效率不如原理图;原理图输入的可控性好,效率高,比较直观,但设计大规模的CPLD/FPGA时显得很烦琐,移植性差。
现在,对EDA的概念或范畴用的很宽。
包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA应用。
目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。
例如在飞机制造过程中,从设计、性能测试及特性分析知道飞行模拟,都可设计到EDA技术。
我在此设计了一个简单的交通灯控制器,结构比较简单,没有太多的变化。
仅仅是一个简单的数字小系统。
我还想做更进一步的较复杂的系统,因为自己喜欢这门课。
所以我会花更多的时间在这门课上。
目录
第一章任务要求
1.1简要说明............................................3
1.2任务和要求...........................................3
1.3实验目的.............................................3
第二章总体框图分析及电路图
2.1总体框图............................................4
2.2分析说明............................................4
2.3电路图..............................................5
第三章单元电路设计及分析
3.1分频器的设计及分析..................................6
3.2计数器的设计及分析..................................7
3.3控制器的设计及分析..................................8
3.4分位电路的设计及分析...............................11
3.5七段显示译码器的设计及分析.........................12
第四章总体分析及波形显示
4.1总体分析...........................................14
4.2波形显示及说明.....................................17
第五章学习心得及参考文献
5.1学习心得...........................................18
5.2参考文献...........................................18
第一章任务要求
1.1简要说明
交通灯用一指挥车辆和行人有序地通行.其中,当红灯亮时,表示该条道路禁止通行;黄灯亮时,表示停车;绿灯亮时,表示可以通行.倒计时显示器用来显示允许通行或禁止通行的时间.交通灯控制器就是用来自动控制十字路口的交通灯和计时器,指挥各种车辆和行人安全通行.
1.2任务和要求
在十字路口的2个方向上各设置一组红、绿、黄灯,显示顺
序为其中一个方向是绿灯、黄灯、红灯,另一方向是红灯、绿灯、黄灯。
设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、红灯的时间分别为20s,5s和25s。
在各条路上任意一条出现特殊情况,如110、119、120灯紧急车通过时,需要优先放行,所以所有的灯必须全部置红灯。
倒计时停止且闪烁。
当特殊情况结束后,控制器恢复原来状态。
继续正常运行。
1.3实验目的
具备用VHDL语言设计数字小系统的能力,熟悉开发环境,掌握计数器、控制器、分频器等一些基本器件的VHDL语言描述。
第二章总体框图分析及电路图
2.1总体框图
计数值与交通灯的关系图
2.2分析说明
从总体框图里很明显可以看出计数器和控制器是核心器件。
由于我用的是Quartus2软件仿真,所以频率无法给的太小,如果给的太小会导致仿真时间很慢,几乎等不出来。
用此频率我们可以通过显示译码管从仿真波形中看出结果。
通过译码器可以让结果在显示译码管中清楚看到。
此交通灯控制器也可用状态机实现,但由于我是初学者,故选用了相对简便的方法。
2.3电路图
第三章单元电路设计及分析
3.1分频器的设计及分析
程序清单如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDIV10IS
PORT(CLK:
INSTD_LOGIC;
CLKOUT:
OUTSTD_LOGIC);
END;
ARCHITECTUREONEOFDIV10IS
SIGNALCOUNTER:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALCLK_TEMP:
STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IF(COUNTER="100")THEN
COUNTER<=(OTHERS=>'0');
CLK_TEMP<=NOTCLK_TEMP;
ELSECOUNTER<=COUNTER+1;
ENDIF;
ENDIF;
ENDPROCESS;
CLKOUT<=CLK_TEMP;
END;
波形为:
分析及说明:
上升沿触发的偶数分频器(10分频),5000KHz的频率送给显示译码器,500KHz的频率则送给计数器。
3.2计数器设计及分析
程序清单如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYCNT50IS
PORT(CLOCK,RESET,HOLD:
INSTD_LOGIC;
CNTNUM:
BUFFERINTEGERRANGE0TO49);
END;
ARCHITECTUREONEOFCNT50IS
BEGIN
PROCESS(RESET,CLOCK)
BEGIN
IFRESET='1'THEN
CNTNUM<=0;
ELSIFRISING_EDGE(CLOCK)THEN
IFHOLD='1'THEN
CNTNUM<=CNTNUM;
ELSE
IFCNTNUM=49THEN
CNTNUM<=0;
ELSECNTNUM<=CNTNUM+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
END;
波形图为:
分析及说明:
计数器的主要作用是查看红灯、绿灯、黄灯的持续时间,可通过显示管看出结果。
其中“HOLD”的作用是使计数器停止计数,“RESET”的作用是置数。
上升沿有效的计数器。
3.3控制器的设计及说明
程序清单如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYCONTROLLERIS
PORT(CLOCK,HOLD:
INSTD_LOGIC;
CNTNUM:
ININTEGERRANGE0TO49;
NUMA,NUMB:
OUTINTEGERRANGE0TO25;
REDA,GREENA,YELLOWA,REDB,GREENB,YELLOWB:
OUTSTD_LOGIC;
FLASH:
OUTSTD_LOGIC);
END;
ARCHITECTUREONEOFCONTROLLERIS
BEGIN
PROCESS(CLOCK)
BEGIN
IFFALLING_EDGE(CLOCK)THEN
IFHOLD='1'THEN
REDA<='1';
REDB<='1';
GREENA<='0';
GREENB<='0';
YELLOWA<='0';
YELLOWB<='0';
FLASH<='1';
ELSE
FLASH<='0';
IFCNTNUM<=19THEN
NUMA<=20-CNTNUM;
REDA<='0';
GREENA<='1';
YELLOWA<='0';
ELSIF(CNTNUM<=24)THEN
NUMA<=25-CNTNUM;
REDA<='0';
GREENA<='0';
YELLOWA<='1';
ELSE
NUMA<=50-CNTNUM;
REDA<='1';
GREENA<='0';
YELLOWA<='0';
ENDIF;
IFCNTNUM<=24THEN
NUMB<=25-CNTNUM;
REDB<='1';
GREENB<='0';
YELLOWB<='0';
ELSIFCNTNUM<=44THEN
NUMB<=45-CNTNUM;
REDB<='0';
GREENB<='1';
YELLOWB<='0';
ELSE
NUMB<=50-CNTNUM;
REDB<='0';
GREENB<='0';
YELLOWB<='1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
END;
波形图为:
分析说明:
控制器的主要作用是驱动发光二极管的亮与灭,还有就是绿灯、红灯、黄灯亮的时间及数码管的显示。
其中的“HOLD”为‘1’时。
计数器停止计数,红灯全亮。
由于使用IF语句较容易实现。
3.4分位电路的设计及说明
程序清单如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFENWEIIS
PORT
(NUMIN:
ININTEGERRANGE0TO25;
NUMA,NUMB:
OUTINTEGERRANGE0TO9);
END;
ARCHITECTUREONEOFFENWEIIS
BEGIN
PROCESS(NUMIN)
BEGIN
IFNUMIN>=20THEN
NUMA<=2;
NUMB<=NUMIN-20;
ELSIFNUMIN>=10THEN
NUMA<=1;
NUMB<=NUMIN-10;
ELSE
NUMA<=0;
NUMB<=NUMIN;
ENDIF;
ENDPROCESS;
END;
波形图为:
分析及说明:
分位电路的作用是将一个10进制的数分开为2位到2个显示译码管上。
3.5七段显示译码器的设计及分析
程序清单如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDISPLAYIS
PORT
(CLOCK,FLASH:
INSTD_LOGIC;
QIN:
ININTEGERRANGE0TO15;
DISPLAY:
OUTINTEGERRANGE0TO127);
END;
ARCHITECTUREONEOFDISPLAYIS
SIGNALTIMEOUT:
INTEGERRANGE0TO63;
BEGIN
PROCESS(CLOCK)
BEGIN
IFRISING_EDGE(CLOCK)THEN
IF(FLASH='0')THEN
TIMEOUT<=0;
ELSE
IF(TIMEOUT=63)THEN
TIMEOUT<=0;
ELSE
TIMEOUT<=TIMEOUT+1;
ENDIF;
ENDIF;
IF(TIMEOUT<31)THEN
CASEQINIS
WHEN0=>DISPLAY<=126;
WHEN1=>DISPLAY<=48;
WHEN2=>DISPLAY<=109;
WHEN3=>DISPLAY<=121;
WHEN4=>DISPLAY<=51;
WHEN5=>DISPLAY<=91;
WHEN6=>DISPLAY<=31;
WHEN7=>DISPLAY<=112;
WHEN8=>DISPLAY<=127;
WHEN9=>DISPLAY<=115;
WHENOTHERS=>DISPLAY<=0;
ENDCASE;
ELSE
DISPLAY<=0;
ENDIF;
ENDIF;
ENDPROCESS;
END;
波形图如下:
分析及说明:
显示译码管的作用就是看红、绿、黄灯的时间是否满足设计要求。
用4个显示译码管分别显示东西和南北的时间。
在此先验证一个译码管的功能是否正确。
第四章总体程序分析及波形演示
4.1总体分析
程序清单如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYOKIS
PORT(Clk,Reset,Hold:
instd_logic;
RedA,GreenA,YellowA,RedB,GreenB,YellowB:
outstd_logic;
DisplayA,DisplayB,DisplayC,DisplayD:
outINTEGERRANGE0TO127;
Q3,Q2,Q1,Q0:
OUTINTEGERRANGE0TO24);
end;
architectureoneofOKis
componentDIV10is
port(CLK:
instd_logic;
CLKOUT:
outstd_logic);
endcomponentDIV10;
componentCNT50IS
PORT(CLOCK,RESET,HOLD:
INSTD_LOGIC;
CNTNUM:
BUFFERINTEGERRANGE0TO49);
ENDCOMPONENT;
COMPONENTCONTROLLERIS
PORT(CLOCK,HOLD:
INSTD_LOGIC;
CNTNUM:
ININTEGERRANGE0TO49;
NUMA,NUMB:
OUTINTEGERRANGE0TO25;
REDA,GREENA,YELLOWA,REDB,GREENB,YELLOWB:
OUTSTD_LOGIC;
FLASH:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTFENWEIIS
PORT
(NUMIN:
ININTEGERRANGE0TO25;
NUMA,NUMB:
OUTINTEGERRANGE0TO9);
ENDCOMPONENT;
COMPONENTDISPLAYIS
PORT
(CLOCK,FLASH:
INSTD_LOGIC;
QIN:
ININTEGERRANGE0TO15;
DISPLAY:
OUTINTEGERRANGE0TO127);
ENDCOMPONENT;
SIGNALC:
STD_LOGIC;
SIGNALF:
STD_LOGIC;
SIGNALP:
INTEGERRANGE0TO49;
SIGNALNumA,NumB:
INTEGERRANGE0TO25;
SIGNALQA,QB,QC,QD:
INTEGERRANGE0TO15;
begin
u8:
div10portmap(CLK=>Clk,CLKOUT=>C);
u0:
CNT50portmap(CLOCK=>C,HOLD=>Hold,RESET=>Reset,CNTNUM=>P);
u1:
CONTROLLERportmap(CLOCK=>C,HOLD=>Hold,CNTNUM=>P,REDA=>RedA,GREENA=>GreenA,YELLOWA=>YellowA,REDB=>RedB,GREENB=>GreenB,YELLOWB=>YellowB,NUMA=>NumA,NUMB=>NumB,FLASH=>F);
u2:
FENWEIPORTMAP(NUMIN=>NumA,NUMA=>QA,NUMB=>QB);
u3:
DISPLAYPORTMAP(CLOCK=>Clk,FLASH=>F,QIN=>QA,DISPLAY=>DisplayA);
u4:
DISPLAYPORTMAP(CLOCK=>Clk,FLASH=>F,QIN=>QB,DISPLAY=>DisplayB);
u5:
FENWEIPORTMAP(NUMIN=>NumB,NUMA=>QC,NUMB=>QD);
u6:
DISPLAYPORTMAP(CLOCK=>Clk,FLASH=>F,QIN=>QC,DISPLAY=>DisplayC);
u7:
DISPLAYPORTMAP(CLOCK=>Clk,FLASH=>F,QIN=>QD,DISPLAY=>DisplayD);
U9:
FENWEIPORTMAP(NUMIN=>NumA,NUMA=>Q0,NUMB=>Q1);
U10:
FENWEIPORTMAP(NUMIN=>NumA,NUMA=>Q2,NUMB=>Q3);
END;
4.2波形显示及说明:
波形图为:
分析说明:
这个程序的作用是将各个模块连接起来,达到实现交通灯的功能,由于有2个路口,所以用到了2个分位电路和4个显示译码管。
由于看仿真波形中的显示译码管的输出值不好看,所以我从分位电路中又拉出4条线,用十进制显示,这样从仿真波形中可以很容易看出结果是否正确。
其中“HOLD”是发生突发情况,红灯全亮,“RESET”是计数器置数,由人为手动给计数器一个数。
我所有的程序中输出量我都用的都是十进制定义的。
这样可以在程序中很多语句可以很容易实现,语句可以容易读的很多。
第五章学习心得及参考文献
5.1学习心得
在做这个课题前,我还尝试过其他数字小系统,但由于其中有很多语句和定义方法没有学过,所以选择了比较简单的交通灯控制器,
但在做这个作业中,也出现了很多错误,有很多错误自己检查出,但也有很多错误经过老师的知道才查出来。
从中我也学习了很多知识,
我在得到老师的许可下,用实验箱进行了验证结果,结果正确。
才开始学习VHDL语言时,前面有好多课没有听,但当学习程序编译时,我开始认真听了,因为我感觉自己突然喜欢上了这门课,我能自己做出一道题目时,心理会很开心,于是我到图书馆借了许多关于这方面的书,争取将一些最基本的器件能够独立的用VHDL语言编写。
我们现在学的还是VHDL语言的一些基础知识,我翻阅一些图书时,我发现有很多语句和定义方式我没有见过。
但老师说只需要掌握35%的VHDL语句就可以做90%以上的VHDL程序,所以现在我不段的学习我们学习过的一些基本语句。
EDA是一门数字电路器件的描述语言,用语言编写能够使得功能更加全面,可移植性很强。
我想在我们做毕业设计时还会用到这门课的知识,所以我还会继续深入学习。
遇到不会的地方还希望老师能给我解释。
我在这学期还有一个打算,就是在做一个数字小系统,让自己的知识更加全面。
5.2参考文献
书名:
〈〈VHDL入门解惑经典实例经验总结〉〉
作者:
黄任
出版社:
北京航空航天大学出版社