Verilog实验报告交通灯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
V e r i l o g实验报告交通
灯
集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]
V e r i l o g实验报告---第四次交通灯
班级:集电0802班
姓名:张鹏
学号: 04086057
序号: 16
一、规范
(1)具有开关功能:当reset=0时红绿灯关闭,使主支干道六个灯全灭;
(2)具有四个功能:当reset=1且func=2’b00时,主干道和支路正常计数;
且func=2’b01时,支干道一直绿灯,主干道一直红灯;
且func=2’b10时,主干道一直绿灯,支干道一直红灯;
且func=2’b11时,主干道和支干道一直黄灯闪;
(3)计数器频率:运行频率2Hz计数器;
(4)信号灯种类:红、黄、绿;
(5)信号灯计执行时间关系:主干道:绿灯常亮+绿灯闪+黄灯=支干道:红灯常亮;
此设计中:
主干道:绿灯常亮=57s,T绿灯闪=3s,T黄灯亮=3s
支干道:绿灯常亮=15s,T绿灯闪=3s,T黄灯亮=3s
(6)信号灯到计时功能:信号灯预置后,开始执行2Hz计数器;
(7)信号灯跳转功能:当各信号灯计时至T时在下一个时钟信号上升沿到来时自动转为下一状态;
(8)信号灯各状态跳转关系:绿-黄-红-绿;
二、输入输出定义
状态转移图:
四、测试代码
module frequency_divider_small(reset,clk,out);
eset(reset),.clk(clk),.func(func),.green(green),.red(red),.yellow(yellow)); always #10 clk=~clk;
initial
begin
reset=0;
clk=1;
func=2'b00;
#20 reset=1;
#21000 func=2'b01;
#10000 func=2'b10;
#10000 func=2'b11;
end
endmodule
波形:
五、源代码
module frequency_divider(reset,clk,out);eset(reset),.clk(clk),.out(in));//调用分频模块
always @ (posedge clk or negedge reset)
if(!reset)
begin
cnt<=7'd0;
state<=3'd1;
green<=2'b00;
red<=2'b00;
yellow<=2'b00;
end
else
if(in)//分频器结果当主模块始能
if(func==2'b00)//选择不同功能控制开关
if(cnt==7'd0)
case(state)//选择不同状态
3'd1:begin
cnt<=greentime1<<1;
state<=3'd2;
green<=2'b10;
red<=2'b01;
yellow<=2'b00;
end
3'd2:begin
cnt<=yellowtime<<1;
state<=3'd3;
end
3'd3:begin
cnt<=yellowtime<<1;
state<=3'd4;
green<=2'b00;
red<=2'b01;
yellow<=2'b10;
end
3'd4:begin
cnt<=greentime1<<1;
state<=3'd5;
green<=2'b01;
red<=2'b10;
yellow<=2'b00;
end
3'd5:begin
cnt<=yellowtime<<1;
state<=3'd6;
end
3'd6:begin
cnt<=yellowtime<<1;
state<=3'd1;
green<=2'b00;
red<=2'b10;
yellow<=2'b01;
end
endcase
else
begin
cnt<=cnt-7'd1;//倒计数,计数结束进入下一状态 case(state)
3'd3:green[1]<=cnt[0];//主干道绿灯闪
3'd6:green[0]<=cnt[0];//支干道绿灯闪
endcase
end
else if(func==2'b10)//主干道常绿,支干道常红
begin
cnt<=0;
state<=3'd1;
green<=2'b10;
red<=2'b01;
yellow<=2'b00;
end
else if(func==2'b01)//主干道常红,支干道常绿 begin
cnt<=0;
state<=3'd1;
green<=2'b01;
red<=2'b10;
yellow<=2'b00;
end
else if(func==2'b11)//主干道,支干道黄灯一直闪 begin
cnt<=0;
state<=3'd1;
green<=2'b00;
red<=2'b00;
yellow[1]<=~yellow[1];
yellow[0]<=~yellow[1];
end
endmodule