📄 traffic.v
字号:
module traffic(LED,CLK,SEG,SL); //模块及其结构
output [7:0] SEG; //定义LED段码数据线
output [3:0] SL; //定义LED位码线
output [7:0] LED; //定义交通灯输出口
input CLK; //定义时钟输入
reg [31:0] count; //分频系数寄存器
reg [7:0] seg_reg; //段码寄存器
reg [3:0] sl_reg; //位码寄存器
reg [3:0] disp_dat; //若显示数据寄存器
reg [1:0] lamp_status; //定义此时灯的状态寄存器
reg lamp_change,sec_tick; //秒标志寄存器
reg [7:0] lamp_time; //LED显示数据寄存器
reg [7:0] led_reg;
initial //初始化
begin
lamp_status=3'h0;
lamp_time=8'h30;
end
always @(posedge CLK) //0.25秒发生器(11.05926M/4/2=1380K)
begin
if (count < 31'd25000000)
begin
count=count+1;
end
else
begin
count=0; //清零计数寄存器
sec_tick=~sec_tick; //0.25秒标志加1
end
end
always @(posedge sec_tick) //计时模块
begin
if (lamp_status == 2'h0) //绿灯状态
begin
if (lamp_time == 8'h0) //绿灯该灭了吗?
begin
lamp_status=2'h1; //是,则切换到黄灯
lamp_time=8'h6; //赋值为6
led_reg=8'b10111101; //黄交通灯点亮
end
else
begin
lamp_time=lamp_time-1; //否则,绿灯亮的时间减1
if (lamp_time[3:0]>9)
lamp_time[3:0]=9;
end
end
else if (lamp_status == 2'h1) //黄灯状态(从绿灯变为黄灯)
begin
if (lamp_time == 8'h0)
begin
lamp_status=2'h2;
lamp_time=8'h20;
led_reg=8'b11011011;
end
else
begin
lamp_time=lamp_time-1;
end
end
else if (lamp_status == 2'h2) //红灯状态
begin
if (lamp_time == 8'h0)
begin
lamp_status=2'h0;
lamp_time=8'h30;
led_reg=8'b01111110;
end
else
begin
lamp_time=lamp_time-1;
if (lamp_time[3:0]>9)
lamp_time[3:0]=9;
end
end
end
always @(count[12:11])
begin
case (count[12:11])
2'h0: disp_dat = 4'h0;
2'h1: disp_dat = 4'h0;
2'h2: disp_dat = lamp_time[7:4];
2'h3: disp_dat = lamp_time[3:0];
endcase
case (count[12:11])
2'h0: sl_reg = 4'b1110;
2'h1: sl_reg = 4'b1101;
2'h2: sl_reg = 4'b1011;
2'h3: sl_reg = 4'b0111;
endcase
end
always @(disp_dat)
begin
case (disp_dat)
4'h0: seg_reg = 8'hc0;
4'h1: seg_reg = 8'hf9;
4'h2: seg_reg = 8'ha4;
4'h3: seg_reg = 8'hb0;
4'h4: seg_reg = 8'h99;
4'h5: seg_reg = 8'h92;
4'h6: seg_reg = 8'h82;
4'h7: seg_reg = 8'hf8;
4'h8: seg_reg = 8'h80;
4'h9: seg_reg = 8'h90;
4'ha: seg_reg = 8'h88;
4'hb: seg_reg = 8'h83;
4'hc: seg_reg = 8'hc6;
4'hd: seg_reg = 8'ha1;
4'he: seg_reg = 8'h86;
4'hf: seg_reg = 8'h8e;
endcase
end
assign LED=led_reg;
assign SEG=seg_reg;
assign SL=sl_reg;
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -