基于VHDLEDA技术交通灯控制设计报告.docx

上传人:b****6 文档编号:5921843 上传时间:2023-01-02 格式:DOCX 页数:15 大小:180.12KB
下载 相关 举报
基于VHDLEDA技术交通灯控制设计报告.docx_第1页
第1页 / 共15页
基于VHDLEDA技术交通灯控制设计报告.docx_第2页
第2页 / 共15页
基于VHDLEDA技术交通灯控制设计报告.docx_第3页
第3页 / 共15页
基于VHDLEDA技术交通灯控制设计报告.docx_第4页
第4页 / 共15页
基于VHDLEDA技术交通灯控制设计报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于VHDLEDA技术交通灯控制设计报告.docx

《基于VHDLEDA技术交通灯控制设计报告.docx》由会员分享,可在线阅读,更多相关《基于VHDLEDA技术交通灯控制设计报告.docx(15页珍藏版)》请在冰豆网上搜索。

基于VHDLEDA技术交通灯控制设计报告.docx

基于VHDLEDA技术交通灯控制设计报告

EDA技术课程设计

 

课题:

交通控制器设计

 

系别:

电气与电子工程系

专业:

电子信息工程

******

学号:

123408133

*******

河南城建学院

2011年6月24日

成绩评定·

一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。

二、评分(按下表要求评定)

评分项目

设计报告评分

答辩评分

平时表现评分

合计

(100分)

任务完成

情况

(20分)

课程设计

报告质量

(40分)

表达情况

(10分)

回答问题

情况

(10分)

工作态度与纪律

(10分)

独立工作

能力

(10分)

得分

课程设计成绩评定

 

一、设计目的

通过对FPGA(现场可编程门阵列)芯片的设计实践,使学生掌握一般的PLD(可编程逻辑器件)的设计过程、设计要求、设计内容、设计方法,能根据用户的要求及工艺需要进行电子芯片设计并制定有关技术文件。

培养学生综合运用已学知识解决实际工程技术问题的能力、查阅图书资料和各种工具书的能力、工程绘图能力、撰写技术报告和编制技术资料的能力,受到一次电子设计自动化方面的基本训练。

培养学生利用EDA技术知识,解决电子设计自动化中常见实际问题的能力,使学生积累实际EDA编程。

通过本课程设计的学习,学生将复习所学的专业知识,使课堂学习的理论知识应用于实践,通过本课程设计的实践使学生具有一定的实践操作能力。

1.了解交通灯的亮灭规律。

2.了解交通灯控制器的工作原理。

3.熟悉VHDL语言编程,了解实际设计中的优化方案。

二、设计要求

(1).以EDA技术的基本理论为指导,将设计实验分为基本功能电路和较复杂的电子系统两个层次,要求利用数字电路或者EDA方法去设计并完成特定功能的电子电路的仿真、软硬件调试;

(2).熟悉掌握常用仿真开发软件,比如:

QuartusII或XilinxISE的使用方法。

(3).能熟练运用上述开发软件设计并仿真电路并下载到FPGA中进行调试;

(4).学会用EDA技术实现数字电子器件组成复杂系统的方法;学习电子系统电路的安装调试技术。

三、总体设计原理与内容

1、设计内容

用EDA技术设计一个十字路口的交通信号灯控制器,控制A、B两条交叉道路上的车辆通行,具体要求如下:

(1)、每条道路设一组信号灯,每组信号灯由红黄绿3个灯组成,绿灯表示允许通行红灯表示禁止通行,黄灯表示该车道上已过停车线的车辆继续通行,未过停车线的车辆停止通行。

(2)、每条道路上每次通行的时间为25s。

(3)、每次变换通行车道之前,要求黄灯先亮5s,才能变换通行车道。

(4)、黄灯亮时,要求每秒钟闪烁一次。

2、设计的总体原理

图3-1交通灯系统控制框图

图3-2交通信号灯的控制电路

图3-3交通灯的时间转向图

四、EDA设计及仿真

1、主控制程序

Libraryieee;

Useieee.std_logic_1164.all;

Useieee.std_logic_unsigned.all;

Useieee.std_logic_arith.all;

Entitycontrolleris

Port

(clk8:

instd_logic;

Reset:

instd_logic;

hold:

instd_logic;

reda,greena,yellowa:

outstd_logic;

redb,greenb,yellowb:

outstd_logic;

displaya,displayb,displayc,displayd:

outstd_logic_vector(0to6));

end;

architecturecontrolofcontrolleris

signalcountnum:

integerrange0to50;

Signalclk:

std_logic;

Signalnuma,numb,numc,numd:

integerrange0to9;

signalnoa,nob:

integerrange0to25;

SignalQina,qinb,qinc,qind:

std_logic_vector(3downto0);

signalclock:

std_logic;

signalclock1:

std_logic;

signaltout:

integerrange0to3;

begin

Process(clk8);分频

begin

Ifrising_edge(clk8)then

Iftout=3then

Tout<=0;

clock1<=notclock1;

Elsetout<=tout+1;

Endif;

endif;

clk<=clock1;

Endprocess;

process(clk)

begin

ifreset='1'then

countnum<=0;

elsifrising_edge(clk)then

ifcountnum=49then

countnum<=0;

else

countnum<=countnum+1;

endif;

endif;

endprocess;

process(clk)

begin

ifrising_edge(clk)then

ifhold='1'then

reda<='1';

redb<='1';

greena<='0';

greenb<='0';

else

ifcountnum<=19then

noa<=20-countnum;

reda<='0';

greena<='1';

elsif(countnum<=24)then

noa<=25-countnum;

reda<='0';

greena<='0';

else

noa<=50-countnum;

reda<='1';

greena<='0';

endif;

ifcountnum<=24then

nob<=25-countnum;

redb<='1';

greenb<='0';

elsifcountnum<=44then

nob<=45-countnum;

redb<='0';

greenb<='1';

else

nob<=50-countnum;

redb<='0';

greenb<='0';

endif;

endif;

endif;

endprocess;;分位

process(clk)

begin

ifhold='0'then

if(countnum>20andcountnum<=25)then

yellowa<=clk;

yellowb<='0';

elsif(countnum>45andcountnum<=50)then

yellowa<='0';

yellowb<=clk;

else

yellowa<='0';

yellowb<='0';

endif;

endif;

endprocess;

Process(clk8)

Begin

Ifrising_edge(clk8)then

Ifnoa>=20then

numa<=2;

numb<=noa-20;

Elsifnoa>=10then

Numa<=1;

numb<=noa-10;

Else

Numa<=0;

Numb<=noa;

Endif;

Endif;

Endprocess;

Process(clk8)

Begin

Ifrising_edge(clk8)then

Ifnob>=20then

numc<=2;

numd<=nob-20;

Elsifnob>=10then

Numc<=1;

numd<=nob-10;

Else

Numc<=0;

Numd<=nob;

Endif;

endif;

Endprocess;

process(clk8)

begin;数码管显示

Qina<=conv_std_logic_vector(numa,4);

Qinb<=conv_std_logic_vector(numb,4);

Qinc<=conv_std_logic_vector(numc,4);

Qind<=conv_std_logic_vector(numd,4);

Caseqinais

When"0000"=>displaya<="1111110";;译码

When"0001"=>displaya<="0110000";

When"0010"=>displaya<="1101101";

When"0011"=>displaya<="1111001";

When"0100"=>displaya<="0110011";

When"0101"=>displaya<="1011011";

When"0110"=>displaya<="1011111";

When"0111"=>displaya<="1110000";

When"1000"=>displaya<="1111111";

When"1001"=>displaya<="1111011";

Whenothers=>displaya<="0000000";

endcase;

Caseqinbis

When"0000"=>displayb<="1111110";

When"0001"=>displayb<="0110000";

When"0010"=>displayb<="1101101";

When"0011"=>displayb<="1111001";

When"0100"=>displayb<="0110011";

When"0101"=>displayb<="1011011";

When"0110"=>displayb<="1011111";

When"0111"=>displayb<="1110000";

When"1000"=>displayb<="1111111";

When"1001"=>displayb<="1111011";

Whenothers=>displayb<="0000000";

endcase;

Caseqincis

When"0000"=>displayc<="1111110";

When"0001"=>displayc<="0110000";

When"0010"=>displayc<="1101101";

When"0011"=>displayc<="1111001";

When"0100"=>displayc<="0110011";

When"0101"=>displayc<="1011011";

When"0110"=>displayc<="1011111";

When"0111"=>displayc<="1110000";

When"1000"=>displayc<="1111111";

When"1001"=>displayc<="1111011";

Whenothers=>displayc<="0000000";

endcase;

Caseqindis

When"0000"=>displayd<="1111110";

When"0001"=>displayd<="0110000";

When"0010"=>displayd<="1101101";

When"0011"=>displayd<="1111001";

When"0100"=>displayd<="0110011";

When"0101"=>displayd<="1011011";

When"0110"=>displayd<="1011111";

When"0111"=>displayd<="1110000";

When"1000"=>displayd<="1111111";

When"1001"=>displayd<="1111011";

Whenothers=>displayd<="0000000";

Endcase;

Endprocess;

End;

2、交通灯仿真结果及数据分析

仿真结果基本正确,对于每一时刻给出的时钟信号对应相应的计数值,红灯和绿灯都是间隔闪亮20/25秒,黄灯每次都是闪烁五秒钟,符合要求,复位键和保持键同样给出正确的仿真,对应的数码管译码也正确,所期望的与事实完全相同,仿真结果正确!

 

五、硬件实现

1、给出硬件实现引脚图

 

2、硬件实现照片

六、设计总结

1、设计过程中遇到的问题及解决方法

在本设计中出现的问题有很多,现举例如下:

(1)、程序的组合,一开始我只是简单的将编好的控制模块,分为模块,显示模块,分频模块组合在一起,进行编译的时候并没有报错,而仿真结果也是看似正确,因为只有主程序得到编译,其他四个模块都没有起到作用,结果输入与输出引脚都只有主程序的,没有要求得到的全部引脚,很明显,这种拼接做法是错误的。

(2)、经过修改之后的程序出现最多的错误就是endif与endprocess的多与少的问题,endif经常多放,其他的还有变量的赋值符号与信号的不同,变量声明的位置也与信号不同,信号的使用也有限制,因为不能及时更新,会有时间上的延迟。

(3)、再个就是黄灯的闪烁,因为刚开始和红绿灯一块定义,赋值,没有闪烁的效果,最后在进程之外,我又增加了一个进程,专门定义与控制黄灯的闪烁问题,以为需要分频后的时钟信号,只是分开定义的主要原因。

(4)、最后一步是硬件的仿真,程序下载之后,数码管不亮,二极管也不亮,我检查程序,也没有错误,接入引脚也是正确的(虽然之前有几次是因为引脚接错位和芯片的错误使用,以及功能仿真与时序仿真的不同),启动之后就是不亮,经过反复检查,复位键和保持键有些失灵,按下几次之后即恢复正常工作,和之前期望的完全相同。

至此,本设计圆满成功!

2、设计体会

本设计中出现的错误以及查找和改正错误的过程是最大的收获,这不仅是对我知识的考察,也是一种实际应用能力的证明,刚开始有几十上百个错误,警告,一步步的查找,编译,在查找,经过两天不间断的检查和纠正,程序才算初步成功可编译,然而对已仿真的结果常常又不能尽人意,还要时不时的修改程序已达到期望的目标,反反复复,最后下载硬件的时候更是麻烦,本来仿真是完美的,可就是硬件实现出问题,这足足花了一下午的时间检查错误,程序基本没错,就是硬件失灵,按了好几次复位与保持才使程序正确运行,这是对硬件了解太少所导致的后果,以后学习检查硬件也是我学习的重点!

3、对设计的建议

本设计没有对拐弯处的路灯进行控制,只是在直线上控制,对于转向灯的控制希望可以加些改进,以符合实际应用的要求!

七、设计生成的电路图(见附图)

 

参考文献

[1]潘松,黄继业.EDA技术使用教程.北京:

科学出版社,2006

[2]黄任.VHDL入门.解惑.经典实例.经验总结.北京:

北京航空航天大学出版社,2005

[3]徐志军,徐光辉.CPLD/FPGA的开发与应用.北京:

电子工业出版社,2002

[4]李洪伟,袁斯华基于quartus2的FPGA/CPLD的设计电子工业出版社

[5]VHDL数字电路设计教程乔庐峰王志功等译电子工业出版社

[6]EDA技术实验讲义杭州康芯电子有限公司

 

 

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

当前位置:首页 > 自然科学

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

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