《EDA课程设计 交通灯.doc》由会员分享,可在线阅读,更多相关《EDA课程设计 交通灯.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、郑州航空工业管理学院EDA技术及应用课程设计报告 届 通信工程 专业 班级题目: 姓名: 学号: 同组人: 指导老师: 201 年 月 日目录1、设计要求-032、设计规划方案-04 1试验箱部分-04 1整体规划-042功能划分与模块划分-053各模块的实现方法、技术、要点-084程序的编写-095仿真与调试-14 2实验板部分-151整体规划-152程序的编写-153仿真与调试-174设计中出现的问题及优化与改进-173、任务完成情况及个人心得体会-184、指导老师评价-19注意:后面所附程序仅供参考,为减小下载文件大小,此程序中将交通灯的周期进行了压缩,为主干道红灯4s黄灯2s绿灯4s,
2、次干道红灯6s黄灯2s绿灯2s,可根据实际要求进行修改。一、设计要求1、基本要求:1、主干道通行(绿灯):主干道行车4秒;支路红灯,停车6s,数码管显示倒计时的秒,秒计时的频率为1Hz。2、主干道缓冲(黄灯):2秒,不显示计数,秒计时的频率为1HZ。3、支路通行(绿灯):2秒,主干道红灯,数码管显示倒计时的秒,秒计时的频率为1Hz。4、支路缓冲(黄灯):2秒,不显示计数,秒计时的频率为1HZ。数码管采用动态显示。2、其他要求:1、晶振为12 MHz。2、采用CPLD 器件为MAX7000AE 的EPM7064AEL144_7。3、采用数码管显示。二、设计方案规划1、实验箱部分、整体规划(确定输
3、入与输出)a、实验箱管脚input clk_lk,一个时钟输入output7:0 seg,控制数码管显示数据output7:0 dig,控制4个数码管的输出,高2位输出支路计时,低2位输出主干路计时。output5:0 led,控制着主干路和支路的6个灯 功能划分与模块划分本程序由分频器,数码管动态显示程序,计数器,灯转换控制电路实现,可以大致分为4个模块或者4个过程语句实现。第一部分实现分频功能,第二部分实现路灯控制功能,第三部分实现计时转换功能。各功能和各模块的功能细分。本程序主要由3个always过程块实现,其中第一个always块实现分频功能,if(clk_cnt=24d)代表晶振为1
4、2MHZ;第二个always过程块用来实现A方向灯控制,第三个always块用来实现B方向灯控制。其中,第二个和第三个always块用来处理交通灯的计时,灯转换过程,是本程序的主要部分,其功能影响本程序的准确性,计数大致如图:路 别绿灯黄灯红灯主干道4s2s4s支干道2s2s6s各模块的实现方法,技术、要点 第一个always过程块实现分频,可以用一个12MHZ分频器来实现,其中sec为分频器的输出端,以后调用sec实现分频功能,count为计数寄存器,用来计数12M,每计12M个数后就将sec取反用来表示分频结果;第二个always块用来显示数码管动态扫描,将miao定义为输入要显示的数据,
5、第一个case(count16:15)选择扫描显示数据,第二个case(count16:15) 选择数码管显示位,两位可以有4种选择0,1,2,3分别对应4种不同状态;第四个always块用来实现路灯控制以及计数,其中if(lampa=0)代表主干路,if(lampb=0)代表支路,lamp=3bXXX代表要显示的灯,这里用代替实际交通灯,agreen,ayellow,ared分别代表主干绿灯,黄灯,红灯,bgreen,byellow,bred分别代表支路绿灯,黄灯,红灯,numa或numb可以用来表示一种计数状态,满足这种状态时可以改变灯的颜色以及计数时间。程序的编写交通灯控制模块modul
6、etraffic(clk_lk,rst,clk,lampa,lampb,acount,bcount);inputclk_lk,rst,clk;/产生系统时钟,复位信号,1s时钟信号output2:0lampa,lampb;/led灯(红黄绿)output7:0acount,bcount;/数码管倒计时显示reg2:0lampa,lampb;reg7:0numa,numb;regtempa,tempb;reg2:0statea,stateb;/led灯控制parameterared=8h4,ayellow=8h2,agreen=8h4,bred=8h6,byellow=8h2,bgreen=8h
7、2;/初始值assignacount=numa;assignbcount=numb;always(posedgeclk_lkornegedgerst)beginif(!rst)beginstatea=3h0;lampa=3b011;tempa=1b0;endelseif(clk)beginif(!tempa)/A方向灯控制begintempa=1b1;case(statea)0:beginnuma=agreen;lampa=3b011;statea=1;end1:beginnuma=ayellow;lampa=3b101;statea=2;end2:beginnuma=ared;lampa=3
8、b110;statea=0;enddefault:lampa1)if(numa3:0=0)beginnuma3:0=4h9;numa7:4=numa7:4-4h1;endelsenuma3:0=numa3:0-4h1;if(numa=2)tempa=1b0;endendendalways(posedgeclk_lkornegedgerst)beginif(!rst)beginlampb=3b110;stateb=3h0;tempb=1b0;endelseif(clk)beginif(!tempb)/B方向灯控制begintempb=1b1;case(stateb)0:beginnumb=bre
9、d;lampb=3b110;stateb=1;end1:beginnumb=bgreen;lampb=3b011;stateb=2;end2:beginnumb=byellow;lampb=3b101;stateb=0;enddefault:lampb1)if(numb3:0=0)beginnumb3:0=4h9;numb7:4=numb7:4-4h1;endelsenumb3:0=numb3:0-4h1;if(numb=2)tempb=1b0;endendendendmodule数码管显示控制模块moduletraffic_test(clk_lk,clk,rst,acount,bcount,
10、seg,dig);inputclk_lk;inputrst;outputclk;input7:0acount;input7:0bcount;output7:0 seg;output7:0dig;reg7:0seg;reg7:0dig;reg25:0clk_cnt;reg16:0count;reg1:0cnt;reg3:0disp_dat;always(posedgeclk_lk)beginif(clk)clk_cnt=26h1;elseclk_cnt=26d);always(posedgeclk_lk)begincount=count+1b1;endassigndiv_clk=&count;a
11、lways(posedgeclk_lk)beginif(div_clk)cnt=cnt+1b1;endalways(posedgeclk_lk)beginif(div_clk)begincase(cnt)2d0:disp_dat=acount7:4;/选择数码管2d1:disp_dat=acount3:0;2d2:disp_dat=bcount7:4;2d3:disp_dat=bcount3:0;endcasecase(cnt)2d0:dig=8b;/扫描数码管2d1:dig=8b;2d2:dig=8b;2d3:dig=8b;endcaseendendalways(disp_dat)begin
12、case(disp_dat)/显示值4h0:seg=8hc0;/04h1:seg=8hf9;/14h2:seg=8ha4;/24h3:seg=8hb0;/34h4:seg=8h99;/44h5:seg=8h92;/54h6:seg=8h82;/64h7:seg=8hf8;/74h8:seg=8h80;/84h9:seg=8h90;/9endcaseendendmodule顶层模块moduletraffic_top(clk_lk,rst,seg,dig,lampa,lampb);inputclk_lk;inputrst;output2:0lampa,lampb;output7:0seg,dig;
13、wireclk;wire7:0acount,bcount;traffictraffic(.clk_lk(clk_lk),.rst(rst),.clk(clk),.lampa(lampa),.lampb(lampb),.acount(acount),.bcount(bcount);traffic_testtraffic_test(.clk_lk(clk_lk),.clk(clk),.rst(rst),.acount(acount),.bcount(bcount),.seg(seg),.dig(dig);endmodule仿真与调试1、将程序下载到试验箱,LED灯亮灭符合设计要求,次干道数码管显示
14、正常,符合要求,但主干道数码管部分数据显示混乱,表明程序可能存在错误。2、经反复调试程序,LED灯显示正常,主、次干道数码管显示正常,符合设计要求。2、实验板部分电路板芯片管脚其他设计要求等与实验箱相同程序的编写moduleTraffic(clk_lk,rst,lampa,lampb);inputclk_lk,rst;/产生系统时钟,复位信号,1s时钟信号output2:0lampa,lampb;/led灯(红黄绿)reg2:0lampa,lampb;reg7:0numa,numb;regtempa,tempb;reg2:0statea,stateb;/led灯控制reg25:0clk_cnt
15、;reg16:0count;wire clk;parameterared=8h4,ayellow=8h2,agreen=8h4,bred=8h6,byellow=8h2,bgreen=8h2;/初始值always(posedgeclk_lk)beginif(clk)clk_cnt=26h1;elseclk_cnt=26d);always(posedgeclk_lkornegedgerst)beginif(!rst)beginstatea=3h0;lampa=3b011;tempa=1b0;endelseif(clk)beginif(!tempa)/A方向灯控制begintempa=1b1;ca
16、se(statea)0:beginnuma=agreen;lampa=3b011;statea=1;end1:beginnuma=ayellow;lampa=3b101;statea=2;end2:beginnuma=ared;lampa=3b110;statea=0;enddefault:lampa=1)if(numa3:0=0)beginnuma3:0=4h9;numa7:4=numa7:4-4h1;endelsenuma3:0=numa3:0-4h1;if(numa=1)tempa=1b0;endendendalways(posedgeclk_lkornegedgerst)beginif
17、(!rst)beginlampb=3b110;stateb=3h0;tempb=1b0;endelseif(clk)beginif(!tempb)/B方向灯控制begintempb=1b1;case(stateb)0:beginnumb=bred;lampb=3b110;stateb=1;end1:beginnumb=bgreen;lampb=3b011;stateb=2;end2:beginnumb=byellow;lampb=3b101;stateb=0;enddefault:lampb=1)if(numb3:0=0)beginnumb3:0=4h9;numb7:4=numb7:4-4h1
18、;endelsenumb3:0=numb3:0-4h1;if(numb=1)tempb=1b0;endendendendmodule 仿真及调试1、先将程序在试验箱运行,LED灯亮灭正常,数码管显示正常,符合设计要求。2、将分频器改成if(clk_cnt=24d),编译,综合,;然后分配管脚,先在实验室FPGA上硬件调试无误后再把管脚改成对应EPM7064AEL144_7管脚。设计中出现的问题及优化与改进设计过程中程序编译好以后在实验箱上能够正常并完整的完成整个设计要求,但是在下载到器件的芯片上时由于芯片容量过小,造成芯片无法完全容纳程序,于是我们这一组的实验采用两个同步计数器在一个时钟频率下
19、实现,减小倒计时循环周期,并删减部分不重要的程序,如数码管显示等,保留较为核心的交通灯指示部分,能够下载到器件的芯片上。将绿黄红三灯显示总时间由56s减少到10s,此时程序仍过大,无法下载到芯片。将数码管显示部分的程序去除,此时可以下载到芯片,但灯显示错误,两灯常亮,不会自动变更。三、任务完成情况及个人心得体会任务完成情况:这次课程设计,我们组选择了交通灯控制器这个题目。最终完成结果为,在实验箱上一切功能正常,符合设计要求。然而在实验板上始终不成功。个人心得体会:通过这次课程设计,我学到了许多。从拿到题目开始,在我们组成员的共同努力下,我们一起查资料修改程序,一点一点完善程序。最开始,程序运行错误百出,到之后程序可以顺利编译,但在实验箱上效果不理想,再到后来程序可以在实验箱上得到比较理想的结果,大家都付出了许多。在这个过程中,我对Verilog HDL语言有了更深的理解,更熟悉Quartus软件的操作与应用。通过对程序的不断修改,我们慢慢的学会如何去解决问题。最初我们遇到问题总是想向老师求助,但老师鼓励我们自己去试着解决。慢慢的我们发现其实很多问题都是我们认真思考之后可以解决的。课程设计让我学会了许多,比如如何将以前在课堂学到的知识运用到实际中去等等。希望以后还有这样的实践机会。四、指导老师评价
限制150内