Verilog实验报告交通灯

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

相关文档
最新文档