0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

芯片设计小经验—异步电路跨时钟域小结

冬至子 来源:数字IC自修室 作者:L.L. 2023-05-18 11:24 次阅读

关于异步电路,是面试里被问的最多的部分,网上也有很多很多的总结文章。这里有两个原因。第一,这是一种比较成熟的通用设计手段,电路结构也比较经典。第二是因为这块设计在项目中真的很重要。

那么为什么重要呢? 从功能角度来说,比起同步系统中各种功能的设计可以通过eda验证保证,异步交互模块处理跨时钟信号传输这个功能是没办法通过rtl仿真用例测试其正确性的。而在物理实现的时候,因为异步电路时钟没有固定相位关系,无法像同步电路一样通过时钟关系去约束路径走线,也需要被特别对待。

这些特殊性决定了异步电路需要设计人员对其结构功能有一个更正确和完善的认识,这样才能在rtl阶段及时识别需求,做好review工作,并通过cdc检视设计的正确性,以及对后端物理实现人员提出合理的约束需求。当然有条件的还是需要做fpga原型验证和后仿,来增加设计的可靠性,因为cdc和代码review这些都仅仅是从设计本身的角度进行确认,只有fpga和eda后仿真可以提供一个真实运行结果的确认。

这篇文章将分几个角度概括性地归纳总结异步电路跨时钟域一些比较重要的概念和处理方法,后续文章中将对不同的跨时钟域同步器结构再一一进行展开介绍。因为这些概念和处理方法已经被翻来覆去总结过无数次了,可能大家也都很熟悉了。

1

异步电路的界定

异步电路不能根据时钟是否同源来界定,时钟之间没有确定的相位关系是唯一准则。 比如同一个时钟源如果经过pll分出33MHZ和50MHZ 的两个时钟,他们的相位关系会时钟变化的变化,那么他们驱动的电路也属于异步电路。

2

跨时钟域处理不当的危害和解决方案

1. 亚稳态

异步系统交互时会出现亚稳态,如果直接使用亚稳态信号,或者因处理不当导致其传播,会使整个系统结果不可预期。合理的异步电路同步器设计可以有效降低亚稳态出现的概率,但其是不可能被完全消除的。而亚稳态出现的概率和器件工艺,时钟频率,信号频率和同步器结构都有关系。

解决方案:

  1. 使用合适的同步器,包括但不限于:1bit多级打拍同步(电平信号,脉冲信号),多bit格雷码转换打拍同步,多bit Dmux同步,握手协议同步,异步FIFO同步。
  2. 若是打拍同步,需要根据工艺以及频率选择合适的打拍级数

2. 毛刺

异步系统交互时如果上游模块有信号毛刺,不当的处理会使其传播并被下游异步模块采样,可能会导致下游功能错误。同步系统内有setup检查保证毛刺在被采样前有足够的时间的消除,而异步电路只能靠设计保证毛刺不被传播和误采样。

解决方案:

  1. 上游待同步信号寄存器输出过滤毛刺
  2. 待同步信号的输出寄存器和同步器之间不能存在任何组合逻辑

3. 漏采、误采

异步系统交互时如果处理不当,可能会造成下游对传播信号漏采样或者误采样。

解决方案:

  1. 明确系统间的频率关系,采用合适的同步器
  2. 单bit待采集信号要进行位宽确认和拓展(快->慢),一般要保证信号宽度大于采集时钟加上一个margin(依据经验而定,来源是采集时钟域的setup,hold,skew,jitter等)
  3. 多bit信号不能直接打拍采样,通过格雷码或者握手,异步fifo等其他结构的同步器。

4. 再汇集

有相互关系的上游信号经过了异步处理之后到达另一个时钟域的时间是不可预期的,那么他们再次汇聚的时候会出现与预期功能不一致的错误。这又被称为再收敛(reconverge)错误。

解决方案:

  1. 多个1bit信号待同步时,必须在原时钟域完成组合汇聚和寄存处理,不能分别同步到另一个时钟域再汇聚
  2. 同源信号复制跨时钟域时,需要先进行跨时钟域,再进行复制。

5. 异步复位

如果处理不当或者没有做好相应时序检查,复位功能会有问题。

解决方案:

  1. 采用稳定的复位逻辑单元(普遍使用经典的异步复位同步释放结构)
  2. 做好recovery-removal检查
  3. 保证对接模块的异步复位不相互影响

3

异步电路跨时钟域的设计检查

  1. 明确设计规格,做好代码review
  2. 做好Clock-Domain-Crossing(CDC)检查
  3. 有条件的做好FPGA,EMU和后仿检查确认

以上便是异步电路跨时钟域设计的一些总结,希望抛转引玉,得到更多有价值的经验谈。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21736

    浏览量

    603435
  • EDA工具
    +关注

    关注

    4

    文章

    267

    浏览量

    31794
  • 异步电路
    +关注

    关注

    2

    文章

    48

    浏览量

    11103
  • 同步器
    +关注

    关注

    1

    文章

    98

    浏览量

    14637
  • FIFO存储
    +关注

    关注

    0

    文章

    103

    浏览量

    5980
收藏 人收藏

    评论

    相关推荐

    时钟控制信号传输设计方案

    clk2的时钟。当clk1比clk2的频率高时,则称模块1(相对于模块2)为快时钟,而模块2位为慢时钟
    发表于 10-16 15:47 1152次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>控制信号传输设计方案

    如何处理好FPGA设计中时钟问题?

    第二级寄存器的延拍,所以意义是不大的。02方法二:异步双口 RAM处理多 bit 数据的时钟,一般采用异步双口 RAM。假设我们现在有一
    发表于 09-22 10:24

    探寻FPGA中三种时钟处理方法

    第二级寄存器的延拍,所以意义是不大的。02方法二:异步双口 RAM处理多 bit 数据的时钟,一般采用异步双口 RAM。假设我们现在有一
    发表于 10-20 09:27

    三种时钟处理的方法

    ,所以意义是不大的。  方法二:异步双口RAM  处理多bit数据的时钟,一般采用异步双口RAM。假设我们现在有一个信号采集平台,ADC
    发表于 01-08 16:55

    三种FPGA界最常用的时钟处理法式

    的数据(多bit)。在这种类似的场景中,我们便可以使用异步双口RAM来做时钟处理。先利用ADC芯片提供的60MHz
    发表于 02-21 07:00

    FPGA初学者的必修课:FPGA时钟处理3大方法

    的数据(多bit)。在这种类似的场景中,我们便可以使用异步双口RAM来做时钟处理。先利用ADC芯片提供的60MHz
    发表于 03-04 09:22

    FPGA时钟处理简介

    (10)FPGA时钟处理1.1 目录1)目录2)FPGA简介3)Verilog HDL简介4)FPGA时钟
    发表于 02-23 07:47

    调试FPGA时钟信号的经验总结

    1、时钟信号的约束写法  问题一:没有对设计进行全面的约束导致综合结果异常,比如没有设置异步时钟分组,综合器对
    发表于 11-15 14:47

    cdc路径方案帮您解决时钟难题

    这一章介绍一下CDC也就是时钟可能存在的一些问题以及基本的时钟处理方法。
    的头像 发表于 11-30 06:29 7198次阅读
    cdc路径方案帮您解决<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>难题

    如何解决异步FIFO时钟亚稳态问题?

    时钟的问题:前一篇已经提到要通过比较读写指针来判断产生读空和写满信号,但是读指针是属于读时钟的,写指针是属于写
    的头像 发表于 09-05 14:29 6064次阅读

    关于FPGA中时钟的问题分析

    时钟问题(CDC,Clock Domain Crossing )是多时钟设计中的常见现象。在FPGA领域,互动的异步
    发表于 08-19 14:52 3359次阅读

    Verilog电路设计之单bit时钟同步和异步FIFO

    FIFO用于为匹配读写速度而设置的数据缓冲buffer,当读写时钟异步时,就是异步FIFO。多bit的数据信号,并不是直接从写时钟同步到读
    发表于 01-01 16:48 1293次阅读

    时钟电路设计总结

    时钟操作包括同步时钟操作和异步
    的头像 发表于 05-18 09:18 746次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>电路</b>设计总结

    FPGA时钟处理方法(二)

    上一篇文章已经讲过了单bit时钟的处理方法,这次解说一下多bit的时钟方法。
    的头像 发表于 05-25 15:07 1041次阅读
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>处理方法(二)

    异步电路时钟处理

    异步电路不能根据时钟是否同源来界定,时钟之间没有确定的相位关系是唯一准则。
    的头像 发表于 06-27 10:32 1036次阅读