基于VHDLEDA技术交通灯控制设计报告.docx
- 文档编号:5921843
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:15
- 大小:180.12KB
基于VHDLEDA技术交通灯控制设计报告.docx
《基于VHDLEDA技术交通灯控制设计报告.docx》由会员分享,可在线阅读,更多相关《基于VHDLEDA技术交通灯控制设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
基于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技术实验讲义杭州康芯电子有限公司
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDLEDA 技术 交通灯 控制 设计 报告