电子说
关于异步电路,是面试里被问的最多的部分,网上也有很多很多的总结文章。这里有两个原因。第一,这是一种比较成熟的通用设计手段,电路结构也比较经典。第二是因为这块设计在项目中真的很重要。
那么为什么重要呢? 从功能角度来说,比起同步系统中各种功能的设计可以通过eda验证保证,异步交互模块处理跨时钟域信号传输这个功能是没办法通过rtl仿真用例测试其正确性的。而在物理实现的时候,因为异步电路时钟没有固定相位关系,无法像同步电路一样通过时钟关系去约束路径走线,也需要被特别对待。
这些特殊性决定了异步电路需要设计人员对其结构功能有一个更正确和完善的认识,这样才能在rtl阶段及时识别需求,做好review工作,并通过cdc检视设计的正确性,以及对后端物理实现人员提出合理的约束需求。当然有条件的还是需要做fpga原型验证和后仿,来增加设计的可靠性,因为cdc和代码review这些都仅仅是从设计本身的角度进行确认,只有fpga和eda后仿真可以提供一个真实运行结果的确认。
这篇文章将分几个角度概括性地归纳总结异步电路跨时钟域一些比较重要的概念和处理方法,后续文章中将对不同的跨时钟域同步器结构再一一进行展开介绍。因为这些概念和处理方法已经被翻来覆去总结过无数次了,可能大家也都很熟悉了。
1
异步电路的界定
异步电路不能根据时钟是否同源来界定,时钟之间没有确定的相位关系是唯一准则。 比如同一个时钟源如果经过pll分出33MHZ和50MHZ 的两个时钟,他们的相位关系会时钟变化的变化,那么他们驱动的电路也属于异步电路。
2
跨时钟域处理不当的危害和解决方案
1. 亚稳态 :
异步系统交互时会出现亚稳态,如果直接使用亚稳态信号,或者因处理不当导致其传播,会使整个系统结果不可预期。合理的异步电路同步器设计可以有效降低亚稳态出现的概率,但其是不可能被完全消除的。而亚稳态出现的概率和器件工艺,时钟频率,信号频率和同步器结构都有关系。
解决方案:
2. 毛刺 :
异步系统交互时如果上游模块有信号毛刺,不当的处理会使其传播并被下游异步模块采样,可能会导致下游功能错误。同步系统内有setup检查保证毛刺在被采样前有足够的时间的消除,而异步电路只能靠设计保证毛刺不被传播和误采样。
解决方案:
3. 漏采、误采 :
异步系统交互时如果处理不当,可能会造成下游对传播信号漏采样或者误采样。
解决方案:
4. 再汇集 :
有相互关系的上游信号经过了异步处理之后到达另一个时钟域的时间是不可预期的,那么他们再次汇聚的时候会出现与预期功能不一致的错误。这又被称为再收敛(reconverge)错误。
解决方案:
5. 异步复位 :
如果处理不当或者没有做好相应时序检查,复位功能会有问题。
解决方案:
3
异步电路跨时钟域的设计检查
以上便是异步电路跨时钟域设计的一些总结,希望抛转引玉,得到更多有价值的经验谈。
全部0条评论
快来发表一下你的评论吧 !