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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档