在涉及到ASCII等编码的时候,往往需要使用十进制计数器来进行测试,下面分享一种简单的测试用的10进制计数器程序:
reg[3:0] dec_cnt[3:0];
//10进制加法器
always @(posedge clk or negedge rstn) begin
if(!rstn) begin
dec_cnt[0] <= 4'b0;
dec_cnt[1] <= 4'b0;
dec_cnt[2] <= 4'b0;
dec_cnt[3] <= 4'b0;
end
else begin
if(dec_cnt[0]==9) //0
dec_cnt[0] <= 0;
else
dec_cnt[0] <= dec_cnt[0] +1;
if(dec_cnt[0]==9) //10
if(dec_cnt[1]==9)
dec_cnt[1] <= 0 ;
else
dec_cnt[1] <= dec_cnt[1] +1;
if(dec_cnt[0]==9) //100
if(dec_cnt[1]==9)
if(dec_cnt[2]==9)
dec_cnt[2] <= 0;
else
dec_cnt[2] <= dec_cnt[2]+1;
if(dec_cnt[0]==9) //1000
if(dec_cnt[1]==9)
if(dec_cnt[2]==9)
if(dec_cnt[3] == 9)
dec_cnt[3] <= 0;
else
dec_cnt[3] <= dec_cnt[3] +1;
end
end
这种写法就是简单方便直接上手测试,但是涉及到高位的时,if逻辑判断链条会很长,可能不利于高速时序要求。