?? 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 + -