OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1554|回复: 3

[ALTERA] 《原子教你玩FPGA》269页异步时钟同步不理解

[复制链接]

30

主题

188

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2014-4-3
在线时间
74 小时
发表于 2023-9-10 22:14:24 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 无量寿经 于 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]此图采样到缓慢上升沿时,采样结果抖动波形。



ZD.jpg

最佳答案

查看完整内容[请看2#楼]

尤其是当有多个地方用到这个值的时候,有些判断照这个值是0,有些是1,岂不乱套了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2016

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5622
金钱
5622
注册时间
2018-10-21
在线时间
1592 小时
发表于 2023-9-10 22:14:25 | 显示全部楼层
尤其是当有多个地方用到这个值的时候,有些判断照这个值是0,有些是1,岂不乱套了
回复

使用道具 举报

3

主题

2016

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5622
金钱
5622
注册时间
2018-10-21
在线时间
1592 小时
发表于 2023-9-13 19:06:31 | 显示全部楼层
打两拍的目的是为了让这个值确定性为0或者为1,而不继续往后级传递不确定的值
回复

使用道具 举报

3

主题

2016

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5622
金钱
5622
注册时间
2018-10-21
在线时间
1592 小时
发表于 2023-9-13 19:08:42 | 显示全部楼层
针对你第二个问题,打两拍的目的是消除亚稳态,而你这个示意图看上去需要做类似消抖的处理,和消除亚稳态是两个概念了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 23:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表