---- 大大们分析一下,为什么脉冲计数不对?----
仿真没发现问题,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 先把异步信号变成同步信号 吐槽一些,你都用了parameter来定义状态了,你的状态转移还那么写。 RUANJI 发表于 2014-7-7 19:34
吐槽一些,你都用了parameter来定义状态了,你的状态转移还那么写。
谢谢回复。就2个状态,所以没写参数,这个是为找问题简化了的,最后确定问题就在这里,不知道为什么, ix1982 发表于 2014-7-7 18:23
先把异步信号变成同步信号
谢谢,通过把异步变同步后问题解决了,但这样增加了判断周期。实际上我是用来通过脉冲同步读数据的,如果脉冲很窄的话,又会有新的问题。为什么上面的会出错呢?
页:
[1]