为了达到六个数码管同时被点亮的效果,则要使数码管位选信号变化频率在1000hz左右,也即sel的变化频率在1000hz左右
为了使频率达到1000hz,好多同学选择了用分频器的方式,当然这种方法得到的是准确的1000hz。我用了另外一种方式,也可以点亮六个数码管,虽然频率不是准确的1000hz,但却很方便。
设置一个计数器【31:0】count
这个计数器的最低位count【0】它的计数累加频率就是时钟频率50mhz
而第2位count【1】的累加频率为(50m/2^1)hz
它的第N+1位的计数频率为(50m/2^N)hz
由此可的
第17位count【16】的频率约为760hz,也可以达到点亮数码管的效果
下面附上程序供大家验证
module smg(clk,rst_n,seg,sel);
input clk;
input rst_n;
output reg[2:0]sel;
output reg[7:0]seg;
reg [31:0]count;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
seg<=8'b1111_1111;
sel<=3'b111;
count<=0;
end
else
begin
count<=count+1;
sel<=count[31:16];//计数频率约为760hz
case(sel)
0:begin seg<=8'b1111_1001;end
1:begin seg<=8'b1010_0100;end
2:begin seg<=8'b1011_0000;end
3:begin seg<=8'b1001_1001;end
4:begin seg<=8'b1001_0010;end
5:begin seg<=8'b1000_0010;end
default:begin sel<=0;end
endcase
end
end
endmodule
|