hys601406441 发表于 2014-5-5 15:58:49

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 ”?

hys601406441 发表于 2014-5-6 09:21:21

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
以上理解是否正确?

花涛 发表于 2014-9-16 17:14:58

你也是用的ZX-2的开发板吗

whyme 发表于 2014-9-16 21:44:47

什么语言学的比较快呢,VHDL还是Verilog?
页: [1]
查看完整版本: ZX2开发板第五讲数码管显示代码问题