ET创芯网论坛(EETOP)

找回密码

  登录   注册  

搜帖子
汽车电子资料大全(下载奖励300信元)
查看: 985|回复: 19

[求助] 关于跨时钟域单bit信号的同步问题

[复制链接]
发表于 2019-4-10 23:03:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 IC.Michael 于 2019-4-11 09:09 编辑

贴几篇相关的帖子:
【1】FPGA中亚稳态——让你无处可逃
【2】FPGA中三种同步设计比较
【3】Verilog基本电路设计之一(单bit跨时钟域同步

【1】主要介绍了关于亚稳态相关的内容,以及采用级联触发器降低亚稳态的几率;【2】中提到了几种跨时钟域单bit同步的方法,其中窄脉冲同步到慢时钟域,通过握手方法实现,并且该窄脉冲作为第一级FF的时钟,这个想法比较新颖;【3】中论坛大神(杰克淡定)详细介绍了单bit同步的方法,也是基于握手方法,但是基于将前级信号展宽为电平信号的方法。上述几篇文章,获益匪浅。但是有一点还是不是特别清楚,如果采样的时候刚好信号在时钟沿变化,那么容易产生亚稳态,为什么说亚稳态之后,数据一定是会稳定到0或1呢?如果对亚稳态的值进行决断的时候产生一个错误的值,这个值被后级采样了,这个错误不会一直传递下去吗?


异步电平信号同步到另一个时钟域,只能保证信号最终一定能同步过去,对于哪个周期才能稳定同步过去则是不确定的,这是基本常识。如果说信号同步过去的时间快慢会影响你的电路功能,说明你这里应该使用同步设计,而不是异步设计。为啥说是肯定会同步过去呢???




发表于 2019-4-11 10:15:25 | 显示全部楼层
这个课程,相信能回答你的问题。
https://ke.qq.com/course/386895?tuin=64ce5e2a
回复 支持 1 反对 0

使用道具 举报

发表于 2019-4-11 10:20:34 | 显示全部楼层
只有脉冲信号你才会采错,电平信号一直都很稳定,怎么能采错呢,只是你会在电平边沿那里不稳定,但是经过打了几拍以后就把这个不稳定因素消除了,这样你就能采到稳定的信号了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-11 13:43:10 | 显示全部楼层


   
chindis 发表于 2019-4-11 10:20
只有脉冲信号你才会采错,电平信号一直都很稳定,怎么能采错呢,只是你会在电平边沿那里不稳定,但是经过打 ...



多谢回复,还是有一点不太明白。信号变化窗口内时钟沿到来,此时采样信号会不稳定,会有 亚稳态现象,但是打了几拍之后为什么能够消除呢?如果此时亚稳态采样到一个错误的值,这个值不会继续传递到后级吗,为什么还能够正确同步过来呢?
回复 支持 反对

使用道具 举报

发表于 2019-4-11 13:57:22 | 显示全部楼层


   
IC.Michael 发表于 2019-4-11 13:43
多谢回复,还是有一点不太明白。信号变化窗口内时钟沿到来,此时采样信号会不稳定,会有 亚稳态现象,但 ...


设计中使用的任何寄存器都会指定一个建立和保持时间,在时钟上升沿前后的这个时间内输入数据被禁止发生任何变动。所有器件中的寄存器都要指定这个精确参数,就是为了防止数据信号两次变化发生的时间间隔太过靠近,从而导致其输出陷入亚稳态。
当需要在两个时钟域传输信号的时候,需要考虑一个重要的问题是:是否需要采样从一个时钟域传输到另一个时钟域的这个信号的每一个值?通过思考这个问题可以发现,在跨时钟边界存在跨时钟域传输数据允许丢失部分采样值和跨时钟域传输数据不允许丢失任何信号采样值两种情况,而且确认设计到底属于哪种情况则变得非常重要。
对于第一种情况来说,没有必要去采样每一个值,但是需要注意的是被采样的值必需要确保精确度;而在第二种情况中,一个跨时钟域信号必需要被正确识别,或者说在其允许发生改变之前必须被识别。这两种情况中,跨时钟域信号都需要被同步到其接收时钟域之中。
最常见的同步器就是使用两级寄存器,即使用寄存器打两拍的方式进行同步。所谓的同步器就是采样一个异步信号,采样输出能够同步到本地或采样时钟的模块

8b13632762d0f70368c9895903fa513d2697c538.jpg
回复 支持 反对

使用道具 举报

发表于 2019-4-11 14:26:43 | 显示全部楼层
我也是学习中。说一下自己的理解。如果有不对的地方,还请大神指出。
1.第一级触发器违反建立或者保持时间,导致Q输亚稳态,一般亚稳态不会持续超过一个周期,自己就会稳定下来,稳定到1或者0。这样第二级触发器在采样时,只会采集到第一级触发器稳定之后的状态。如果频率特别高,那么第一级触发器还没有稳定,第二级触发器采集到一个未知状态,第二级触发器也会输出亚稳态。
2.第一级触发器的输入信号不能是一直违反时序要求的吧,打几拍,输入稳定了,第一级触发器就没有亚稳态了吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-11 21:40:06 | 显示全部楼层


   
chindis 发表于 2019-4-11 13:57
设计中使用的任何寄存器都会指定一个建立和保持时间,在时钟上升沿前后的这个时间内输入数据被禁止发生任 ...


多谢回复~ 这里我有一点想不明白,就是采样得到的数据2开始为亚稳态,为什么在随后的时钟沿一定采集到“1”呢?如果之后时钟沿在其亚稳态的时候采错了一个值,比如理应是“1”,但是错采成了“0”呢,而且数据持续的时钟周期是1个,如果是多个周期的话我能理解,一定能采样到,但是一个周期的话,不会存在存在的情况吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-11 21:44:36 | 显示全部楼层


   
轩辕紫冀 发表于 2019-4-11 14:26
我也是学习中。说一下自己的理解。如果有不对的地方,还请大神指出。
1.第一级触发器违反建立或者保持时间 ...


我有点绕不过来弯了,就是想不明白,【一般亚稳态不会持续超过一个周期 自己就会稳定下来 稳定到1或者0】,稳定到0或者1,都有可能?那比如输出0,稳定到了1,或者输入1,稳定到了0,这不就出错了吗?比如这个信号只有一个周期脉宽,上升沿在时钟上升沿窗口内,下降沿也在时钟上升沿窗口内,如果发生了亚稳态,下一个时钟还能正确采样吗?下一个时钟沿到来的时候,这个信号早就没了啊。还是想不明白,前级亚稳态,后面打几拍就能缓解亚稳态,哎。
回复 支持 反对

使用道具 举报

发表于 2019-4-12 13:02:00 | 显示全部楼层


   
IC.Michael 发表于 2019-4-11 21:40
多谢回复~ 这里我有一点想不明白,就是采样得到的数据2开始为亚稳态,为什么在随后的时钟沿一定采集到“1 ...


所以,我们一般要先把脉冲信号展宽,然后再去打拍同步,这个描述不够具体,如果脉冲展宽后是不是就可以理解了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-13 08:51:49 | 显示全部楼层


   
chindis 发表于 2019-4-12 13:02
所以,我们一般要先把脉冲信号展宽,然后再去打拍同步,这个描述不够具体,如果脉冲展宽后是不是就可以理 ...


如果是这样的话,有点明白了,信号展宽后,就算刚开始信号跳变的时候存在亚稳态,但是在之后的clk沿一定存在满足setup/hold的采样,也就一定能同步过来。多谢您的指点。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

关闭

小黑屋| 关于我们| 联系我们| 在线咨询 |  ET创芯网 ( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2019-12-15 16:50 , Processed in 0.067532 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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