xyzabc 发表于 2014-7-7 18:00:19

---- 大大们分析一下,为什么脉冲计数不对?----

仿真没发现问题,pulse由内部产生也是对的,但从外部输入脉冲计数总是不对,甚至内部产生的脉冲输出后再输入,脉冲计数就错了,
而且总是少很多(超过10%),也不是固定的。最初以为频率太高,波形畸变严重,但将频率降到很低也不行,太令人费解了

reg work_state;
reg num;

always @( posedge clk or negedge nRST )
begin
        if( !nRST )
        begin
                work_state <= 1'b0;
                num <= 24'h0;
        end
        else
        begin
                case( work_state )       
               
                        WORK_IDLE:
                                if( pulse )
                                        work_state <= 1'b0;
                                else
                                begin
                                        work_state <= 1'b1;
                                        num <= num + 1'b1;
                                end
                               
                        WORK_IN:
                                if( pulse )
                                        work_state <= 1'b0;
                                else
                                        work_state <= 1'b1;               
                endcase
        end
end

ix1982 发表于 2014-7-7 18:23:53

先把异步信号变成同步信号

RUANJI 发表于 2014-7-7 19:34:52

吐槽一些,你都用了parameter来定义状态了,你的状态转移还那么写。

xyzabc 发表于 2014-7-7 20:29:07

RUANJI 发表于 2014-7-7 19:34
吐槽一些,你都用了parameter来定义状态了,你的状态转移还那么写。

谢谢回复。就2个状态,所以没写参数,这个是为找问题简化了的,最后确定问题就在这里,不知道为什么,

xyzabc 发表于 2014-7-7 20:36:46

ix1982 发表于 2014-7-7 18:23
先把异步信号变成同步信号

谢谢,通过把异步变同步后问题解决了,但这样增加了判断周期。实际上我是用来通过脉冲同步读数据的,如果脉冲很窄的话,又会有新的问题。为什么上面的会出错呢?
页: [1]
查看完整版本: ---- 大大们分析一下,为什么脉冲计数不对?----