《Verilog实验报告交通灯.doc》由会员分享,可在线阅读,更多相关《Verilog实验报告交通灯.doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Verilog实验报告-第四次 交通灯 班级:集电0802班 姓名: 张鹏 学号: 04086057 序号: 16 一、规范(1) 具有开关功能:当reset=0时 红绿灯关闭,使主支干道六个灯全灭;(2) 具有四个功能:当reset=1且func=2b00时,主干道和支路正常计数; 且func=2b01时,支干道一直绿灯,主干道一直红灯; 且func=2b10时,主干道一直绿灯,支干道一直红灯; 且func=2b11时,主干道和支干道一直黄灯闪;(3) 计数器频率:运行频率2Hz计数器;(4) 信号灯种类:红、黄、绿;(5) 信号灯计执行时间关系:主干道:绿灯常亮+绿灯闪+黄灯=支干道:红灯
2、常亮;此设计中:主干道:绿灯常亮=57s,T绿灯闪=3s,T黄灯亮=3s支干道:绿灯常亮=15s,T绿灯闪=3s,T黄灯亮=3s(6) 信号灯到计时功能:信号灯预置后,开始执行2Hz计数器;(7) 信号灯跳转功能:当各信号灯计时至T时在下一个时钟信号上升沿到来时自动转为下一状态;(8) 信号灯各状态跳转关系:绿-黄-红-绿;二、输入输出定义reset,clk, func1:0 ,green1:0,red1:0,yellow1:0信号名宽度输入/输出管脚描述reset1inputL13红绿灯总开关clk1inputC9freq:50MHzfunc2inputN17/H18控制红绿灯功能green
3、11outputD11主绿green01outputE11支绿red11outputF11主红red01outputF12支红yellow11outputC11主黄yellow01outputE12支黄三、模块设计状态转移图:四、测试代码module frequency_divider_small(reset,clk,out); /重写一个小分频模块测试交通灯主模块功能 input reset,clk; output out; reg 1:0 temp; reg out; always (posedge clk or negedge reset) if (!reset) temp=2b00;
4、else temp=(temp=2b11)?2b00:temp+2b01; always (temp) out=(temp=2b11);endmodule module test_traffic_light; reg reset,clk; reg 1:0 func; wire 1:0 green; wire 1:0 red; wire 1:0 yellow; traffic_light simulation(.reset(reset),.clk(clk),.func(func),.green(green),.red(red),.yellow(yellow); always #10 clk=cl
5、k; initial begin reset=0; clk=1; func=2b00; #20 reset=1; #21000 func=2b01; #10000 func=2b10; #10000 func=2b11; endendmodule波形:五、源代码module frequency_divider(reset,clk,out);/分频模块,把50MHz时钟分成半秒计时器 input reset,clk; output out; reg 5:0 mol1,mol2; reg 6:0 mol3,mol4; reg out1,out2,out3,out; always (posedge
6、clk or negedge reset)/把25000000分成40*40*125*125 if(!reset) mol1=6d0; else mol1=(mol1=6d39)?6d0:mol1+6d1; always (posedge clk or negedge reset) if(!reset) mol2=6d0; else if(out1) mol2=(mol2=6d39)?6d0:mol2+6d1; always (posedge clk or negedge reset) if(!reset) mol3=7d0; else if(out2) mol3=(mol3=7d124)?7
7、d0:mol3+7d1; always (posedge clk or negedge reset) if(!reset) mol4=7d0; else if(out3) mol4=(mol4=7d124)?7d0:mol4+7d1; always (mol1 or mol2 or mol3 or mol4) begin out1=(mol1=6d39); out2=(mol2=6d39)&out1); out3=(mol3=7d124)&out2); out=(mol4=7d124)&out3); end endmodulemodule traffic_light(reset,clk,fun
8、c,green,red,yellow);/交通灯主模块 input reset,clk; input 1:0 func; output 1:0 green,red,yellow; reg 1:0 green,red,yellow; reg 2:0 state; reg 6:0 cnt; wire in; parameter greentime1=6d57;/主干道绿灯时间 parameter greentime0=6d27;/支干道绿灯时间 parameter yellowtime=3d3;/黄灯时间,绿灯闪时间 frequency_divider fenpin(.reset(reset),.
9、clk(clk),.out(in);/调用分频模块 always (posedge clk or negedge reset) if(!reset) begin cnt=7d0; state=3d1; green=2b00; red=2b00; yellow=2b00; end else if(in)/分频器结果当主模块始能 if(func=2b00)/选择不同功能控制开关 if(cnt=7d0) case(state)/选择不同状态 3d1:begin cnt=greentime11; state=3d2; green=2b10; red=2b01; yellow=2b00; end 3d2
10、:begin cnt=yellowtime1; state=3d3; end 3d3:begin cnt=yellowtime1; state=3d4; green=2b00; red=2b01; yellow=2b10; end 3d4:begin cnt=greentime11; state=3d5; green=2b01; red=2b10; yellow=2b00; end 3d5:begin cnt=yellowtime1; state=3d6; end 3d6:begin cnt=yellowtime1; state=3d1; green=2b00; red=2b10; yello
11、w=2b01; end endcase else begin cnt=cnt-7d1;/倒计数,计数结束进入下一状态 case(state) 3d3:green1=cnt0;/主干道绿灯闪 3d6:green0=cnt0;/支干道绿灯闪 endcase end else if(func=2b10)/主干道常绿,支干道常红 begin cnt=0; state=3d1; green=2b10; red=2b01; yellow=2b00; end else if(func=2b01)/主干道常红,支干道常绿 begin cnt=0; state=3d1; green=2b01; red=2b10; yellow=2b00; end else if(func=2b11)/主干道,支干道黄灯一直闪 begin cnt=0; state=3d1; green=2b00; red=2b00; yellow1=yellow1; yellow0=yellow1; endendmodule