實現的效果:
(1)、能夠自動倒計時,初始值可以在程序中設置;
(2)、能夠通過按鍵改變初始值(秒、分、時都可以);
(3)、可以根據時鐘進行相應的LED燈閃爍;
相應參數:
(1)、使用芯片:Cyclone IV EP4CE10F17C8N
(2)、輸入時鐘:50MHz
首先我們先來看一看設計流程圖(從左到右):
輸入:(1)、時鐘輸入;(2)、按鍵輸入;(3)、復位鍵輸入;
模塊:(1)鎖相環模塊;(2)、按鍵轉換模塊;(3)、計數模塊;(4)、譯碼模塊;(5)、位選模塊;(6)、時鐘閃爍模塊;
輸出:(1)、位選;(2)、段選;(3)、LED
設計思路:
(1)、首先我們將輸入的時鐘通過鎖相環,(50MHz->50MHz),以此來獲得一個更加穩定的時鐘;
(2)、我們將按鍵的值傳入按鍵轉換模塊,將鍵值轉換爲,對秒的加or減,分的加or減,時的加or減;
(3)、然後將相應的值傳入計數模塊來改變計數的值;
(4)、然後將相應的計數值傳入譯碼模塊,以此來獲得數碼管需要的段選值;
(5)、通過1KHz的時鐘來位選,顯示時鐘到數碼管上;
(6)、將計數值輸入到LED燈模塊,根據相應的要求進行閃爍;
硬件設計:
段選是低電平有效,那麼相應的數字轉換爲數碼管的顯示就如下:
1:1111_1001;
2:1010_0100;
3:1011_0000;
4:1001_1001;
5:1001_0010;
6:1000_0010;
7:1111_1000;
8:1000_0000;
9:1001_0000;
我們發現位選模塊是通過PNP三極管來控制的,所以低電平時有效。
程序源碼:
(1)、鎖相環,鎖相環通過如下的IP核創建即可,這裏不再詳細介紹。(鎖相環可以去除掉)。
(2)、按鍵轉換模塊
module key_set(
input clk,
input reset,
input [2:0] key,
output reg [1:0] count, //定義對秒、分、時的控制
output reg [1:0] key_choose //定義控制加、減
);
reg [31:0] cnt;
reg clk_Hz;
//產生一個5Hz的時鐘,用來檢測按鍵的按下,這樣可以去除抖動帶來的誤差
always@(posedge clk or negedge reset)
begin
if(!reset)
begin
cnt <= 32'd0;
clk_Hz <= 1'b0;
end
else if(cnt == 32'd5000_000)
begin
clk_Hz <= ~clk_Hz;
cnt <= 32'd0;
end
else
begin
cnt <= cnt + 32'd1;
end
end
reg key_flag;
//鍵值的轉換
always@(posedge clk_Hz or negedge reset)
begin
if(!reset)
begin
key_flag <= 1'b1;
key_choose <= 2'b00;
count <= 2'b00;
end
else if(key_flag && key!=3'b111)
begin
case(key)
3'b110:
begin
count <= count+2'b1;
key_flag <= 1'b0;
end
3'b101:
begin
key_choose <= 2'b10;
key_flag <= 1'b0;
end
3'b011:
begin
key_choose <= 2'b11;
key_flag <= 1'b0;
end
default:
begin
key_choose <= 2'b00;
key_flag <= 1'b1;
end
endcase
end
else if(key == 3'b111)
begin
key_flag <= 1'b1;
key_choose <= 2'b00;
end
else
begin
key_choose <= 2'b00;
key_flag <= 1'b1;
end
end
endmodule
count:代表的是選擇秒、分、時;
choose:代表的加or減;
(3)、計數模塊
module count(
input clk,
input reset,
input [1:0]choose,
input [1:0]count,
output [3:0] count_miao_ge,
output [2:0] count_miao_shi,
output [3:0] count_fen_ge,
output [2:0] count_fen_shi,
output [3:0] count_shi_ge,
output [1:0] count_shi_shi
);
reg [31:0]cnt_1;
reg flag_1_second;
//該模塊用來控制加減的速度變化
always@(posedge clk or negedge reset)
begin
if(!reset)
begin
cnt_1 <= 32'd0;
flag_1_second <= 1'b0;
end
else if(cnt_1 == 32'd1200_0000)
begin
flag_1_second <= 1'b1;
cnt_1 <= 32'd0;
end
else
begin
flag_1_second <= 1'b0;
cnt_1 <= cnt_1 + 32'd1;
end
end
reg [31:0] cnt;
reg [3:0] count_miao_ge_reg;
reg [2:0] count_miao_shi_reg;
reg [3:0] count_fen_ge_reg;
reg [2:0] count_fen_shi_reg;
reg [3:0] count_shi_ge_reg;
reg [1:0] count_shi_shi_reg;
assign count_miao_ge = count_miao_ge_reg; //秒的個位
assign count_miao_shi = count_miao_shi_reg;//秒的十位
assign count_fen_ge = count_fen_ge_reg;//分的個位
assign count_fen_shi = count_fen_shi_reg;//分的十位
assign count_shi_ge = count_shi_ge_reg;//時的個位
assign count_shi_shi = count_shi_shi_reg;//時的十位
always@(posedge clk or negedge reset)
begin
if(!reset)
begin
cnt <= 32'd0;
count_miao_ge_reg <= 4'd5;
count_miao_shi_reg <= 3'd4;
count_fen_ge_reg <= 4'd6;
count_fen_shi_reg <= 3'd5;
count_shi_ge_reg <= 4'd8;
count_shi_shi_reg <= 2'd1;
end
//當計滿一秒並且秒的個位小於0時,秒的個位減一
else if(cnt == 32'd5000_0000 && count_miao_ge_reg>4'd0 && count == 2'b00)
begin
count_miao_ge_reg <= count_miao_ge_reg - 4'd1;
cnt <= 32'd0;
end
//當計滿一秒並且秒的個位等於0時,秒的十位減一,秒的個位變九
else if(cnt == 32'd5000_0000 && count_miao_ge_reg==4'd0 && count_miao_shi_reg>3'd0 && count == 2'b00)
begin
count_miao_shi_reg <= count_miao_shi_reg - 3'd1;
count_miao_ge_reg <= 4'd9;
cnt <= 32'd0;
end
//當計滿一秒,秒到達00並且分的個位大於0時,分的個位減1
else if(cnt == 32'd5000_0000 && count_miao_ge_reg==4'd0 && count_miao_shi_reg==3'd0 && count_fen_ge_reg>4'd0 && count == 2'b00)
begin
count_fen_ge_reg <= count_fen_ge_reg - 4'd1;
count_miao_shi_reg <= 3'd5;
count_miao_ge_reg <= 4'd9;
cnt <= 32'd0;
end
//當計滿一秒,秒到達00並且分的個位等於0時,分的十位減1
else if(cnt == 32'd5000_0000 && count_miao_ge_reg==4'd0 && count_miao_shi_reg==3'd0 && count_fen_ge_reg==4'd0 && count_fen_shi_reg > 3'd0 && count == 2'b00)
begin
count_fen_shi_reg <= count_fen_shi_reg - 3'd1;
count_fen_ge_reg <= 4'd9;
count_miao_shi_reg <= 3'd5;
count_miao_ge_reg <= 4'd9;
cnt <= 32'd0;
end
//當計滿一秒,秒到達00,分等於00時,時的個位>0,時的個位減一
else if(cnt == 32'd5000_0000 && count_miao_ge_reg==4'd0 && count_miao_shi_reg==3'd0 && count_fen_ge_reg==4'd0 && count_fen_shi_reg ==3'd0 && count_shi_ge_reg >4'd0 && count == 2'b00)
begin
count_shi_ge_reg <= count_shi_ge_reg - 4'd1;
count_fen_shi_reg <= 3'd5;
count_fen_ge_reg <= 4'd9;
count_miao_shi_reg <= 3'd5;
count_miao_ge_reg <= 4'd9;
cnt <= 32'd0;
end
//當計滿一秒,秒到達00,分等於00時,時的個位等於0時,時的十位>0,時的十位減一
else if(cnt == 32'd5000_0000 && count_miao_ge_reg==4'd0 && count_miao_shi_reg==3'd0&& count_fen_ge_reg==4'd0 && count_fen_shi_reg ==3'd0 && count_shi_ge_reg == 4'd0 && count_shi_shi_reg > 2'd0 && count_shi_shi_reg< 2'd2 && count == 2'b00)
begin
count_shi_shi_reg <= count_shi_shi_reg - 2'd1;
count_shi_ge_reg <= 4'd9;
count_fen_shi_reg <= 3'd5;
count_fen_ge_reg <= 4'd9;
count_miao_shi_reg <= 3'd5;
count_miao_ge_reg <= 4'd9;
cnt <= 32'd0;
end
//當計滿一秒,秒到達00,分等於00時,時等於00,所有變回初值
else if(cnt == 32'd5000_0000 && count_miao_ge_reg==4'd0 && count_miao_shi_reg==3'd0 && count_fen_ge_reg==4'd0 && count_fen_shi_reg ==3'd0 && count_shi_ge_reg == 4'd0 && count_shi_shi_reg == 2'd0 && count == 2'b00)
begin
count_shi_shi_reg <= 2'd2;
count_shi_ge_reg <= 4'd3;
count_fen_shi_reg <= 3'd5;
count_fen_ge_reg <= 4'd9;
count_miao_shi_reg <= 3'd5;
count_miao_ge_reg <= 4'd9;
cnt <= 32'd0;
end
/**用按鍵進行秒的控制加**/
else if(count == 2'b01 && choose == 2'b10 && flag_1_second && count_miao_ge_reg < 4'd9 )
begin
count_miao_ge_reg <= count_miao_ge_reg + 4'd1;
end
else if(count == 2'b01 && choose == 2'b10 && flag_1_second && count_miao_ge_reg==4'd9 && count_miao_shi_reg<3'd5)
begin
count_miao_shi_reg <= count_miao_shi_reg + 3'd1;
count_miao_ge_reg <= 4'd0;
end
else if(count == 2'b01 && choose == 2'b10 && flag_1_second && count_miao_ge_reg==4'd9 && count_miao_shi_reg==3'd5)
begin
count_miao_shi_reg <= 3'd0;
count_miao_ge_reg <= 4'd0;
end
/**用按鍵進行秒的控制減**/
else if(count == 2'b01 && choose == 2'b11 && flag_1_second && count_miao_ge_reg>4'd0 )
begin
count_miao_ge_reg <= count_miao_ge_reg - 4'd1;
end
else if(count == 2'b01 && choose == 2'b11 && flag_1_second && count_miao_ge_reg==4'd0 && count_miao_shi_reg>3'd0)
begin
count_miao_shi_reg <= count_miao_shi_reg - 3'd1;
count_miao_ge_reg <= 4'd9;
end
else if(count == 2'b01 && choose == 2'b11 && flag_1_second && count_miao_ge_reg==4'd0 && count_miao_shi_reg==3'd0)
begin
count_miao_shi_reg <= 3'd5;
count_miao_ge_reg <= 4'd9;
end
/**用按鍵進行分的控制加**/
else if(count == 2'b10 && choose == 2'b10 && flag_1_second && count_fen_ge_reg<4'd9)
begin
count_fen_ge_reg <= count_fen_ge_reg + 4'd1;
end
else if(count == 2'b10 && choose == 2'b10 && flag_1_second && count_fen_ge_reg==4'd9 && count_fen_shi_reg < 3'd5)
begin
count_fen_shi_reg <= count_fen_shi_reg + 3'd1;
count_fen_ge_reg <= 4'd0;
end
else if(count == 2'b10 && choose == 2'b10 && flag_1_second && count_fen_ge_reg==4'd9)
begin
count_fen_shi_reg <= 3'd0;
count_fen_ge_reg <= 4'd0;
end
/**用按鍵進行分的控制減**/
else if(count == 2'b10 && choose == 2'b11 && flag_1_second && count_fen_ge_reg> 4'd0)
begin
count_fen_ge_reg <= count_fen_ge_reg - 4'd1;
end
else if(count == 2'b10 && choose == 2'b11 && flag_1_second && count_fen_ge_reg== 4'd0 && count_fen_shi_reg > 3'd0 )
begin
count_fen_shi_reg <= count_fen_shi_reg - 3'd1;
count_fen_ge_reg <= 4'd9;
end
else if(count == 2'b10 && choose == 2'b11 && flag_1_second && count_fen_ge_reg== 4'd0 && count_fen_shi_reg ==3'd0)
begin
count_fen_shi_reg <= 3'd5;
count_fen_ge_reg <= 4'd9;
end
/**用按鍵進行時的控制加**/
else if(count == 2'b11 && choose == 2'b10 && flag_1_second && count_shi_ge_reg < 4'd9 && count_shi_shi_reg < 2'd2)
begin
count_shi_ge_reg <= count_shi_ge_reg + 4'd1;
end
else if(count == 2'b11 && choose == 2'b10 && flag_1_second && count_shi_ge_reg == 4'd9 && count_shi_shi_reg < 2'd2)
begin
count_shi_shi_reg <= count_shi_shi_reg + 2'd1;
count_shi_ge_reg <= 4'd0;
end
else if(count == 2'b11 && choose == 2'b10 && flag_1_second && count_shi_ge_reg < 4'd3 && count_shi_shi_reg == 2'd2)
begin
count_shi_ge_reg <= count_shi_ge_reg + 4'd1;
end
else if(count == 2'b11 && choose == 2'b10 && flag_1_second && count_shi_ge_reg == 4'd3 && count_shi_shi_reg == 2'd2)
begin
count_shi_shi_reg <= 2'd0;
count_shi_ge_reg <= 4'd0;
end
/**用按鍵進行時的控制減**/
else if(count == 2'b11 && choose == 2'b11 && flag_1_second && count_shi_ge_reg >4'd0 )
begin
count_shi_ge_reg <= count_shi_ge_reg - 4'd1;
end
else if(count == 2'b11 && choose == 2'b11 && flag_1_second && count_shi_ge_reg == 4'd0 && count_shi_shi_reg > 2'd0)
begin
count_shi_shi_reg <= count_shi_shi_reg - 2'd1;
count_shi_ge_reg <= 4'd9;
end
else if(count == 2'b11 && choose == 2'b11 && flag_1_second && count_shi_ge_reg == 4'd0 && count_shi_shi_reg == 2'd0)
begin
count_shi_shi_reg <= 2'd2;
count_shi_ge_reg <= 4'd3;
end
else if(count == 2'b00)
begin
cnt <= cnt + 32'd1;
end
else
begin
cnt <= cnt;
end
end
endmodule
(4)、譯碼模塊
module decoding(
input clk,
input reset,
input [3:0] count_miao_ge,
input [2:0] count_miao_shi,
input [3:0] count_fen_ge,
input [2:0] count_fen_shi,
input [3:0] count_shi_ge,
input [1:0] count_shi_shi,
output reg [7:0] code_miao_ge,
output reg [7:0] code_miao_shi,
output reg [7:0] code_fen_ge,
output reg [7:0] code_fen_shi,
output reg [7:0] code_shi_ge,
output reg [7:0] code_shi_shi
);
always@(posedge clk or negedge reset)
begin
if(!reset)
code_miao_ge <= 8'b1111_1111;
else
begin
case(count_miao_ge)
4'd0:code_miao_ge <= 8'b1100_0000;
4'd1:code_miao_ge <= 8'b1111_1001;
4'd2:code_miao_ge <= 8'b1010_0100;
4'd3:code_miao_ge <= 8'b1011_0000;
4'd4:code_miao_ge <= 8'b1001_1001;
4'd5:code_miao_ge <= 8'b1001_0010;
4'd6:code_miao_ge <= 8'b1000_0010;
4'd7:code_miao_ge <= 8'b1111_1000;
4'd8:code_miao_ge <= 8'b1000_0000;
4'd9:code_miao_ge <= 8'b1001_0000;
default:code_miao_ge <= 8'b1011_1111;
endcase
end
end
always@(posedge clk or negedge reset)
begin
if(!reset)
code_miao_shi <= 8'b1111_1111;
else
begin
case(count_miao_shi)
3'd0:code_miao_shi <= 8'b1100_0000;
3'd1:code_miao_shi <= 8'b1111_1001;
3'd2:code_miao_shi <= 8'b1010_0100;
3'd3:code_miao_shi <= 8'b1011_0000;
3'd4:code_miao_shi <= 8'b1001_1001;
3'd5:code_miao_shi <= 8'b1001_0010;
default:code_miao_shi <= 8'b1011_1111;
endcase
end
end
always@(posedge clk or negedge reset)
begin
if(!reset)
code_fen_ge <= 8'b1111_1111;
else
begin
case(count_fen_ge)
4'd0:code_fen_ge <= 8'b0100_0000;
4'd1:code_fen_ge <= 8'b0111_1001;
4'd2:code_fen_ge <= 8'b0010_0100;
4'd3:code_fen_ge <= 8'b0011_0000;
4'd4:code_fen_ge <= 8'b0001_1001;
4'd5:code_fen_ge <= 8'b0001_0010;
4'd6:code_fen_ge <= 8'b0000_0010;
4'd7:code_fen_ge <= 8'b0111_1000;
4'd8:code_fen_ge <= 8'b0000_0000;
4'd9:code_fen_ge <= 8'b0001_0000;
default:code_fen_ge <= 8'b1011_1111;
endcase
end
end
always@(posedge clk or negedge reset)
begin
if(!reset)
code_fen_shi <= 8'b1111_1111;
else
begin
case(count_fen_shi)
3'd0:code_fen_shi <= 8'b1100_0000;
3'd1:code_fen_shi <= 8'b1111_1001;
3'd2:code_fen_shi <= 8'b1010_0100;
3'd3:code_fen_shi <= 8'b1011_0000;
3'd4:code_fen_shi <= 8'b1001_1001;
3'd5:code_fen_shi <= 8'b1001_0010;
default:code_fen_shi <= 8'b1011_1111;
endcase
end
end
always@(posedge clk or negedge reset)
begin
if(!reset)
code_shi_ge <= 8'b1111_1111;
else
begin
case(count_shi_ge)
4'd0:code_shi_ge <= 8'b0100_0000;
4'd1:code_shi_ge <= 8'b0111_1001;
4'd2:code_shi_ge <= 8'b0010_0100;
4'd3:code_shi_ge <= 8'b0011_0000;
4'd4:code_shi_ge <= 8'b0001_1001;
4'd5:code_shi_ge <= 8'b0001_0010;
4'd6:code_shi_ge <= 8'b0000_0010;
4'd7:code_shi_ge <= 8'b0111_1000;
4'd8:code_shi_ge <= 8'b0000_0000;
4'd9:code_shi_ge <= 8'b0001_0000;
default:code_shi_ge <= 8'b1011_1111;
endcase
end
end
always@(posedge clk or negedge reset)
begin
if(!reset)
code_shi_shi <= 8'b1111_1111;
else
begin
case(count_shi_shi)
2'd0:code_shi_shi <= 8'b1100_0000;
2'd1:code_shi_shi <= 8'b1111_1001;
2'd2:code_shi_shi <= 8'b1010_0100;
default:code_shi_shi <= 8'b1011_1111;
endcase
end
end
endmodule
(5)、位選模塊
module sel_show(
input clk,
input reset,
input [7:0] code_miao_ge,
input [7:0] code_miao_shi,
input [7:0] code_fen_ge,
input [7:0] code_fen_shi,
input [7:0] code_shi_ge,
input [7:0] code_shi_shi,
output reg [7:0] led,
output reg [5:0] sel
);
reg [15:0] cnt;
reg flag;
//產生1000Hz的時鐘
always@(posedge clk or negedge reset)
begin
if(!reset)
begin
cnt <=16'd0;
flag <= 1'b0;
end
else if(cnt == 16'd500_00)
begin
cnt <= 16'd0;
flag <= 1'b1;
end
else
begin
cnt <= cnt + 16'd1;
flag <= 1'b0;
end
end
reg [2:0] state;
parameter start = 3'd0; //開始狀態
parameter sel_1 = 3'd1; //位選1
parameter sel_2 = 3'd2; //位選2
parameter sel_3 = 3'd3; //位選3
parameter sel_4 = 3'd4; //位選4
parameter sel_5 = 3'd5; //位選5
parameter sel_6 = 3'd6; //位選6
parameter ending = 3'd7;//結束
always@(posedge clk or negedge reset)
begin
if(!reset)
begin
state <= 3'd0;
sel <= 6'b000_000;
end
else
case(state)
start:
begin
if(flag == 1'b1)
state <= sel_1;
else
state <= state;
end
sel_1:
begin
if(flag == 1'b1)
begin
state <= sel_2;
sel <= 6'b111_110;
led <= code_miao_ge;
end
else
state <= state;
end
sel_2:
begin
if(flag == 1'b1)
begin
state <= sel_3;
sel <= 6'b111_101;
led <= code_miao_shi;
end
else
state <= state;
end
sel_3:
begin
if(flag == 1'b1)
begin
state <= sel_4;
sel <= 6'b111_011;
led <= code_fen_ge;
end
else
state <= state;
end
sel_4:
begin
if(flag == 1'b1)
begin
state <= sel_5;
sel <= 6'b110_111;
led <= code_fen_shi;
end
else
state <= state;
end
sel_5:
begin
if(flag == 1'b1)
begin
state <= sel_6;
sel <= 6'b101_111;
led <= code_shi_ge;
end
else
state <= state;
end
sel_6:
begin
if(flag == 1'b1)
begin
state <= ending;
sel <= 6'b011_111;
led <= code_shi_shi;
end
else
state <= state;
end
ending:
state <= start;
default:
state <= start;
endcase
end
endmodule
通過一個簡單的狀態機來進行位選。
(6)、LED燈閃爍模塊
module led_flash(
input clk,
input reset,
input [3:0] count_miao_ge,
input [2:0] count_miao_shi,
input [3:0] count_fen_ge,
input [2:0] count_fen_shi,
output reg Led
);
reg [31:0] cnt_2Hz;
reg [31:0] cnt_5Hz;
reg clk_2Hz;
reg clk_5Hz;
parameter flash_2Hz = 32'd1250_0000;
parameter flash_5Hz = 32'd5000_000;
//產生2Hz的時鐘5000_0000/2/2 = 1250_0000
always@(posedge clk or negedge reset)
begin
if(!reset)
begin
cnt_2Hz <= 32'd0;
end
else if(cnt_2Hz == flash_2Hz)
begin
clk_2Hz <= ~clk_2Hz;
cnt_2Hz <= 32'd0;
end
else
cnt_2Hz <= cnt_2Hz + 32'd1;
end
//產生5Hz的時鐘5000_0000/5/2 = 500_0000
always@(posedge clk or negedge reset)
begin
if(!reset)
begin
cnt_5Hz <= 32'd0;
end
else if(cnt_5Hz == flash_5Hz)
begin
clk_5Hz <= ~clk_5Hz;
cnt_5Hz <= 32'd0;
end
else
cnt_5Hz <= cnt_5Hz + 32'd1;
end
//判斷相應的範圍並且選取相應的時鐘。
always@(posedge clk or negedge reset)
begin
if(!reset)
begin
Led <= 1'b0;
end
else if(count_fen_shi == 3'd5 && count_fen_ge == 4'd9 && count_miao_shi == 3'd5 && count_miao_ge >= 4'd0 && count_miao_ge < 4'd5)
Led <= clk_2Hz;
else if(count_fen_shi == 3'd5 && count_fen_ge == 4'd9 && count_miao_shi == 3'd5 && count_miao_ge >= 4'd5 && count_miao_ge <= 4'd9)
Led <= clk_5Hz;
else
Led <= 1'b0;
end
endmodule
(7)、頂層函數
module top(
input clk,
input reset,
input [2:0]key,
output [7:0] led,
output [5:0] sel,
output Led
);
wire clk_50MHz;
wire locked;
pll u1(
.inclk0(clk),
.c0(clk_50MHz),
.locked(locked)
);
wire [1:0] count;
wire [1:0] key_choose;
key_set u2(
.clk(clk_50MHz),
.reset(reset),
.key(key),
.count(count),
.key_choose(key_choose)
);
wire [3:0] count_miao_ge;
wire [2:0] count_miao_shi;
wire [3:0] count_fen_ge;
wire [2:0] count_fen_shi;
wire [3:0] count_shi_ge;
wire [1:0] count_shi_shi;
count u3(
.clk(clk_50MHz),
.reset(reset),
.choose(key_choose),
.count(count),
.count_miao_ge(count_miao_ge),
.count_miao_shi(count_miao_shi),
.count_fen_ge(count_fen_ge),
.count_fen_shi(count_fen_shi),
.count_shi_ge(count_shi_ge),
.count_shi_shi(count_shi_shi)
);
wire [7:0] code_miao_ge;
wire [7:0] code_miao_shi;
wire [7:0] code_fen_ge;
wire [7:0] code_fen_shi;
wire [7:0] code_shi_ge;
wire [7:0] code_shi_shi;
decoding u4(
.clk(clk_50MHz),
.reset(reset),
.count_miao_ge(count_miao_ge),
.count_miao_shi(count_miao_shi),
.count_fen_ge(count_fen_ge),
.count_fen_shi(count_fen_shi),
.count_shi_ge(count_shi_ge),
.count_shi_shi(count_shi_shi),
.code_miao_ge(code_miao_ge),
.code_miao_shi(code_miao_shi),
.code_fen_ge(code_fen_ge),
.code_fen_shi(code_fen_shi),
.code_shi_ge(code_shi_ge),
.code_shi_shi(code_shi_shi)
);
sel_show u5(
.clk(clk_50MHz),
.reset(reset),
.code_miao_ge(code_miao_ge),
.code_miao_shi(code_miao_shi),
.code_fen_ge(code_fen_ge),
.code_fen_shi(code_fen_shi),
.code_shi_ge(code_shi_ge),
.code_shi_shi(code_shi_shi),
.led(led),
.sel(sel)
);
led_flash u6(
.clk(clk),
.reset(reset),
.count_miao_ge(count_miao_ge),
.count_miao_shi(count_miao_shi),
.count_fen_ge(count_fen_ge),
.count_fen_shi(count_fen_shi),
.Led(Led)
);
endmodule
下載代碼之後,我們通過Signal Tap進行簡單的仿真。
觀察這個我們可以看到程序運行正確。