数字电路跨时钟域处理-单比特(1)

今天讨论一下数字电路设计中非常重要的跨时钟域问题,这篇文章仅考虑单比特信号的同步。

问题描述与名词定义:

一个在源时钟域下的输入信号,想要同步到接收时钟域,常见的作法有哪些呢?

1.两级触发器同步

也叫做电平同步器,源时钟域下的输入信号送到接收时钟域,被接收时钟域连续寄存两次,俗称“打两拍”。

应用场景:慢时钟域(源时钟域)进入快时钟域(接收时钟域)。

输入信号格式:电平信号,意思是信号宽度可能不止一个时钟周期。

输出信号格式:电平信号。

注意事项: 输入信号宽度>接收时钟周期+接收寄存器hold要求。为保险起见(*1),输入信号的宽度要≥2倍接收时钟周期。定性的理解,即是认为接收时钟一定要比源时钟快很多才安全。

2.边沿检测器

边沿检测器是基于电平同步器的,可以检测输入信号的上升沿或下降沿。相比于电平同步器,边沿检测器进行了三次寄存,也可以说是“打三拍”。通过比较第二级和第三级得到输入信号的边沿信息。

应用场景:慢时钟域(源时钟域)进入快时钟域(接收时钟域)。

输入信号格式:电平信号。

输出信号格式:单脉冲信号。

注意事项:输入信号宽度>接收时钟周期+接收寄存器hold要求。为保险起见,输入信号的宽度要≥2倍接收时钟周期。

3.脉冲同步器

脉冲同步器用于将源时钟域的脉冲信号同步到接收时钟域。从构造原理上讲,脉冲同步器=取反电路+边沿检测器。通过取反电路,将间隔的输入脉冲转换为电平信号,再监测该电平信号的边沿。

应用场景:快时钟域(源时钟域)进入慢时钟域(接收时钟域)(*2)

输入信号格式:连续的,相互之间有一定间隔的单脉冲信号。

输出信号格式:连续的,相互之间有一定间隔的单脉冲信号。

注意事项:

①输入信号的脉冲,必须是单脉冲!

②输入的单脉冲的间隔≥2倍接收时钟周期。

暂停一下,进入思考环节。请一定批判地看待,欢迎把大家的想法拿出来交流,并指出我的错误。

(*1)前两种电平同步电路为什么对输入信号的宽度有这样的要求呢?我认为是为了要“确保第一级寄存器能够正确地采样到输入信号,以防止信号跨时钟域后发生电平值得改变,从而导致功能错误”

众所周知,在两级寄存器同步电路中,第一级寄存器是很有可能出现亚稳态的,我们加入的第二级寄存器,就是希望第一级寄存器的亚稳态能够在第二级寄存器采样之前结束,以一个稳定的状态被第二级寄存器寄存,从而在第二级寄存器输出稳态数据。

可是,这并不保证数据能够被正确采样。

想象这样一种情况:输入信号是1,被第一级寄存器采样后产生亚稳态,并且在第二级寄存器采样之前回到稳定态,但是,第一级寄存器并没有稳定到1,而是稳定到了0。

这种情况下,我们消除亚稳态了没有?消除了。

但数据同步过去后正确吗?不正确。从功能的角度讲,相当于本次输入信号没有同步到接收时钟域。

如果输入信号过短,那么整个过程到此就结束,芯片的功能不正常。

上述情况很容易发生在接收时钟频率快于源时钟但频率差不明显的情况下。比如源时钟=100MHz,接收时钟=110MHz。

再上图中,接收时钟域下的以及寄存器有两次采样机会,但无一例外地出现了亚稳态,亚稳态就可能丢失数据(稳定到0)。

如果输入信号长一些,使得第二次采样满足hold时间要求了,那么至少有一次可以采样到正确信号。如下图。

 由此得出输入信号电平宽度限制:输入信号宽度>接收时钟周期+接收寄存器hold要求

为什么不把第一次采样沿向右挪一挪,再让其满足setup要求呢?因为hold要求一般比setup要求时间更长,只要hold满足了,setup一定满足。

(*2)如果说脉冲同步器可以用于快时钟域到满时钟域,那能不能用在满时钟域到快时钟域,有什么限制条件?

个人认为,是可以的,并且只要是单脉冲即可,因为脉冲间隔一定是大于两倍接收时钟周期的。

在下一篇文章我们继续讨论单比特数据跨时钟的其他方法,比如结绳法,以及握手法等。

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值