Verilog实验报告 交通灯.docx
- 文档编号:28631822
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:9
- 大小:16.09KB
Verilog实验报告 交通灯.docx
《Verilog实验报告 交通灯.docx》由会员分享,可在线阅读,更多相关《Verilog实验报告 交通灯.docx(9页珍藏版)》请在冰豆网上搜索。
Verilog实验报告交通灯
Verilog实验报告
---第四次交通灯
班级:
集电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)信号灯各状态跳转关系:
绿-黄-红-绿;
二、输入输出定义
reset,clk,func[1:
0],green[1:
0],red[1:
0],yellow[1:
0]
信号名
宽度
输入/输出
管脚
描述
reset
1
input
L13
红绿灯总开关
clk
1
input
C9
freq:
50MHz
func
2
input
N17/H18
控制红绿灯功能
green[1]
1
output
D11
主绿
green[0]
1
output
E11
支绿
red[1]
1
output
F11
主红
red[0]
1
output
F12
支红
yellow[1]
1
output
C11
主黄
yellow[0]
1
output
E12
支黄
三、模块设计
状态转移图:
四、测试代码
modulefrequency_divider_small(reset,clk,out);//重写一个小分频模块测试交通灯主模块功能
inputreset,clk;
outputout;
reg[1:
0]temp;
regout;
always@(posedgeclkornegedgereset)
if(!
reset)
temp<=2'b00;
else
temp<=(temp==2'b11)?
2'b00:
temp+2'b01;
always@(temp)
out=(temp==2'b11);
endmodule
moduletest_traffic_light;
regreset,clk;
reg[1:
0]func;
wire[1:
0]green;
wire[1:
0]red;
wire[1:
0]yellow;
traffic_lightsimulation(.reset(reset),.clk(clk),.func(func),.green(green),.red(red),.yellow(yellow));
always#10clk=~clk;
initial
begin
reset=0;
clk=1;
func=2'b00;
#20reset=1;
#21000func=2'b01;
#10000func=2'b10;
#10000func=2'b11;
end
endmodule
波形:
五、源代码
modulefrequency_divider(reset,clk,out);//分频模块,把50MHz时钟分成半秒计时器
inputreset,clk;
outputout;
reg[5:
0]mol1,mol2;
reg[6:
0]mol3,mol4;
regout1,out2,out3,out;
always@(posedgeclkornegedgereset)
if(!
reset)
mol1<=6'd0;
else
mol1<=(mol1==6'd39)?
6'd0:
mol1+6'd1;
always@(posedgeclkornegedgereset)
if(!
reset)
mol2<=6'd0;
elseif(out1)
mol2<=(mol2==6'd39)?
6'd0:
mol2+6'd1;
always@(posedgeclkornegedgereset)
if(!
reset)
mol3<=7'd0;
elseif(out2)
mol3<=(mol3==7'd124)?
7'd0:
mol3+7'd1;
always@(posedgeclkornegedgereset)
if(!
reset)
mol4<=7'd0;
elseif(out3)
mol4<=(mol4==7'd124)?
7'd0:
mol4+7'd1;
always@(mol1ormol2ormol3ormol4)
begin
out1=(mol1==6'd39);
out2=((mol2==6'd39)&&out1);
out3=((mol3==7'd124)&&out2);
out=((mol4==7'd124)&&out3);
end
endmodule
moduletraffic_light(reset,clk,func,green,red,yellow);//交通灯主模块
inputreset,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;
wirein;
parametergreentime1=6'd57;//主干道绿灯时间
parametergreentime0=6'd27;//支干道绿灯时间
parameteryellowtime=3'd3;//黄灯时间,绿灯闪时间
frequency_dividerfenpin(.reset(reset),.clk(clk),.out(in));//调用分频模块
always@(posedgeclkornegedgereset)
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
elseif(func==2'b10)//主干道常绿,支干道常红
begin
cnt<=0;
state<=3'd1;
green<=2'b10;
red<=2'b01;
yellow<=2'b00;
end
elseif(func==2'b01)//主干道常红,支干道常绿
begin
cnt<=0;
state<=3'd1;
green<=2'b01;
red<=2'b10;
yellow<=2'b00;
end
elseif(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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog实验报告 交通灯 Verilog 实验 报告