本帖最后由 无量寿经 于 2023-9-10 22:58 编辑
//同步SDRAM初始化完成信号 always @(posedge clk_50m or negedge rst_n) begin if(!rst_n) begin init_done_d0 <= 1'b0; init_done_d1 <= 1'b0; end else begin init_done_d0 <= sdram_init_done; init_done_d1 <= init_done_d0; // 用init_done_d1判断是否初始化完成 end end
我知道这段代码是通过打2拍实现步时钟信号同步,但始终不明白,如果直接采样,即使采样时钟上升沿撞上数据跳变沿,采样结果可能是0,也可能是1,0的话后面写计数器不启动,1则立即启动写计数器,看起来也没啥问题,即使打2拍,当采样时钟上升沿撞上数据跳变沿,采样结果同样可能是0,也可能是1,好像也没真正起啥作用,如果不使用这段代码到底会有什么后果?也就是说采样异步时钟域信号时不打拍有什么后果?
另外,当高速时钟采样慢速上升沿或下降沿时,采样结果抖动怎么处理?比如DS18B20长线驱动时,波形上升沿和下降沿被长线的线间电容牵制导致波形边沿变化缓慢 ,采用打2拍方式能否有用?
[size=13.3333px]此图采样到缓慢上升沿时,采样结果抖动波形。
|