当前位置:文档之家› Verilog实验报告交通灯

Verilog实验报告交通灯

Verilog实验报告交通

集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]
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 支黄
三、模块设计
状态转移图:
四、测试代码
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

相关主题