完整功能:
實現主幹道和支幹道的紅綠燈,並實現時間顯示功能;(前兩位顯示東西的 後兩位顯示南北的)
實現綠燈,黃燈,紅燈的持續時間固定的交通控制功能;
(狀態機切換三段的顯示 )
當東西或南北兩路中任一道上出現特殊情況,交通控制系統應可由交警手動控制立即進入特殊運行狀態的功能;(控制一個SW[0]----> en 計數器計數半秒使能半秒)
實現綠燈,黃燈,紅燈的持續時間可調的交通控制功能
(按鍵key_up 控制加 按鍵key_down 控制減);
top.v改變爲:
module top(ext_clk_25m,ext_rst_n,switch1,switch2,key_upup,key_down,key_entr,dtube_cs_n,dtube_data,led
);
//頂層控制模塊
input ext_clk_25m; //時鐘信號25MHz
input ext_rst_n; //復位信號
input switch1;
input switch2;
input key_upup;
input key_entr;
input key_down;
output [3:0] dtube_cs_n; //段選數據位
output [6:0] dtube_data;//位選數據位
output [7:0] led;
wire [3:0] TimeL;
wire [3:0] TimeH;
wire [3:0] TimeL1;
wire [3:0] TimeH1;
wire [7:0] red;
wire [7:0] green;
wire [7:0] yellow;
wire [3:0] timesh;
wire [3:0] timesl;
wire en1;
wire en2;
wire set_en;
wire clk;//中間變量
//控制電路模塊
control con1(
.ext_clk_25m(ext_clk_25m),
.ext_rst_n(ext_rst_n),
.switch1(switch1),
.switch2(switch2),
.en1(en1),
.en2(en2),
.set_en(set_en)
);
//設置時間模塊
set set1(
.ext_clk_25m(ext_clk_25m),
.ext_rst_n(ext_rst_n),
.set_en(set_en),
.key_upup(key_upup),
.key_down(key_down),
.key_entr(key_entr),
.red(red),
.yellow(yellow),
.green(green),
.led(led[7:6]),
.times1(timesh),
.times2(timesl)
);
//分頻25MHZ變爲1HZ
div d1(
.ext_clk_25m(ext_clk_25m),
.ext_rst_n(ext_rst_n),
.mclk(clk)
);
//倒計時計數模塊(東西)
counter c1(
.ext_clk_25m(ext_clk_25m),
.mclk(clk),
.ext_rst_n(ext_rst_n),
.cnt_en(en2),
.set_en(set_en),
.red(red),
.green(green),
.yellow(yellow),
.TimeH(TimeH),
.TimeL(TimeL),
.led(led[2:0])
);
//倒計時計數模塊(南北)
counter1 c2(
.ext_clk_25m(ext_clk_25m),
.mclk(clk),
.ext_rst_n(ext_rst_n),
.cnt_en(en2),
.set_en(set_en),
.red(red),
.green(green),
.yellow(yellow),
.TimeH1(TimeH1),
.TimeL1(TimeL1),
.led(led[5:3])
);
//數碼管顯示模塊(東西,南北)
seg s1(
.ext_clk_25m(ext_clk_25m),
.ext_rst_n(ext_rst_n),
.seg_en(en1),
.set_en(set_en),
.set_segh(timesh),
.set_segl(timesl),
.TimeH(TimeH),
.TimeL(TimeL),
.TimeH1(TimeH1),
.TimeL1(TimeL1),
.dtube_cs_n(dtube_cs_n),
.dtube_data(dtube_data)
);
endmodule
控制電路模塊:
module control(ext_clk_25m,ext_rst_n,switch1,switch2,en1,en2,set_en
);
input ext_clk_25m; //輸入時鐘
input ext_rst_n ; //復位信號
input switch1 ; //特殊狀態開關
input switch2 ; //設置狀態開關
output reg en1 ; //數碼管使能位
output reg en2 ; //交通燈使能位
output reg set_en ; //設置使能位
reg [24:0] cnt ; //存放計數器的值
parameter TIME = 25'd2500_0000;
//數碼管特殊狀態閃爍計數器模塊
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
cnt <=25'd0;
end
else if(cnt ==TIME-1'b1)begin
cnt <=1'b0;
end
else begin
cnt <=cnt + 1'b1;
end
end
//開關控制設置的開啓
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
set_en <=1'b0;
end
else if(switch2==1'b0)begin
set_en <=1'b1;
end
else begin
set_en <=1'b0;
end
end
//數碼管閃爍模塊
always @(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
en1<=1'b0;
end
else if(switch1==1'b0)begin
if(cnt<(TIME/2-1'b1))begin
en1<=1'b1;
end
else begin
en1<=1'b0;
end
end
else begin
en1<=1'b0;
end
end
//停止計數器計時模塊
always @(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
en2<=1'b0;
end
else if(switch1==1'b0)begin
en2<=1'b1;
end
else begin
en2<=1'b0;
end
end
endmodule
分頻模塊:
module div(ext_clk_25m,ext_rst_n,mclk
);
input ext_clk_25m ;//輸入時鐘
input ext_rst_n ;//復位端口
output reg mclk ;//輸出1Hz
reg [23:0] cnt ;//存放計數器的值
parameter TIME= 24'd1250_0000;//時鐘25MHz
//分頻模塊,使得輸入時鐘爲25MHz輸出時鐘爲1Hz
always@ (posedge ext_clk_25m or negedge ext_rst_n)begin
if(!ext_rst_n)begin
mclk <=1'b0;
cnt <=24'd0;
end
else if(cnt ==TIME-1'b1)begin
mclk <=~mclk;
cnt <=1'b0;
end
else begin
cnt <=cnt + 1'b1;
end
end
endmodule
counter.v
module counter(ext_clk_25m,mclk,ext_rst_n,cnt_en,set_en,red,green,yellow,TimeH,TimeL,led
);
input ext_clk_25m ;//系統時鐘
input mclk ;//時鐘信號
input ext_rst_n ;//復位信號
input cnt_en ;
input set_en ;
input [7:0] red ;
input [7:0] green ;
input [7:0] yellow ;
output reg[3:0] TimeH ;//兩位數碼管顯示高位
output reg[3:0] TimeL ;//兩位數碼管顯示低位
output reg[2:0] led ;//led指示狀態
reg [2:0] state_c ;
reg [2:0] state_n ;
reg [7:0] times;
parameter [2:0] IDLE = 3'b001,
S1 = 3'b010,
S2 = 3'b100;
//狀態機實現三種狀態切換模塊
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(!ext_rst_n)begin
state_c <=IDLE;
end
else if(set_en==1'b1)begin
state_c <= IDLE;
end
else if(cnt_en==1'b1)begin
state_c <= state_c;
end
else begin
state_c <= state_n;
end
end
//狀態切換
always@(*)
begin
case(state_c)
IDLE:begin
if({TimeH,TimeL}==8'h01)begin
state_n=S1;
end
else begin
state_n=IDLE;
end
end
S1:begin
if({TimeH,TimeL}==8'h01)begin
state_n=S2;
end
else begin
state_n=S1;
end
end
S2:begin
if({TimeH,TimeL}==8'h01)begin
state_n=IDLE;
end
else begin
state_n=S2;
end
end
default:
state_n=state_c;
endcase
end
always@(posedge ext_clk_25m or negedge ext_rst_n)
begin
if(!ext_rst_n)begin
times <=8'd00;
end
else if(set_en==1'b1)begin
times <=8'd00;
end
else if(state_c==IDLE)begin
times <=red;
end
else if(state_c==S1)begin
times <=green;
end
else if(state_c==S2)begin
times <=yellow;
end
else ;
end
always@(posedge mclk or negedge ext_rst_n)
begin
if(!ext_rst_n)begin
led <=3'b111;
end
else if(state_c==IDLE)begin
led<=3'b110;
end
else if(state_c==S1)begin
led<=3'b101;
end
else if(state_c==S2)begin
led<=3'b011;
end
else begin
led<=3'b111;
end
end
//計數器模塊高位
always@(posedge mclk or negedge ext_rst_n)
begin
if(!ext_rst_n)begin
TimeH <=times[7:4]; //計數器賦初值
end
else if(set_en==1'b1)begin
TimeH <=times[7:4];
end
else if(cnt_en==1'b1)begin
TimeH <=TimeH;
end
else if({TimeH,TimeL}==8'h00)begin
TimeH <=times[7:4];
end
else if(TimeL==4'h0)begin
TimeH <=TimeH-1'b1;
end
else begin
TimeH <=TimeH;
end
end
//計數器模塊低位
always@(posedge mclk or negedge ext_rst_n)begin
if(!ext_rst_n)begin
TimeL <=times[3:0];
end
else if(set_en==1'b1)begin
TimeL <=times[3:0];
end
else if(cnt_en==1'b1)begin
TimeL <=TimeL;
end
else if({TimeH,TimeL}==8'h00) begin
TimeL <=times[3:0];
end
else if(TimeL==4'h0)begin
TimeL <=4'h9;
end
else begin
TimeL <=TimeL-1'b1;
end
end
endmodule
counter1.v
module counter1(ext_clk_25m,mclk,ext_rst_n,cnt_en,set_en,red,green,yellow,TimeH1,TimeL1,led
);
input ext_clk_25m ;//系統時鐘
input mclk ;//時鐘信號
input ext_rst_n ;//復位信號
input cnt_en ;//使能信號
input set_en ;
input [7:0] red ;
input [7:0] green ;
input [7:0] yellow ;
output reg[3:0] TimeH1 ;//兩位數碼管顯示高位
output reg[3:0] TimeL1 ;//兩位數碼管顯示低位
output reg[5:3] led ;
reg [2:0] state_c ;
reg [2:0] state_n ;
reg [7:0] times1 ;
parameter [2:0] IDLE = 3'b001,
S1 = 3'b010,
S2 = 3'b100;
//狀態切換模塊
always@(posedge ext_clk_25m or negedge ext_rst_n)
begin
if(!ext_rst_n)begin
state_c <=IDLE;
end
else if(set_en==1'b1)begin
state_c <=IDLE;
end
else if(cnt_en==1'b1)begin
state_c <= state_c;
end
else begin
state_c <= state_n;
end
end
//狀態切換
always@(*)begin
case(state_c)
IDLE:begin
if({TimeH1,TimeL1}==8'h01)begin
state_n=S1;
end
else begin
state_n=IDLE;
end
end
S1:begin
if({TimeH1,TimeL1}==8'h01)begin
state_n=S2;
end
else begin
state_n=S1;
end
end
S2:begin
if({TimeH1,TimeL1}==8'h01)begin
state_n=IDLE;
end
else begin
state_n=S2;
end
end
default:
state_n=state_c;
endcase
end
always@(posedge ext_clk_25m or negedge ext_rst_n)
begin
if(!ext_rst_n)begin
times1 <=8'd00;
end
else if(set_en==1'b1)begin
times1 <=8'd00;
end
else if(state_c==IDLE)begin
times1 <=green;
end
else if(state_c==S1)begin
times1 <=yellow;
end
else if(state_c==S2)begin
times1 <=red;
end
else ;
end
always@(posedge mclk or negedge ext_rst_n)
begin
if(!ext_rst_n)begin
led <=3'b111;
end
else if(state_c==IDLE)begin
led<=3'b101;
end
else if(state_c==S1)begin
led<=3'b011;
end
else if(state_c==S2)begin
led<=3'b110;
end
else begin
led<=3'b111;
end
end
//計數器模塊高位
always@(posedge mclk or negedge ext_rst_n)begin
if(!ext_rst_n)begin
TimeH1 <=times1[7:4]; //計數器賦初值
end
else if(set_en==1'b1)begin
TimeH1<=TimeH1;
end
else if(cnt_en==1'b1)begin
TimeH1<=TimeH1;
end
else if({TimeH1,TimeL1}==8'h00)begin
TimeH1 <=times1[7:4]; //計數器賦初值
end
else if(TimeL1==4'h0)begin
TimeH1 <=TimeH1-1'b1;
end
else begin
TimeH1 <=TimeH1;
end
end
//計數器模塊低位
always@(posedge mclk or negedge ext_rst_n)
begin
if(!ext_rst_n)begin
TimeL1 <=times1[3:0];
end
else if(set_en==1'b1)begin
TimeL1 <=times1[3:0];
end
else if(cnt_en==1'b1)begin
TimeL1 <=TimeL1;
end
else if({TimeH1,TimeL1}==8'h00)begin
TimeL1 <=times1[3:0];
end
else if(TimeL1==4'h0)begin
TimeL1 <=4'h9;
end
else begin
TimeL1 <=TimeL1-1'b1;
end
end
endmodule
seg.v
module seg(ext_clk_25m,ext_rst_n,seg_en,set_en,set_segh,set_segl,TimeH,TimeL,TimeH1,TimeL1,dtube_cs_n,dtube_data
);
input ext_clk_25m ;//時鐘信號25MHz
input ext_rst_n ;//復位信號
input seg_en ;//使能信號
input set_en ;//設置使能信號
input [ 3:0] set_segh ;//設置信號顯示高位
input [ 3:0] set_segl ;//設置信號顯示高位
input [ 3:0] TimeH ;//兩位輸入高位 [0]
input [ 3:0] TimeL ;//兩位輸入低位 [1]
input [ 3:0] TimeH1 ;//兩位輸入高位 [2]
input [ 3:0] TimeL1 ;//兩位輸入低位 [3]
output [ 3:0] dtube_cs_n ;//段選數據位
output [ 6:0] dtube_data ;//位選數據位
reg [ 3:0] dtube_cs_n ;
reg [ 6:0] dtube_data ;
reg [ 3:0] display_num ;//當前顯示數據
reg [16:0] div_cnt ;//延時計數器計數位
//延時計數器模塊
always@ (posedge ext_clk_25m or negedge ext_rst_n)begin
if(!ext_rst_n) begin
div_cnt <= 8'd0;
end
else if(seg_en==1'b1)begin
div_cnt <= 8'd0;
end
else if(div_cnt==17'd80000)begin
div_cnt <= 8'd0;
end
else begin
div_cnt <= div_cnt+1'b1;
end
end
//顯示當前的數據模塊
always @(posedge ext_clk_25m or negedge ext_rst_n)begin
if(!ext_rst_n)begin
display_num <= 4'h0;
end
else if(div_cnt < 17'd20000)begin
if(set_en==1'b0)begin
display_num <= TimeL;
end
else begin
display_num <=set_segl;
end
end
else if((div_cnt>17'd20000)&(div_cnt <17'd40000))begin
if(set_en==1'b0)begin
display_num <= TimeH;
end
else begin
display_num<=set_segh;
end
end
else if((div_cnt>17'd40000)&(div_cnt < 17'd60000))begin
display_num <=TimeL1;
end
else begin
display_num <=TimeH1;
end
end
//段選數據譯碼模塊(共陰數碼管)
always @(*)begin
if(!ext_rst_n)begin
dtube_data <= 8'h00;
end
else begin
case(display_num)
4'h0: dtube_data <= 8'h3f;
4'h1: dtube_data <= 8'h06;
4'h2: dtube_data <= 8'h5b;
4'h3: dtube_data <= 8'h4f;
4'h4: dtube_data <= 8'h66;
4'h5: dtube_data <= 8'h6d;
4'h6: dtube_data <= 8'h7d;
4'h7: dtube_data <= 8'h07;
4'h8: dtube_data <= 8'h7f;
4'h9: dtube_data <= 8'h6f;
default:dtube_data <= 8'h00;
endcase
end
end
//位選選譯模塊
always @(posedge ext_clk_25m or negedge ext_rst_n)begin
if(!ext_rst_n) begin
dtube_cs_n <= 4'b1111;
end
else if(seg_en==1'b1)begin
dtube_cs_n <= 4'b1111;
end
else if(div_cnt <= 17'd20000)begin
dtube_cs_n <= 4'b1110;
end
else if((div_cnt>17'd20000)&(div_cnt <=17'd40000))begin
dtube_cs_n <= 4'b1101;
end
else if((div_cnt>17'd40000)&(div_cnt <=17'd60000)&(set_en==1'b0))begin
dtube_cs_n <= 4'b1011;
end
else if((div_cnt>17'd60000)&(div_cnt <=17'd80000)&(set_en==1'b0))begin
dtube_cs_n <=4'b0111;
end
else begin
dtube_cs_n <= 4'b1111;
end
end
endmodule
設置時間模塊
module set(ext_clk_25m,ext_rst_n,set_en,key_upup,key_down,key_entr,red,yellow,green,led,times1,times2
);
input ext_clk_25m;
input ext_rst_n;
input set_en;
input key_down;
input key_entr;
input key_upup;
output reg[7:0] red;
output reg[7:0] green;
output reg[7:0] yellow;
output reg[3:0] times1;
output reg[3:0] times2;
output reg[7:6] led;
//按鍵抖動判斷邏輯
wire key; //所有的按鍵相與的結果,用於按鍵觸發判斷
reg[3:0]keyr ; //按鍵值key的緩衝寄存器
assign key =key_down&key_entr&key_upup;
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(!ext_rst_n)
keyr <=4'b1111;
else
keyr <={keyr[2:0],key};
end
wire key_neg;
wire key_pos;
assign key_neg=~keyr[2] &keyr [3];//有按鍵被按下
assign key_pos=keyr[2] &~keyr [3];// 有按鍵被釋放
//定時器計數邏輯,用於對按鍵的消抖的判斷
reg [19:0] cnt;
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(!ext_rst_n)begin
cnt <=20'd0;
end
else if(key_pos||key_neg)begin
cnt <=20'd0;
end
else if(cnt <20'd999_999)begin
cnt <= cnt +1'b1;
end
else begin
cnt <=20'd0;
end
end
reg[2:0]key_value_c;
reg[2:0]key_value_n;
//定時採取按鍵值
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
key_value_c <=3'b111;
key_value_n <=3'b111;
end
else begin
key_value_n <=key_value_c;
if(cnt ==20'd999_999)begin
key_value_c <={key_upup,key_entr,key_down};
end
else;
end
end
wire [2:0]key_press;
assign key_press=key_value_n & ~key_value_c;
always@(*)begin
if(ext_rst_n==1'b0)begin
times1=red[7:4];
end
else begin
times1=times[7:4];
end
end
always@(*)begin
if(ext_rst_n==1'b0)begin
times2=red[3:0];
end
else begin
times2=times[3:0];
end
end
//顯示控制模塊
reg [1:0]state;
//設置狀態
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
state<=2'b00;
end
else if((key_press[1]==1'b1)&set_en==1'b1)begin
if(state==2'b10)begin
state<=2'b00;
end
else begin
state<=state+1'b1;
end
end
end
reg [7:0]times;
//顯示的狀態模塊
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(!ext_rst_n)begin
times<=red;
end
else if(state==2'b00)begin
times<=red;
end
else if(state==2'b01)begin
times<=green;
end
else if(state==2'b10)begin
times<=yellow;
end
else begin
times<=8'h00;
end
end
//led指示模式模式
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(!ext_rst_n)begin
led <=2'b11;
end
else if(state==2'b00&set_en==1'b1)begin
led<=2'b10;
end
else if(state==2'b01&set_en==1'b1)begin
led<=2'b01;
end
else if(state==2'b10&set_en==1'b1)begin
led<=2'b00;
end
else begin
led<=2'b11;
end
end
//按鍵加減控制模塊(低位) 紅
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
red[3:0]<=4'h0;
end
else if(state==2'b00)begin
if(key_press[2]==1'b1)begin
if(red==8'h99) begin
red[3:0]<=4'h0;
end
else if(red[3:0]==4'h9)begin
red[3:0]<=4'h0;
end
else begin
red[3:0]<=red[3:0]+1'b1;
end
end
else if(key_press[0]==1'b1)begin
if(red==8'h00)begin
red[3:0] <=4'h9;
end
else if(red[3:0]==4'h0)begin
red[3:0]<=4'h9;
end
else begin
red[3:0]<=red[3:0]-1'b1;
end
end
else begin
red[3:0]<=red[3:0];
end
end
else begin
red[3:0]<=red[3:0];
end
end
//按鍵加減控制模塊(高位) 紅
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
red[7:4]<=4'h2;
end
else if(state==2'b00)begin
if(key_press[2]==1'b1)begin
if(red==8'h99) begin
red[7:4]<=4'h0;
end
else if(red[3:0]==4'h9)begin
red[7:4]<=red[7:4]+1'b1;
end
else begin
red[7:4]<=red[7:4];
end
end
else if(key_press[0]==1'b1)begin
if(red==8'h00)begin
red[7:4]<=4'h9;
end
else if(red[3:0]==4'h0)begin
red[7:4] <=red[7:4]-1'b1;
end
else begin
red[7:4] <=red[7:4];
end
end
else begin
red[7:4]<=red[7:4];
end
end
else begin
red[7:4]<=red[7:4];
end
end
//按鍵加減控制模塊(低位) 綠
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
green[3:0]<=4'h5;
end
else if(state==2'b01)begin
if(key_press[2]==1'b1)begin
if(green==8'h99) begin
green[3:0]<=4'h0;
end
else if(green[3:0]==4'h9)begin
green[3:0]<=4'h0;
end
else begin
green[3:0]<=green[3:0]+1'b1;
end
end
else if(key_press[0]==1'b1)begin
if(green==8'h00)begin
green[3:0] <=4'h9;
end
else if(green[3:0]==4'h0)begin
green[3:0]<=4'h9;
end
else begin
green[3:0]<=green[3:0]-1'b1;
end
end
else begin
green[3:0]<=green[3:0];
end
end
else begin
green[3:0]<=green[3:0];
end
end
//按鍵加減控制模塊(高位) 綠
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
green[7:4]<=4'h1;
end
else if(state==2'b01)begin
if(key_press[2]==1'b1)begin
if(green==8'h99) begin
green[7:4]<=4'h0;
end
else if(green[3:0]==4'h9)begin
green[7:4]<=green[7:4]+1'b1;
end
else begin
green[7:4]<=green[7:4];
end
end
else if(key_press[0]==1'b1)begin
if(green==8'h00)begin
green[7:4]<=4'h9;
end
else if(green[3:0]==4'h0)begin
green[7:4] <=green[7:4]-1'b1;
end
else begin
green[7:4] <=green[7:4];
end
end
else begin
green[7:4]<=green[7:4];
end
end
else begin
green[7:4]<=green[7:4];
end
end
//按鍵加減控制模塊(低位) 黃
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
yellow[3:0]<=4'h5;
end
else if(state==2'b10)begin
if(key_press[2]==1'b1)begin
if(yellow==8'h99) begin
yellow[3:0]<=4'h0;
end
else if(yellow[3:0]==4'h9)begin
yellow[3:0]<=4'h0;
end
else begin
yellow[3:0]<=yellow[3:0]+1'b1;
end
end
else if(key_press[0]==1'b1)begin
if(yellow==8'h00)begin
yellow[3:0] <=4'h9;
end
else if(yellow[3:0]==4'h0)begin
yellow[3:0]<=4'h9;
end
else begin
yellow[3:0]<=yellow[3:0]-1'b1;
end
end
else begin
yellow[3:0]<=yellow[3:0];
end
end
else begin
yellow[3:0]<=yellow[3:0];
end
end
//按鍵加控制模塊(高位) 黃
always@(posedge ext_clk_25m or negedge ext_rst_n)begin
if(ext_rst_n==1'b0)begin
yellow[7:4]<=4'h0;
end
else if(state==2'b10)begin
if(key_press[2]==1'b1)begin
if(yellow==8'h99) begin
yellow[7:4]<=4'h0;
end
else if(yellow[3:0]==4'h9)begin
yellow[7:4]<=yellow[7:4]+1'b1;
end
else begin
yellow[7:4]<=yellow[7:4];
end
end
else if(key_press[0]==1'b1)begin
if(yellow==8'h00)begin
yellow[7:4]<=4'h9;
end
else if(yellow[3:0]==4'h0)begin
yellow[7:4] <=yellow[7:4]-1'b1;
end
else begin
yellow[7:4] <=yellow[7:4];
end
end
else begin
yellow[7:4]<=yellow[7:4];
end
end
else begin
yellow[7:4]<=yellow[7:4];
end
end
endmodule
設計頂層模塊的RTL圖