hdl交通灯设计.docx
《hdl交通灯设计.docx》由会员分享,可在线阅读,更多相关《hdl交通灯设计.docx(12页珍藏版)》请在冰豆网上搜索。
hdl交通灯设计
河海大学计算机与信息学院(常州)
课程设计报告
题目HDL交通灯项目设计
专业学号通信工程0862310319
授课班号275801
学生姓名丁修炜
指导教师奚吉
完成时间2010.1.6
摘要
本课程设计通过HDL技术设计交通灯控制系统,其设计描述可被不同的工具所支持,可用不同器件来实现。
利用VerilogHDL语言自顶向下的设计方法设计交通灯控制系统,使其实现道路交通的快速正常运转,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过QuartusII和ModelSim完成综合、仿真。
此程序下载到FPGA芯片后,可应用于实际的交通灯控制系统中。
通常的设计方法基于中、小规模集成电路进行,电路元件多、接线复杂、故障率高。
随着大规模集成电路的发展、EDA技术的出现,数字电路的设计进入了一个崭新阶段。
FPGA是一种用户根据各自需要而自行构造逻辑功能的数字集成电路,其种类很多,内部结构也不同,但共同的特点是体积小、使用方便。
本论文介绍了用VerilogHDL语言设计交通灯控制器的方法,并在QuartusII系统对FPGA芯片进行编译下载,由于生成的是集成化的数字电路,没有传统设计中的接线问题,所以故障率低、可靠性高,而且体积非常小。
本论文通过EDA设计,利用VerilogHDL语言模拟仿真交通灯控制电路。
说明EDA技术在数字电路设计中的优越性。
【关键词】VerilogHDLFPGA硬件描述语言交通灯控制器
ABSTRACT
ThecourseisdesignedbyHDLdesigntrafficlightcontrolsystems,theirdesigndescriptionmaybedifferenttoolsupport,availablewithdifferentdevices.Usetop-downdesignVerilogHDLlanguagedesigntrafficlightcontrolsystemfortherapidimplementationofroadtraffic,highlightingtheworkasahardwaredescriptionlanguagegoodreadability,portabilityandeaseofunderstanding,etc.,andthroughtheQuartusIIandModelSimcompleteintegrated,emulation.ThisprogramisdownloadedtotheFPGAchip,canbeappliedtoactualtrafficsignalcontrolsystem.Intheconventionaldesignmethodbasedonmiddleorsmallscaleintegratedcircuit,therearetoomanyelementsinthecircuitandtheconnectionsarecomplicated,sofaultsarepronetohappen.Withthedevelopmentoflarge-scaleintegratedcircuitsandthehappeningofEDAtechnologies,digitalcircuitdesignhasenteredanewstage.Thechipisdigitalintegratedcircuits,therearemanytypes,theinternalstructureofdifferent,butsharecommonfeaturesissmallinsize,easytouseInthispaper,thedesignmethodoftrafficlightcontrollerbyusingVerilogHardwareDescriptionLanguage(VerilogHDL)isintroduced,andthedownloadingofthecontrollerdesigntotheComplexProgrammableLogicDevice(FPGA)chipinQuartusIIisfulfilled.AsFPGAchipsarebasedonlargescaleICandElectricalDesignAutomation(EDA)techniqueandhavemanytypesanddifferentinteriorconstruction,theyaresmallinsizeandflexibleinuse,sotherearenoconnectionproblemsinthepresentedcircuit,andtheFPGAchipsarereliableandfaultsarelesspronetohappen,whichshowstheadvantagesoftheEDAtechnologyindigitalcircuitsdesign.
【Keywords】VerilogHardwareDescriptionLanguageField-ProgrammableGateArrayhardwaredescriptionlanguagetrafficlightcontroller
第一章课程设计目标及要求
一、课程设计目标
1、培养综合运用知识和独立开展实践创新的能力;
2、《硬件描述语言》是一门技术性、应用性很强的学科,实验课教学是它的一个极为重要的环节。
不论理论学习还是实际应用,都离不开实验课教学。
如果不在切实认真地抓好学生的实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节、学习与应用脱节的局面。
《HDL项目设计》的目的就是让同学们在理论学习的基础上,通过完成一个涉及时序逻辑、组合逻辑、声光输出的,具有实用性、趣味性的小系统设计,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对分析、解决实际的数字电路问题进一步加深认识,为今后能够独立进行某些数字应用系统的开发设计工作打下一定的基础。
二、研究方法及手段应用
1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;
2、通过EDA实验箱进行实际调试,实现软件的功能。
三、课程设计预期效果
1、完成实验环境搭建;
2、
(1)设计一个十字路口的交通灯控制电路,每条路配有红、黄、绿交通信号灯,通过电
路对十字路口的两组交通灯的状态实现自动循环控制;
(2)实现东西车道和南北车道上的车辆交替运行,每次通行时间为20秒;
(3)要求黄灯亮3秒后,红灯才能转为绿灯,黄灯亮时要每秒闪亮一次;
(4)东西车道和南北车道每次通行的时间不同且可调。
第二章系统设计
第一节课题目标及总体方案
随着现代生活节奏的加快,人们出门便更多地选择自家的交通工具,或汽车,或电动车,这无疑加大了交通流量,如何控制十字路口的红绿灯,便显得相当的重要。
简单的,有效地控制红绿灯,是减小客流量,甚至减少交通事故的重要保障。
而此次课题,我们小组选择了交通灯控制电路,能熟悉verilogHDL硬件描述语言在现实生活中的重要意义,提前积累经验,为以后的工作打基础。
实现设计目标如下:
(1)设计一个十字路口的交通灯控制电路,每条路配有红、黄、绿交通信号灯,
通过电路对十字路口的两组交通灯的状态实现自动循环控制;
(2)实现东西车道和南北车道上的车辆交替运行,每次通行时间为20秒;
(3)要求黄灯亮3秒后,红灯才能转为绿灯,黄灯亮时要每秒闪亮一次;
(4)东西车道和南北车道每次通行的时间不同且可调;
第二节系统的对比与分析及确定设计方案
1、通过对比确定系统设计方案:
虽然是verilogHDL课程设计,虽然是硬件描述语言,但是大多数人仍然采用的是C语言的编写方法,或许可以达到目的,但是我觉得采用状态机的方法不仅简单易懂,而且如果调试不成功,修改起来也比较方便。
本系统采用四个状态,即S0:
东西方向红灯亮,南北方向绿灯亮;S1:
东西方向红灯亮,南北方向黄灯亮;S2:
东西方向绿灯亮,南北方向红灯亮;S3:
东西方向黄灯亮,南北方向绿灯亮;再执行S0,依次循环,实现系统的设计目标。
1、具体的电路分析如下表所示:
东西方向
南北方向
红灯亮
绿灯亮
黄灯亮
红灯亮
绿灯亮
黄灯亮
S0
1
0
0
0
1
0
S1
1
0
0
0
0
1
S2
0
1
0
1
0
0
S3
0
0
1
1
0
0
状态机状态列表
2、系统框图转换如下:
状态机状态转换图
2、系统逻辑设计:
根据上文中确定的系统设计方案,运用模块化的设计思路,我们在QuartusII5.0软件系统中设计了交通灯控制模块、显示控制模块、显示译码模块、20秒倒计时时器模块、3秒倒计时器模块的HDL程序,并通过各个模块程序之间的端口合理连接和协调,成功设计出交通信号灯控制电路,得到其逻辑结构原理图,即为整个交通信号灯控制电路的逻辑结构。
3、调试结果及分析
1、调试:
采用QuartusII5.0软件进行编译,然后下载到EDA试验箱进行调试。
调试的结果为:
采用6个LED灯作为东西南北两个方向的红黄绿灯进行调试,并且采用数码管进行倒计时。
QuartusII5.0编译程序
2、结果分析:
分别采用两组数码管进行东西南北方向的倒计时,让6个LED灯显示两组灯的亮暗情况,配合使用。
第三章硬件调试、结果分析讨论
第一节硬件调试
通过在QuartusII5.0软件中的模拟仿真,验证了该电路可以实现预定功能,即东西、南北干道交替通行,两种干道均通行20秒。
绿灯转换成红灯前,黄灯先亮3秒,此时另一个干道红灯不变。
当黄灯亮完3秒之后,另一条干道的绿灯亮而红黄灯都不亮,此时该干道允许通行,干道有数字显示各灯闪亮的时间。
如此一直循环往复,实现十字交叉路口的交通控制。
另外我们还实现了一个附加功能,即干道一直没有车通过的时候,干道一直处于畅通状态,这样可以在实际中遇到特殊情况时,来灵活控制应用,另外还可以加入人工控制端,即当遇有需进行交通管制等情形时,可以由交通警察来手工控制路口信号灯的转换。
为了更加准确的仿真和验证电路的功能,我们根据实际生活中的多种交通情况,将其进行分类,设定了十字路口出现的多个情境,并在QuartusII5.0软件环境中,分别对所设计的系统电路针对每个设定情境进行功能仿真,通过观察这些情境下的实验仿真结果,发现符合我们预想的功能,可以有序、准确的控制路口交通信号灯的顺序转换,并没有发生误操作。
除了进行软件的仿真之外,我们还将整体程序下载到目标FPGA器件,使用相应的硬件电路相配合,进行硬件调试,也验证了该电路工作情况良好,与软件仿真的结果完全相符合,说明我们所设计的交通信号灯控制电路通过了软件仿真和硬件的测试,可以完成之前的预定功能。
第二节出现的问题和解决方案
问题和解决方案
1、本次试验我们使用了ModelSim编译软件,初始时写完代码后程序编译不能通过,经过细心检查发现定义变量过程使用的time为系统词,后来编译过程中在工程下没有文件,查阅资料得知程序要先保存再编译。
2、在QuartusII软件上进行仿真时,发现不能得到预期的效果,分析得知由于分频过大的原因,软件仿真得不到预期结果。
经过同学的讨论决定在软件仿真时省去时钟信号的分频操作,但是在硬件验证过程中加入分频操作,将50MHz的信号分频到1Hz,问题得以解决。
3、对于Verilog语言的编程方面,特别在对变量给予初值时,完全不同于C语言编程,我们在对许多变量进行了初值设置,此后编译每每都不通过,在认真思考后,查阅了课本,发现在HDL编程中,不能对变量初值。
我们恍然大悟,在以后的编程中我们牢记住了这一点。
4、在程序编写初期我们分模块将时钟信号分为两个时钟信号,操作中发现本步操作较为麻烦,因此决定经20秒3秒采用一个1Hz信号控制较为简便。
5、在添加数码管显示过程中现实出现混论,经过检查后发现错误是由于高位和低位由于是对引脚配置的错误导致的。
改正后发现显示正常。
第三节心得体会
经过为期四天的hdl的课程设计,时间虽然短暂,可是收获还是很多的,再一次使用quartus软件,加深了对软件的理解,和使用熟练程度。
系统而又详细的复习和运用了所学的verilog语言,加深了我对作为一个编程者所应有素质和基础知识的重要性,还有程序的规范性对于程序的重要性,这些在平时我们忽略的问题,其实有时候关乎着我们编程的成功率;再者,在verilog语言中,我们必须注意其与C语言的异同,比如格式和变量定义,还有模块的调用,和时钟信号的应用。
verilog HDL设计语言是一门很好的硬件描述语言,可以直白的描述实际的电路,实际的系统模型,易懂而且易于实现,我觉得在以后多加练习,可以对以后的学习和工作带来莫大的帮助。
这次期末的课程设计就是对我们的一次考核,也可以说是一次考验,在平时做题目比较简单,而这次课程设计综合考核了我们的学习结果。
课程设计培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
然而从理论到实践,我在做课程设计的几天里,使我对有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的实际操作才能更好地学习它,但是学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
课程设计虽然已经结束了,它使我懂得了理论与实际相结合是很重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知解得不够深刻,掌握得不够牢固,在边编学程序的过程中我几乎是重新复习课本上的知识,
所以,我觉得无论是hdl课程设计,还是其他课程的设计,我们都要花费很多时间,认真,仔细,完整,合理完成任务,这样才能提高我们的综合素质,才能在实践中发现不足,在实践中加深对理论知识的理解和认识。
在实践中提高新一代理工科大学生所应有的素质。
附录:
参考文献
1、《FPGA设计及应用(第二版)》作者:
褚振勇齐亮田红心高楷娟西安电子科技大学出版社出版日期:
2006年12月第2版书号:
ISBN7-5606-1132-X/TP·0574
2、《CPLD/FPGA应用系统设计与(基础篇)》作者:
亿特科技人民邮电出版社出版日期:
2005年7月书号:
ISBN7-115-13200-3/TP.4503
3、《基于CPLD/FPGA的数字通信系统建模与设计》作者:
段吉海黄智伟电子工业出版社出版日期:
2004年8月书号:
ISBN7121002124
4、蓝运维.基于FPGA的交通灯控制系统的仿真[J].现代电子技术,2006(9):
125-129
5、何峰.基于VerilogHDL设计的交通灯控制系统[J].现代电子技术,2005(8):
103-107.
6、路而红.专用集成电路设计与电子设计自动化[M].北京:
清华大学出版社,2004.
7、孙凌翔,陈世和,李劲松.顺序控制法在交通灯控制系统中的应用[J],现代电子技术,2006(10):
26-27.
源程序:
moduleaa(clk,rst,LAMPA,ledcom,data_out,changetime);
output[7:
0]LAMPA,ledcom,data_out;
inputclk,changetime,rst;
reg[7:
0]numa,ledcom;
regtempa,i;
reg[3:
0]data_in;
reg[3:
0]counta,mun;
reg[7:
0]ared,ayellow,agreen;
reg[7:
0]LAMPA,data_out;
reg[24:
0]c,k,c1;
regclk1s;
regclk_100;
reg[19:
0]cnt2;
always@(posedgeclk)
begin
if(c==1250_0000)//产生0.5S的时钟信号
begin
c<=0;
clk1s=~clk1s;
end
else
c<=c+1;
end
always@(posedgeclk)
begin
cnt2<=cnt2+1;
if(cnt2==100000)
beginclk_100=~clk_100;cnt2<=0;
end
end
always@(posedgeclk1sornegedgerst)//该模块控制东西方向的三种灯
if(!
rst)
LAMPA<=8'b00001001;//有突发事件两个方向的红灯亮,后三位东西方向绿黄红
else
begin
if(changetime)
begin
ayellow<=1;
agreen<=34;
end
else
begin
ayellow<=1;
agreen<=44;
end
if(!
tempa)
begin
tempa<=1;
if(counta==0)
beginmun<=3;numa<=agreen;LAMPA<=8'b00100001;counta<=counta+1;end//南北方向绿灯
if(counta==1)
beginnuma<=ayellow;LAMPA<=8'b00010001;counta<=counta+1;end//南北方向黄灯闪烁
if(counta==2)
begin
mun<=mun-1;
if(mun)
begin
numa<=ayellow;LAMPA<=8'b00000001;counta<=counta-1;
end
elsebegin
mun<=3;
numa<=ayellow;LAMPA<=8'b00000001;counta<=counta+1;
end
end
if(counta==3)
beginnuma<=agreen;LAMPA<=8'b00001100;counta<=counta+1;end//东西方向绿灯亮
if(counta==4)
beginnuma<=ayellow;LAMPA<=8'b00001010;counta<=counta+1;end//东西方向黄灯闪烁
if(counta==5)
begin
mun<=mun-1;
if(mun)
begin
numa<=ayellow;LAMPA<=8'b00001000;counta<=counta-1;
end
elsebegin
mun<=3;
numa<=ayellow;LAMPA<=8'b00001000;counta<=0;
end
end
end
else
begin//倒计时
if(numa)
begin
if(numa==1)
beginnuma<=numa-1;tempa<=0;end
else
beginnuma<=numa-1;end
end
end
end
//////////////////////////////////////////////////////////////////////
always@(posedgeclk_100ornegedgerst)
if(!
rst)//同步复位
begin
i<=0;
ledcom<=8'b11111100;
data_out<=8'b11000000;
end
else
begin
ledcom<=~(1<
if(i==0)
begin
data_in<=(numa/2)/10;
i<=i+1'b1;
end
else
begin
data_in<=(numa/2)%10;
i<=1'b0;
end
case(data_in)
0:
data_out<=8'b11000000;//0
1:
data_out<=8'b11111001;//1
2:
data_out<=8'b10100100;//2
3:
data_out<=8'b10110000;//3
4:
data_out<=8'b10011001;//4
5:
data_out<=8'b10010010;//5
6:
data_out<=8'b10000011;//6
7:
data_out<=8'b11111000;//7
8:
data_out<=8'b10000000;//8
9:
data_out<=8'b10011000;//9
default:
data_out<=8'b11000000;
endcase
end
endmodule