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

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

3天内不再提示

你一定要懂的CDC错误

sanyue7758 来源:IC的世界 2023-07-24 17:00 次阅读

本文基于VC_SpyGlass_CDC_UserGuide整理了3种常见的cdc(Clock Domain Crossing)错误。需要注意的是:

•本文描述的跨时钟错误在特定场景下,有些是允许的,甚至有些是正常设计。因此IC设计者想要确认跨时钟错误需要分析应用场景。

•还有一些CDC错误是spyglass 工具无法发现的,因此不能全部依赖工具检查。

•有些项目组为了避免新手对cdc理解不深刻造成bug,对跨时钟设计做了更加严格的规范。例如,下文中的裸跨是不允许存在的。

1、CDC Unsynchronized(没有跨时钟)

没有采用跨时钟模块,即咱们通常说的裸跨,不同时钟域的数据直接互连,会存在亚稳态问题。同步电路会进行STA(静态时序分析)保证setup-hold time满足要求,因此寄存器能够保证正确采样。而不同时钟域的信号之间没有setup-hold time要求,无法保证正确采样。

058b2e18-2a00-11ee-a368-dac502259ad0.png

图5-1 所示为亚稳态的案例,F1是clk_A时钟域的寄存器,F2是clk_B时钟域的寄存器,clk_A和clk_B是异步时钟,寄存器F1的输出信号A发生跳变的时刻有可能与clk_B的上升沿发生重叠,此时对寄存器F2来说,在setup-hold time时间区间内,输入A没有保持稳定,因此寄存器F2输出的B是不确定状态,这就是亚稳态。

解决方案:根据实际场景添加对应的跨时钟模块,例如bit同步器,脉冲跨时钟模块,异步fifo,多比特跨时钟等等。

鸽子解读1

没有跨时钟,不一定就是错误;在一些场景中,为了节约资源不跨时钟是允许的。

下图所示案例:配置模块csr模块产生的配置信号cfg_*_mode是clk1时钟域,直接用于clk2时钟域的逻辑模块。

芯片使用过程中,复位和配置顺序如下:hrst_n先释放--->完成csr模块寄存器配置--->释放srst_n。

在srst_n复位释放后,静态配置cfg_*_mode不再发生改变。这种情况中,功能逻辑模块处于复位状态时,cfg_*_mode发生跳变,这种情况下即使发生了亚稳态也没有影响,因为功能逻辑模块还没允许。

059a3cf0-2a00-11ee-a368-dac502259ad0.png

鸽子解读2:

在部分握手机制的模块中,没有跨时钟,也能保证不会出现亚稳态。

CDC无法识别是否实现握手机制,如果跨时钟模块实现握手机制,即能够保证图5-1中的F2准备采样时信号A已保持稳定,虽然会报错,但是不会出现亚稳态。在多bit的配置信号跨时钟模块中就存在这样的情况。

2、CDC Glitch (毛刺)

简单来说,就是组合逻辑直接跨时钟,组合逻辑会存在glitch,导致glitch被目的时钟采样到,导致出现不期望的信号

解决方案:增加源时钟域寄存器打拍,寄存器输出的信号才跨时钟。

特殊场景:如果图10中的D0或者I1是一个准静态信号(几乎不会跳变的),那么不会产生glitch,也是可以接受的。

05a2f98a-2a00-11ee-a368-dac502259ad0.png05ac66be-2a00-11ee-a368-dac502259ad0.png

Glitches的产生有如下三种场景:

1)同一个bit信号的组合逻辑跨时钟

2)多个源时钟域的信号的组合逻辑跨时钟

3)同一个时钟域的多个源信号的组合逻辑跨时钟

3、CDC-Convergence(跨时钟重新汇聚)

CDC-Convergence会产生不期望的信号组合,从而导致功能异常。

如果多个信号从源时钟域通过不同的跨时钟路径进入目的时钟域,然后这些信号在目的时钟域中又聚合到一起,那么就有可能因为信号的重新聚合导致电路功能上的异常。例如下图7-29和7-28中,x和y的组合(x,y)在同步前只有(1,1)和(0,0)的组合,在同步后出现了(1,0)的组合,还有可能出现(0,1)组合。

如下图7-29和7-28所示,X、X1、Y和Y1 属于clk_a时钟域,delay A和delay B表示不同的延时(走线延时),X3,X4,Y3,Y4属于clk_b时钟域。clk_a和clk_b属于异步时钟。X4和Y4作为输入进行组合逻辑获得O。

假设因为某些原因,x和y的组合(x,y)只会出现2'b00 或者2‘b11的情况。在正确设计过程中,我们期望x4和y4的组合(x4,y4)也只会出现2'b00 或者2‘b11的情况。但是由于不同的跨时钟路径会导致(x4,y4)出现错误组合。见图7-28,由于delay A和delay B的延时不同,导致X2和Y2到达同步器D端口的时间有差异,因此采样后的值X3和Y3可能会出现一个clk_b周期的差异,此时(x3,y3)出现了2‘b10的组合,此组合会传递到(x4,y4)。因此输出的Q可能是不符合预取的值。此为Convergence导致的错误

05b9cd4a-2a00-11ee-a368-dac502259ad0.png05c20686-2a00-11ee-a368-dac502259ad0.png

图8显示了3种汇聚的情况:

case1:同一个源时钟域的信号同步后立即汇聚在组合逻辑

case2:源时钟域信号同步后在目的时钟域打了若干拍后再汇聚。如果当目的时钟域打拍数量过大,例如20级,超过了spyglass 工具默认配置值,此种情况spyglass工具就无法检查出问题了。

case3: 不同源时钟域的信号同步后立即汇聚在组合逻辑

05cd4820-2a00-11ee-a368-dac502259ad0.png





审核编辑:刘清

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

    关注

    31

    文章

    5308

    浏览量

    119975
  • 静态时序分析

    关注

    0

    文章

    28

    浏览量

    9571
  • 时钟域
    +关注

    关注

    0

    文章

    52

    浏览量

    9528
  • CDC技术
    +关注

    关注

    0

    文章

    9

    浏览量

    6852

原文标题:Spyglass:你一定要懂的CDC错误

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    好东西,一定要分享!

    片简单的嵌入式文章,希望有用,,好东西一定要分享。。
    发表于 10-18 22:08

    请问RTC为什么一定要从1970年开始计算?

    为什么RTC一定要从1970年开始计算??
    发表于 07-10 01:00

    请问为什么一定要调用次任务切换?

    左老师:为什么在视频中说如果xTaskResumeAll()没有做任务切换,那么也一定要调用portYIELD_WITHIN_API()做次任务切换?为什么一定要
    发表于 07-15 08:03

    学习编程一定要英语很好吗?

    编程需要大量的英语代码,学习编程的话,不一定要英语非常得好,但是一定要有英语基础,因为现在编程里面大量都是英语代码,但是很多编程都是固定的套路,我们只需要知道个英语代码是什么意思,然后接下来用这种
    发表于 07-01 07:55

    这些LED知识一定要知道

    LED在生活中随处可见,作为嵌入式工程师,这些LED知识一定要知道!——LED的图形标号——LED的基本性质——1.最大工作电流——2.导通电压——LED检测方法——1.极性判断——2.好坏检测
    发表于 12-21 07:12

    做嵌入式是不是一定要学习C语言

    问:做嵌入式是不是一定要学习 C 语言?答:一定要以 C 语言为基础,嵌入式是个面很广的学科,分类也比较多,但是我认为,嵌入式基础是一定需要 C 语言基础的,我们以前刚开始学习单片机
    发表于 02-25 06:11

    FIFO读后一定要清吗?

    FIFO读后一定要清么
    发表于 09-22 06:31

    为什么高级助听器一定要使用锌空气电池?

    为什么高级助听器一定要使用锌空气电池? 锌空气电池以空气中氧气为正极材料,所以就不必再在电池内放入,电池内就有空间装更
    发表于 12-16 09:59 1009次阅读

    未来是物联网的时代,一定要

    什么是物联网呢?物联网的定义是通过射频识别、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信,以实现对物品的智能化识别、定位、跟踪、监控和管理的种网络。
    发表于 12-30 16:43 852次阅读

    手机充电一定要充满吗

    充电一定要在手机没电之前充电,也不能充满电,要充到一定电量就拔掉充电器,这样才能更好的保护手机的电池,不要等手机电量全部用没之后在充电,这个叫做深度放电,这样对手机的损害是非常大的,所以说小编请大家千万不要这么做。
    的头像 发表于 03-01 14:00 4w次阅读

    真的CPU大小端模式吗?

    真的CPU大小端模式吗?
    的头像 发表于 02-27 16:46 2709次阅读

    使用变频器时一定要接制动电阻吗

    在要求电机快速制动的情况下变频器要使用制动电阻,所以制动电阻一定要接,如果没有是不安全的。
    的头像 发表于 11-13 09:49 1.7w次阅读

    电路设计降压,一定要用变压器吗?

    降压,一定要用变压器吗?其实不是这样的,除了变压器,电容也是可以降压,今天就带领大家了解下电容降压!
    发表于 02-10 10:08 4次下载
    电路设计降压,<b class='flag-5'>一定要</b>用变压器吗?

    精通STM32的含金量吗?

    精通ARM的含金量吗?精通STM32的含金量吗?不管懂不懂都要,赶紧学。
    的头像 发表于 04-19 09:13 1693次阅读

    pcb设计的基本原则分享 PCB设计16个原则一定要知道

    PCB设计的这16个原则一定要知道
    的头像 发表于 03-12 11:19 2687次阅读