EDA技术与Verilog HDL技术实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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、11
reg[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;//绿灯40S
red1<=8'b01000000;//红灯40S
yellow1<=8'b00000101;//黄灯5S
green2<=8'b01000000;
red2<=8'b01000000;
yellow2<=8'b00000101;
end
always @(posedge CLK )
begin
if(!URGEN)
begin
light3<=light1;
end
if(RST)//东西方向复位控制
begin
light1<=3'b001; //亮绿灯
num1<=green1;//时间为40S
end
else if(URGEN) //东西方向紧急情况控制
begin
light1<=3'b100; //亮红灯
//计数暂停
pb1<=1;
end
else if(pb1)
begin
light1<=light3;
pb1<=0;
end
else if(EN)
begin //使能有效开始控制计数
if(!tim1) //开始控制
begin //东西方向交通灯点亮控制
tim1<=1;
case(state1)
2'b00:begin
num1<=green1;
light1<=3'b001;
state1<=2'b01;
end//绿灯亮40S,跳转至下一状态
2'b01:begin
num1<=yellow1-1;
light1<=3'b010;
state1<=2'b10;
end//黄灯亮5秒,跳转至下一状态
2'b10:begin
num1<=red1+5;
light1<=3'b100;
state1<=2'b00;
end//红灯亮45S,跳转至初状态
default:light1<=3'b100;//其他情况亮红灯
endcase
end
else
begin //倒数计时
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1) tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end
always @(posedge CLK )
begin
if(!URGEN)
begin
light4<=light2;
end