ZX2开发板第五讲数码管显示代码问题
看完了第五讲的课,自己在原先开发板代码的基础上写了个时钟的程序,发现显示有问题。检查发现如下代码有问题:
(display_ctrl.v103行)
//把转换完的bcd码缓冲到寄存器中
always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
bcd_buf_flag <= 1'b0;
else if(change_bcd_cnt == Change_Cycle-1 && change_flag == 1'b1)
bcd_buf_flag <= 1'b1;
else bcd_buf_flag <= 1'b0;
把红色部分的“ -1 ”去掉后显示正常。
请问是否原先代码中就不应该“ -1 ”? laokai 发表于 2014-5-6 01:42
这里减一操作是没错的用意是让change_bcd_cnt == Change_Cycle 时bcd_buf_flag 标志拉高,并且此时刻bcd码 ...
嗯。
但是我们定义Change_Cycle = 8‘d39,在change_bcd_cnt == Change_Cycle - 1时,并没有完成bcd码的转换,它只完成了最后一次的移位,还没有进行“加3”这一动作的判断。
bcd码转换代码如下:
always @( posedge sclk or negedge rst_n )
if ( rst_n == 1'b0 )
bcd_byte <= 24'd0;
else if ( change_flag == 1'b1 && change_bcd_cnt == 1'b0 )
bcd_byte <= { bcd_byte,buf_count };
else if ( change_flag == 1'b1 && change_bcd_cnt == 1'b1 )
begin
if ( bcd_byte >= 4'd5 )
bcd_byte <= bcd_byte + 4'd3;
if ( bcd_byte >= 4'd5 )
bcd_byte <= bcd_byte + 4'd3;
if ( bcd_byte >= 4'd5 )
bcd_byte <= bcd_byte + 4'd3;
if ( bcd_byte >= 4'd5 )
bcd_byte <= bcd_byte + 4'd3;
if ( bcd_byte >= 4'd5 )
bcd_byte <= bcd_byte + 4'd3;
if (bcd_byte >= 4'd5 )
bcd_byte <= bcd_byte + 4'd3;
end
else
bcd_byte <= 24'd0;
在change_bcd_cnt == 38(即change_bcd_cnt == 1’b0)时只是移位,没有加3.
所以不应该减1
以上理解是否正确?
你也是用的ZX-2的开发板吗 什么语言学的比较快呢,VHDL还是Verilog?
页:
[1]
