/**************************************功能介绍***********************************
Date : 2023年7月29日15:34:16
Author : Alegg xy.
Version : 2.0
Description: 计时1s模块
*********************************************************************************/
//---------<模块及端口声名>------------------------------------------------------
module time_count(
input clk ,
input rst_n ,
output reg flag //计满1s标志
);
//---------<参数定义>---------------------------------------------------------
parameter MAX_TIME = 26'd50_000_000;
//---------<内部信号定义>-----------------------------------------------------
reg [25:0] cnt ;
wire add_cnt ;
wire end_cnt ;
//1s计数器
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= 25'd0;
end
else if(add_cnt)begin
if(end_cnt)begin
cnt <= 25'd0;
end
else begin
cnt <= cnt + 1'b1;
end
end
end
assign add_cnt = 1'b1;
assign end_cnt = add_cnt && cnt == MAX_TIME - 1'd1;
//flag信号定义,1为计满
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
flag <= 1'b0;
end
else if(end_cnt)begin
flag <= 1'b1;
end
else begin
flag <= 1'b0;
end
end
endmodule
static_seg
/**************************************功能介绍***********************************
Date :2023年7月29日15:36:20
Author : Alegg xy.
Version : 2.0
Description: 数码管控制模块
*********************************************************************************/
//---------<模块及端口声名>------------------------------------------------------
module static_seg(
input clk ,
input rst_n ,
input flag ,
output reg [5:0] sel ,//位选
output reg [7:0] seg //段选
);
//---------<参数定义>---------------------------------------------------------
reg [3:0] num;//数码管显示十六进制1-f
//---------<内部信号定义>-----------------------------------------------------
//sel定义,数码管0亮,1灭
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
sel <= 6'b111111;//复位时数码管全灭
end
else begin
sel <= 6'b000000;//其余情况数码管亮
end
end
//每记满0.5s,num+1
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
num <= 4'h0;
end
else if(flag) begin
num <= num + 1'h1;
end
else begin
num <= num;
end
end
//段选信号定义
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
seg <= 8'b0000_0000;
end
else begin
case (num)
4'h0:seg <= 8'b1100_0000;
4'h1:seg <= 8'b1111_1001;
4'h2:seg <= 8'b1010_0100;
4'h3:seg <= 8'b1011_0000;
4'h4:seg <= 8'b1001_1001;
4'h5:seg <= 8'b1001_0010;
4'h6:seg <= 8'b1000_0010;
4'h7:seg <= 8'b1111_1000;
4'h8:seg <= 8'b1000_0000;
4'h9:seg <= 8'b1001_0000;
4'hA:seg <= 8'b1000_1000;
4'hB:seg <= 8'b1000_0011;
4'hC:seg <= 8'b1100_0110;
4'hD:seg <= 8'b1010_0001;
4'hE:seg <= 8'b1000_0110;
4'hF:seg <= 8'b1000_1110;
default: seg <= 8'b1100_0000;
endcase
end
end
endmodule