module Timer_24hours (CLOCK_50,KEY,HEX5,HEX4,HEX3,HEX2,HEX1,HEX0);
output [6:0] HEX5,HEX4,HEX3,HEX2,HEX1,HEX0; //輸出顯示
input CLOCK_50; //50MHz時鐘
input [0:0]KEY; //復位
wire [7:0] H1,M1,S1;
timer1 UUT0 (CLOCK_50,KEY[0],H1,M1,S1);
//Call By in Order
//module timer2 (Clk50M, Clr, H, M, S);
//解碼顯示
hex_7seg h0 (.hex(H1[7:4]),.seg(HEX5));
hex_7seg h1 (.hex(H1[3:0]),.seg(HEX4));
hex_7seg h2 (.hex(M1[7:4]),.seg(HEX3));
hex_7seg h3 (.hex(M1[3:0]),.seg(HEX2));
hex_7seg h4 (.hex(S1[7:4]),.seg(HEX1));
hex_7seg h5 (.hex(S1[3:0]),.seg(HEX0));
endmodule
// Ch10 timer2.v
// 計時器, 產生 0:0:0 ~ 23:59:59 計時值
module timer2 (Clk50M, Clr, H, M, S);
input Clk50M,Clr; // 一位元輸入
output [7:0] H,M,S; // 八位元輸出
reg [7:0] H,M,S; // 宣告為暫存器資料
reg [25:0] Q; // 宣告為暫存器資料
reg Clk1; // 宣告為暫存器資料
wire Clk2,Clk3,Clk4,Clk5; // 宣告為連線資料
// 除頻得 1 Hz
always@ (posedge Clk10M)
begin
if (!Clr || Q == 49_999_999) // 除 50M
Q = 0;
else
Q = Q + 1;
Clk1 = Q[25]; // Clk1 = 1 Hz
end
// 呼叫各模組例證
mod10 mod10_1 (Clk1,Clr,S[3:0],Clk2);
mod6 mod6_1 (Clk2,Clr,S[7:4],Clk3);
mod10 mod10_2 (Clk3,Clr,M[3:0],Clk4);
mod6 mod6_2 (Clk4,Clr,M[7:4],Clk5);
mod24 mod24 (Clk5,Clr,H[7:0]);
endmodule
// Ch10 mod24.v
// mod-24 計數器
module mod24 (Clk_i, Clr, Q);
input Clk_i,Clr; // 一位元輸入
output [7:0] Q; // 四位元輸出
reg [7:0] Q; // 宣告為暫存器資料
// 除 24 (0 ~ 23)
always@ (posedge Clk_i or negedge Clr)
if (!Clr || Q == 8'h23) // 等於 23
Q = 0;
else if (Q[3:0] == 4'h9) // 等於 X9
begin
Q[7:4] = Q[7:4] + 1;
Q[3:0] = 0;
end
else
Q[3:0] = Q[3:0] + 1;
endmodule
// Ch10 mod6.v
// mod-6 計數器
module mod6 (Clk_i, Clr, Q, Clk_o);
input Clk_i,Clr; // 一位元輸入
output [3:0] Q; // 四位元輸出
output Clk_o; // 一位元輸出
reg [3:0] Q; // 宣告為暫存器資料
// 除 6 (0 ~ 5)
always@ (posedge Clk_i or negedge Clr)
if (!Clr || Q == 5) // 除 6
Q = 0;
else
Q = Q + 1;
assign Clk_o = ~(~Q[3] & Q[2] & ~Q[1] & Q[0]); // = 5 時
endmodule
// Ch10 mod10.v
// mod-10 (BCD) 計數器
module mod10 (Clk_i, Clr, Q, Clk_o);
input Clk_i,Clr; // 一位元輸入
output [3:0] Q; // 四位元輸出
output Clk_o; // 一位元輸出
reg [3:0] Q; // 宣告為暫存器資料
// 除 10 (0 ~ 9)
always@ (posedge Clk_i or negedge Clr)
if (!Clr || Q == 9) // 除 10
Q = 0;
else
Q = Q + 1;
assign Clk_o = ~(Q[3] & ~Q[2] & ~Q[1] & Q[0]); // = 9 時
endmodule
沒有留言:
張貼留言