当前位置:文档之家› EDA技术与Verilog HDL技术实验报告

EDA技术与Verilog HDL技术实验报告

EDA技术与Verilog HDL技术实验报告班级:09电信实验班姓名:虞鸿鸣组别:Q09610137实验:交通灯控制一、实验目的:1、运用Verilog HDL综合编辑软件实现相应功能;2、进一步使用EDA技术解决实际问题;3、进一步使用EDA工具箱,提高对硬件电路的认识。

二、实验仪器PC计算机、EDA实验工具箱三、简要原理1. 能显示十字路口东西、南北两个方向的红、黄、绿的指示状态用两组红、黄、绿三色灯作为两个方向的红、黄、绿灯。

变化规律为:东西绿灯,南北红灯→东西黄灯,南北红灯→东西红灯,南北绿灯→东西红灯,南北黄灯→东西绿灯,南北红灯……依次循环。

2. 能实现正常的倒计时功能用两组数码管作为东西和南北方向的允许或通行时间的倒计时显示,显示时间为红灯45秒、绿灯40秒、黄灯5秒。

3. 能实现紧急状态处理的功能(1) 出现紧急状态(例如消防车,警车执行特殊任务时要优先通行)时,两路上所有车禁止通行,红灯全亮;(2) 显示到计时的两组数码管闪烁;(3) 计数器停止计数并保持在原来的状态;(4) 特殊状态解除后能返回原来状态继续运行。

4. 能实现系统复位功能系统复位后,东西绿灯,南北红灯,东西计时器显示40秒,南北显示45秒。

5. 用VHDL语言设计符合上述功能要求的交通灯控制器,并用层次化设计方法设计该电路。

6. 控制器、置数器的功能用功能仿真的方法验证,可通过有关波形确认电路设计是否正确。

7. 完成电路全部设计后,通过系统实验箱下载验证设计课题的正确性。

四、设计思路EN、CLK、RST、URGEN分别为使能信号、时钟信号、复位信号和紧急情况信号;num1,num2分别为东西方向的倒计时和南北方向的倒计时,两个八位数码管,硬件接有译码芯片;light1,light2分别为东西方向的交通灯和南北方向的交通灯中红、黄、绿三色位置;tim1,tim2分别为东西和南北方向的交通的灯控制信号,高电平时有效;pb1,pb2分别为寄存紧急情况前交通灯状态变量的标志信号,高电平有效;state1,state2分别为东西、南北方向的交通灯状态信号,每个方向有三种状态,即00、01、11;五、源代码及注析module TRAFFIC_LI(EN,CLK,RST,URGEN,num1,num2,light1,light2);input EN,CLK,RST,URGEN;//EN、CLK、RST、URGEN分别为使能信号、时钟信号、复位信号和紧急情况信号output[7:0] num1,num2;//num1,num2分别为东西方向的倒计时和南北方向的倒计时,两个八位数码管,硬件接有译码芯片output[2:0] light1,light2;//light1,light2分别为东西方向的交通灯和南北方向的交通灯中红、黄、绿三色位置reg tim1,tim2,pb1,pb2;//tim1,tim2分别为东西和南北方向的交通的灯控制信号,高电平时有效//pb1,pb2分别为寄存紧急情况前交通灯状态变量的标志信号,高电平有效reg[1:0]state1,state2;//state1,state2分别为东西、南北方向的交通灯状态信号,每个方向有三种状态,即00、01、11reg[2:0]light1,light2,light3,light4;//light3,light4用以寄存紧急情况前交通灯状态reg[7:0] num1,num2;//现实时间寄存reg[7:0] red1,red2,green1,green2,yellow1,yellow2;//东西南北方向三种颜色的交通灯亮的时间always @(EN)if(!EN)begin //设置计数初值green1<=8'b01000000;//绿灯40Sred1<=8'b01000000;//红灯40Syellow1<=8'b00000101;//黄灯5Sgreen2<=8'b01000000;red2<=8'b01000000;yellow2<=8'b00000101;endalways @(posedge CLK )beginif(!URGEN)beginlight3<=light1;endif(RST)//东西方向复位控制beginlight1<=3'b001; //亮绿灯num1<=green1;//时间为40Sendelse if(URGEN) //东西方向紧急情况控制beginlight1<=3'b100; //亮红灯//计数暂停pb1<=1;endelse if(pb1)beginlight1<=light3;pb1<=0;endelse if(EN)begin //使能有效开始控制计数if(!tim1) //开始控制begin //东西方向交通灯点亮控制tim1<=1;case(state1)2'b00:beginnum1<=green1;light1<=3'b001;state1<=2'b01;end//绿灯亮40S,跳转至下一状态2'b01:beginnum1<=yellow1-1;light1<=3'b010;state1<=2'b10;end//黄灯亮5秒,跳转至下一状态2'b10:beginnum1<=red1+5;light1<=3'b100;state1<=2'b00;end//红灯亮45S,跳转至初状态default:light1<=3'b100;//其他情况亮红灯endcaseendelsebegin //倒数计时if(num1>0)if(num1[3:0]==0)beginnum1[3:0]<=4'b1001;num1[7:4]<=num1[7:4]-1;endelse num1[3:0]<=num1[3:0]-1;if(num1==1) tim1<=0;endendelsebeginlight1<=3'b010;num1=2'b00;tim1<=0;endendalways @(posedge CLK )beginif(!URGEN)beginlight4<=light2;endif(RST) //南北方向复位控制beginlight2<=3'b100;//亮红灯num2<=red2+5;//时间为45Sendelse if(URGEN)//南北方向特殊情况控制beginlight2<=3'b100;//亮红灯//计数暂停pb2<=1;endelse if(pb2)beginlight2<=light4;pb2<=0;endelse if(EN)beginif(!tim2)begin //南北方向交通灯控制tim2<=1;case(state2)2'b00:beginnum2<=red2+5;light2<=3'b100;state2<=2'b01;end2'b01:beginnum2<=green2;light2<=3'b001;state2<=2'b10;end2'b10:beginnum2<=yellow2-1;light2<=3'b010;state2<=2'b00;enddefault:light2<=3'b100;endcaseendelsebegin //倒数计时if(num2>0)if(num2[3:0]==0)beginnum2[3:0]<=4'b1001;num2[7:4]<=num2[7:4]-1;endelse num2[3:0]<=num2[3:0]-1;if(num2==1) tim2<=0;endendelsebegintim2<=0;state2<=2'b00;light2<=3'b010;endendendmodule六、实验结果及分析初始状态时,东西方向绿灯,计时40秒,南北方向红灯,计时45秒。

当有RST高电平触发时,系统自动进入初始化状态,东西方向绿灯,南北方向红灯,计时分别为40秒和45秒。

RST后,程序自动重新开始计数,减1运行计时功能。

当URGEN高电平时,即出现紧急情况,东西和南北方向均亮起红灯,当紧急信号过去后再恢复原来的状态,计时继续进行。

紧急情况过去后,程序继续正常按照规定的时序进行运行。

当绿灯计时40秒后,就进入5秒种的黄灯阶段。

在此期间,红灯仍继续工作5秒,直到5秒过后,两个方向的交通灯同时发生变化。

讨论:1、在仿真阶段,由于CLK时钟频率设置不合理,一直没有得到想要的实验结果。

通过改变CLK的参数设置和检查程序设计,实现了预期目的,波形达到了预期的效果。

2、在绿灯→黄灯阶段,在先前的设计中,始终不能保证两者的实时控制。

经讨论研究,其问题出在黄灯的延时上面。

因为绿灯和黄灯之间会有1秒的时间重合,这就导致了两者不能同时计时,实验结果自然不能达到预期效果。

实验心得:这是期末作业,同时也是对这一学期EDA学习的综合应用。

在程序设计中,的的确确遇到了不少问题,但通过查阅资料,相互探讨得以解决。

EDA的作用也不言而喻,因而在以后的学习中也应加强对其的学习。

相关主题