EDA课程设计交通灯课程设计报告EDA.docx

上传人:b****1 文档编号:13316086 上传时间:2023-06-13 格式:DOCX 页数:31 大小:98.79KB
下载 相关 举报
EDA课程设计交通灯课程设计报告EDA.docx_第1页
第1页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第2页
第2页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第3页
第3页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第4页
第4页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第5页
第5页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第6页
第6页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第7页
第7页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第8页
第8页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第9页
第9页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第10页
第10页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第11页
第11页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第12页
第12页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第13页
第13页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第14页
第14页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第15页
第15页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第16页
第16页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第17页
第17页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第18页
第18页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第19页
第19页 / 共31页
EDA课程设计交通灯课程设计报告EDA.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

EDA课程设计交通灯课程设计报告EDA.docx

《EDA课程设计交通灯课程设计报告EDA.docx》由会员分享,可在线阅读,更多相关《EDA课程设计交通灯课程设计报告EDA.docx(31页珍藏版)》请在冰点文库上搜索。

EDA课程设计交通灯课程设计报告EDA.docx

EDA课程设计交通灯课程设计报告EDA

 

第一章设计任务和要求·········································

1.1设计任务与要求··················································

1.2设计分析························································

第二章电路工作原理及方案设计

第三章单元电路设计与仿真·································

3.1软件原理图······················································

3.2各模块的原理及其程序············································

3.2.1计数模块的设计及仿真图········································

3.2.2控制模块的设计及仿真图········································

3.2.3分位模块的设计及仿真图········································

3.2.4分频模块的设计及仿真图········································

3.2.5译码模块的设计及仿真图········································

第四章心得总结···········································

 

第一章设计任务与要求

1.1设计任务与要求

在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一个方向为绿灯、黄灯、红灯。

另一个方向为红灯、绿灯、黄灯。

设置一组数码管,以倒计时的方式显示可以通过的或者禁止通行的时间,其中绿灯、黄灯、红灯的持续时间分别为20S,5S,25S

当各条路上任意一条路上出现故障时,各方向都是红灯亮,倒计时停止,且显示数字在闪烁。

当特殊情况结束后,控制器恢复正常。

1.2设计分析

1,主控制模块:

(1)当没有故障出现时,灯的运行方法如下所示:

状态

A路(主干道)

B路(支干道)

绿

绿

S1

S2

S3

S4

其中,s1,s2,s3,s4分别是四种状态下的表现,程序我们用了状态机的方法,罗列了4种状态,利用case语句把4种状态分别表现出来;部分程序如下:

casestateis

whens1=>--“=>”等效于then

reda<='1';--a路红灯灭

yellowa<='1';--a路黄灯灭

greena<='0';--a路绿灯亮

redb<='0';--b路红灯亮

yellowb<='1';--b路黄等灭

greenb<='1';--b路黄等灭

numa<=count;

numb<=count+5;

可见,一路灯走完一个周期T=50s(红25+黄5+绿20).

 

第二章电路工作原理及方案设计

总体框图:

在VHDL设计描述中,采用自顶向下的设计思路,该思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:

输入信号:

复位开关信号reset;外部时钟信号clk。

LED七段显示数码管的输出信号count1(6downto0),count2(6downto0),count3(6downto0),count4(6downto0);在自顶向下的VHDL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。

根据实验设计的结构功能,来确定使用哪些模块以及这些模块之间的关系。

通过上面的分析,不难得知可以把交通灯控制系统划分为4个模块:

时钟分频模块,计数模块,控制模块,分位译码模块。

控制器电路:

根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。

当检测到手动控制信号(Con=’1’)时,执行手动控制;

计数器电路:

这里需要的计数器的计数范围为0~89。

计到89后,下一个时钟沿升为1时,开始下一轮计数,此外当系统复位信号(Reset=’1’)使计数器异步清‘0’。

手动信号(Con=’1’)使系统清‘0’。

分位译码电路:

因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如20分为2和0,7分为0和7)。

七段数码管的译码电路根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管,我们用的是共阳极数码管,因此译码电路输出逻辑数值‘0’点亮二极管,译码电路输出逻辑数值‘1’熄灭二极管。

第三章单元电路设计与仿真

3.1软件原理图

3.2各模块的原理及其程序

 

3.2.1计数模块的设计及仿真图

功能:

实现0到99的计数

clk0—脉冲输入

con—手动控制信号

reset—复位信号

countnum—计数输出

仿真波形如下:

模块程序:

libraryieee;

useieee.std_logic_1164.all;

entitycounteris

port

(clk0:

instd_logic;

con:

instd_logic;

reset:

instd_logic;

countnum:

bufferintegerrange0to99);

endcounter;

architectureoneofcounteris

begin

process(reset,clk0)

begin

ifreset='1'then

countnum<=0;

elsifrising_edge(clk0)then

ifcon='1'then

countnum<=0;

else

ifcountnum=99then

countnum<=0;

else

countnum<=countnum+1;

endif;

endif;

endif;

endprocess;

endone;

3.2.2控制模块的设计及仿真图

功能:

控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。

clk1—脉冲信号输入

con1—手动控制信号

con2—状态控制信号

countnum—计数输入

numa,numb—两个方向的倒计时数值输出

ra,ga,ya,ga1,rb,gb,yb,gb1—发光二极管输出

 

仿真波形如下:

模块程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycontrolleris

port

(clk1:

instd_logic;

con1:

instd_logic;

con2:

instd_logic;

countnum:

inintegerrange0to89;

numa,numb:

outintegerrange0to25;

ra,ga,ya,ga1:

outstd_logic;

rb,gb,yb,gb1:

outstd_logic);

endcontroller;

architectureoneofcontrolleris

signalm:

integerrange0to7;

begin

process(clk1,con1,con2,countnum)

variableaa:

std_logic_vector(7downto0);

begin

if(clk1'eventandclk1='1')then

ifcon1='0'then

ifcountnum>=65then

numb<=90-countnum;

numa<=90-countnum;

ifcountnum>=70then

aa:

="00011000";

elseaa:

="00101000";

numa<=70-countnum;

endif;

elsifcountnum>=45then

numb<=65-countnum;

numa<=65-countnum;

ifcountnum>=50then

aa:

="10000100";

elseaa:

="10000010";

numb<=50-countnum;

endif;

elsifcountnum>=20then

numa<=45-countnum;

numb<=45-countnum;

ifcountnum>=25then

aa:

="01001000";

elseaa:

="00101000";

numa<=25-countnum;

endif;

elsifcountnum>=0then

numa<=20-countnum;

numb<=20-countnum;

ifcountnum>=5then

aa:

="10000100";

elseaa:

="10000010";

numb<=5-countnum;

endif;

endif;

else

ifcon1='1'then

numa<=0;

numb<=0;

ifcon2='1'then

ifm=7then

m<=0;

else

m<=m+1;

endif;

endif;

ifm=0then

aa:

="01001000";

elsifm=1then

aa:

="00101000";

elsifm=2then

aa:

="10000100";

elsifm=3then

aa:

="10000010";

elsifm=4then

aa:

="00011000";

elsifm=5then

aa:

="00101000";

elsifm=6then

aa:

="10000001";

elsifm=7then

aa:

="10000010";

endif;

endif;

endif;

endif;

ra<=aa(7);

ga<=aa(6);

ya<=aa(5);

ga1<=aa(4);

rb<=aa(3);

gb<=aa

(2);

yb<=aa

(1);

gb1<=aa(0);

endprocess;

endone;

 

3.2.3分位模块的设计与仿真图

模块程序:

libraryieee;

useieee.std_logic_1164.all;

entityfenweiis

port(numin:

inintegerrange0to25;

numa,numb:

outintegerrange0to9);

endfenwei;

architectureoneoffenweiis

begin

process(numin)

variablenuma1,numb1:

integerrange0to9;

begin

ifnumin>=20then

numa1:

=2;

numb1:

=numin-20;

elsifnumin>=10then

numa1:

=1;

numb1:

=numin-10;

else

numa1:

=0;

numb1:

=numin;

endif;

numa<=numa1;

numb<=numb1;

endprocess;

endone;

功能:

把倒计时的数值分成2个1位的十进制数。

numin:

倒计时数值输入

numa,numb—将数值分为2个1位的十进制输出

仿真波形如下:

3.2.4分频模块的设计及仿真

 

模块程序

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityclk_10is

port(clk:

instd_logic;

clk_div10:

outstd_logic);

endclk_10;

architectureoneofclk_10is

signalclk_temp:

std_logic;

begin

process(clk)

variablecounter:

std_logic_vector(2downto0);

constantmd:

std_logic_vector(2downto0):

="101";

begin

if(clk'eventandclk='1')then

if(counter=md)then

counter:

=(others=>'0');

clk_temp<=notclk_temp;

endif;

counter:

=counter+1;

endif;

endprocess;

clk_div10<=clk_temp;

endone;

 

功能:

实现分频

接口:

clk—脉冲输入

Clk-div10—分频后脉冲输出

仿真结果如下:

3.2.5译码模块的设计及仿真图

 

 

功能:

根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管。

bb[3..0]--BCD码输入

clk2—脉冲输入

ya,yb,yc,yd,ye,yf,yg—七段数码管显示输出

仿真波形如下:

程序模块:

libraryieee;

useieee.std_logic_1164.all;

entityyimais

port(

clk2:

instd_logic;

bb:

instd_logic_vector(3downto0);

ya:

outstd_logic;

yb:

outstd_logic;

yc:

outstd_logic;

yd:

outstd_logic;

ye:

outstd_logic;

yf:

outstd_logic;

yg:

outstd_logic);

enddisplay;

architectureoneofyimais

signaltemp:

std_logic_vector(6downto0);

begin

process(bb)

begin

casebbis

when"0000"=>temp<="1000000";

when"0001"=>temp<="1111001";

when"0010"=>temp<="0100100";

when"0011"=>temp<="0110000";

when"0100"=>temp<="0011001";

when"0101"=>temp<="0010010";

when"0110"=>temp<="0000010";

when"0111"=>temp<="1011000";

when"1000"=>temp<="0000000";

when"1001"=>temp<="0010000";

whenothers=>temp<="1111111";

endcase;

endprocess;

ya<=temp(0);

yb<=temp

(1);

yc<=temp

(2);

yd<=temp(3);

ye<=temp(4);

yf<=temp(5);

yg<=temp(6);

endone;

 

第四章心得总结

通过实验设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容,本学期我们进行了VHDL实验设计,老师命题,六人一大组,分工合作进行设计(包括设计总体方案、软件原理、计数模块、控制模块、分位模块、分频模块、译码模块等工作)。

我们做的是交通灯控制器的设计。

确定题目后,我们首先进行了单元模块的设计,将每一个单元模块设计完成后再经行仿真,仿真成功后就可以进行顶层文件的编写了,在顶层文件的编写过程中遇到了一些问题,特别是各模块之间的连接,以及信号的定义,总是有错误。

有的时候信号的定义容易出现混淆,在反复的修改过后,顶层文件终于能够编译成功了。

在波形仿真的过程中,同样遇到了困难,有的时候,由于ENDTIME的时间修改的太大,会出现仿真时间过长的问题,这个时候应该要把ENDTIME的时间相应的改小,或是修改系统时钟的频率。

在设计的过程中还应该多联系下实际情况,要了解实际情况下交通信号灯的工作情况,才能更好的完成此次的课程设计。

在今后的工作和学习中,我们不能仅仅把目光停留在课本上,要多理论联系实际。

有的时候,理论上是正确的东西放到现实中去,可能由于种种因素的制约,并不能达到实际的效果,还需要我们进行相应的修改才能完成要求。

这次的课程设计使我巩固了以前学习到的知识,还使我掌握了以前没有掌握的知识,同时锻炼了自己的能力。

在这次实验设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教师兄,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。

更重要的是,我们学会了很多学习的方法。

而这是日后最实用的,真的是受益匪浅。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

通过几天的课程设计,我对数据库软件EDA技术、VHDL、等系列知识都有了一定的了解。

使用EDA技术开发页面的能力也有了很大提高。

同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。

做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。

最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。

总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。

另外,我还学到了一个人的力量毕竟有限,但是团队的力量势不可挡,我们不能只靠自己,遇到不会的要多多求助同学,

这次设计虽然结束了,也留下了很多遗憾,因为由于期末,面临各科考试,时间的紧缺,并没有做到最好。

相信以后我们会以更加积极地态度对待我们的学习、对待我们的生活。

我们的激情永远不会结束,相反,我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它,增进它。

关于使用VHDL的问题:

   ①VHDL的语法问题:

由于初次接触VHDL硬件编程语言,容易犯一些小错误,像端口括号前分号不加,二进制变量与十进制变量加不加引号的问题等等。

当然大部分语法问题编译的时候能够报错从而发现。

但是,也有一些小规则,虽然语法通过了,但是功能却不能实现。

本实验的代码调试中发现了大量的这样的问题。

②可能是由于编译器的一些原因,在使用case……when……语句时,出现了一些不可预知的问题。

由于要实现的是一个比较捕获触发器,所以只有在某几个输入状态的时候需要改变输出的值,而在其他输入状态时输出量要保持,使用case语句,但在实验中发现,case语句中没有使用的状态虽然用了others关键字进行设置,但实际运行中其输出并不稳定为我们希望的值。

最终将所有可能输入情况的case状态均进行了设置,才解决了这个问题,看来以后casewhen语句要少用啊!

参考书目

(1)VHDL数字控制系统设计电子工业出版社

(2)EDA技术与VHDL清华大学出版社

附录总程序

 

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydingcengis

port(clkd,resetd,cond,con1d:

instd_logic;

count1:

outstd_logic_vector(6downto0);

count2:

outstd_logic_vector(6downto0);

count3:

outstd_logic_vector(6downto0);

count4:

outstd_logic_vector(6downto0);

reda,greena,yellowa,greena1:

outstd_logic;

redb,greenb,yellowb,greenb1:

outstd_logic);

endentitydingceng;

architectureoneofdingcengis

componentclk_10

port(clk:

instd_logic;

clk_div10:

outstd_logic);

endcomponent;

componentcounter

port

(clk0:

instd_logic;

con:

instd_logic;

reset:

instd_logic;

countnum:

bufferintegerrange0to89);

endcomponent;

componentcontroller

port

(clk1:

instd_logic;

con1:

instd_logic;

con2:

instd_logic;

countnum:

inintegerrange0to89;

numa,numb:

outintegerrange0to25;

ra,ga,ya,ga1:

outstd_logic;

rb,gb,yb,gb1:

outstd_logic);

endcomponent;

componentfenwei

port(numin:

inintegerrange0to

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

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

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

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