FPGA动态数码管显示固定的数字
FPGA Cyclone IV E : EP4CE10F17C8
系统时钟:50MHz(20ns)
计时模块
数码管位选刷新计时
module time_count(
input clk,
input rst,
output reg flag
);
parameter MAX_NUM=23'd2500_000;//计数50ms
reg [22:0] cnt;
always @(posedge clk or negedge rst)begin//每50ms,flag置1
if(!rst)begin
cnt<=0;
flag<=0;
end
else if(cnt<MAX_NUM-1)begin
cnt<=cnt+1'b1;
flag<=0;
end
else begin
cnt<=0;
flag<=1;
end
end
endmodule
数码管显示模块
数码管显示固定数字
module dynamic_smg(
input clk,
input rst,
input flag,
output reg [5:0] wei, //位选
output reg [7:0] duan //段选
);
reg [7:0] num [0:5];
reg [2:0] i;
always @(posedge clk or negedge rst)begin
if(!rst)begin//固定数字
num[0]<=8'b1100_0000;//0
num[1]<=8'b1111_1001;//1
num[2]<=8'b1010_0100;//2
num[3]<=8'b1011_0000;//3
num[4]<=8'b1001_1001;//4
num[5]<=8'b1001_0000;//9
duan<=0;
wei<=6'b011111;//关位选
i<=0;
end
else if(flag==1)//位选移位,刷新显示
if(i>=3'd0 && i<3'd6)begin
wei<={wei[4:0],wei[5]};
duan<=num[i];
i<=i+1;
end
else
i<=0;
end
endmodule
顶层模块
module top_dynamic_smg(
input clk,
input rst,
output [5:0] wei, //位选
output [7:0] duan //段选
);
parameter TIME_SHOW=23'd50_000;
wire flag;
time_count #(.MAX_NUM(TIME_SHOW)) u_time_count(
.clk(clk),
.rst(rst),
.flag(flag)
);
dynamic_smg u_dynamic_smg(
.clk(clk),
.rst(rst),
.flag(flag),
.duan(duan),
.wei(wei)
);
endmodule