接 【异步电路碎碎念2】 —— 跨异步引发的电路危机_尼德兰的喵的博客-CSDN博客_异步电路的危害
学习了跨异步的基础概念和引发问题后,继续学习下应该如何处理跨异步的场景。
查询了一些资料后,总结起来跨异步处理的大原则有以下几个。
寄存器输出
跨异步信号推荐是寄存器输出,具体来讲脉冲信号必须由寄存器输出,电平信号根据实际使用场景可以进行选择,当然我觉得吧如果面积不瓶颈的话,都采用寄存器输出是完全没问题的。
脉冲信号不能通过组合逻辑输出必须是寄存器的干净输出,因为组合逻辑在电路中必然存在毛刺,这个毛刺一旦被同步器采集到那么就是一个错误的有效信息传往下级模块,这是应当尽量避免的。
电平信号因为电路本身对跳转沿不敏感,因此对于寄存器输出这项并没有严格的要求。
维持足够时间
源时钟域的信号如果想被目的时钟域时钟采样到(同步器时钟必然为目的时钟),那么信号需要维持足够长的时间。这个时间我看到了几处说法,自己采纳的是T+Tset+Thold+Tskew即目的时钟周期+建立时间+保持时间+最大时间抖动,这么要求的原因当然是保证目的时钟可以顺利的采样到源脉冲信号。
当然了实际应用中,我记得是直接要求至少2T的维持时间。如果源信号宽度不够的话,是需要进行信号展宽的。