专栏首页陌上风骑驴看ICClock Domain Crossing, 跨时钟域检查

Clock Domain Crossing, 跨时钟域检查

如今典型的SOC 芯片都功能复杂、接口丰富,在众多复杂功能中不可能所有功能都同时工作,为了能耗,大多数SOC 芯片都会切分成多个电压域,而丰富的接口就意味着庞杂的clock 和reset. 信号跨越不同domain 时都需要特别处理,比如跨power domain 时需要插入isolation 或level shifter 或 ELS, 对power domain 的处理,需要理清power domain 的关系,定义清楚power intent, 在设计、验证、实现端都需要做额外处理;相对于Power domain, 信号跨越Clock domains 给设计、验证、实现带来的挑战会更大, 今天捋一捋实现端对跨Clock domains 的处理,主要是CDC check.

从RTL 到GDS 实现过程每一步都需要做CDC check, 以保证输入正确且实现过程没有犯错。

如何确定一个时钟域?


相位关系确定的两个或多个时钟称为同步时钟,所有被同步时钟驱动的时序逻辑,为同一时钟域;无确定相位关系的两个或多个时钟称为异步时钟。同步时钟跟异步时钟特别像夫妻关系跟情人关系,同步时钟像夫妻关系,有固定规则保护其正常运转,出轨就是setup 或hold 没修干净;异步时钟就如情人关系,没有任何规则可以保证共同财产不受侵犯,没有任何责任跟义务,所以需要除了灵肉上的交流之外尽量相互隔离。一个道理:信号是可以夸时钟域的,情人关系是可以有的,只要做好必要的隔离不影响社会规则正常运转就成。

如果规避亚稳态?


数字电路是个1,0分明的世界,除此之外的状态都不是稳定状态,被称为亚稳态,亚稳态会导致电路功能失效,本来期待一个1结果来了一个0,功能失效,只能姐妹六九天长地久了。同步电路通过setup 跟hold 来规避亚稳态。

但是对于异步电路而言,因为时钟相位不固定,无法保证来的一定是0或1,所以无法用静态时序分析的办法来规避亚稳态,办法总比问题多,聪明的工程师们拍着地中海造出了同步电路,虽然不能彻底规避亚稳态,但是只要使其发生的概率逼近于无限小,那情人还是情人,灵肉交流就能畅通无阻。

在数字电路中用MTBF 来衡量亚稳态造成故障的风险,可能每家公司用于计算MTBF 的公式都不同,下面是网上找到的两个,看上去比较科学,根据MTBF 可以计算出在故障率可接受的范围内同步器所需要的寄存器级数。

常见的同步电路有哪些?


常见的同步电路有:

  • 由两级或多级寄存器组成的同步器:这是最常见的同步器,用于同步单根信号或一组bus, 如果是同步一组bus 则这组bus 必须用格雷码。
  • MUX 同步电路:如下图将dready 信号经过同步器送到目标时钟域,对于这种同步电路要在设计上保证:sready 信号必须相对于目标时钟保持m+1 个时钟周期,也就是说sready 在m+1 个dclk 周期内都不能跳变;同时在数据传输过程data 保持稳定,所谓的数据传输过程即dready 信号在dclk 时钟域有效期间。
  • 握手同步电路:如下图所示,是一个典型的握手同步电路,握手同步电路通过请求信号跟应答信号进行数据交流,当有数据需要传输时,源时钟域发出请求信号,同时发出数据,目标时钟域收到请求信号后将数据锁存,同时返回应答信号,源时钟域收到应答信号后,可改变数据,握手同步电路的弊端是latency 太长。对于握手同步电路,在设计上要保证:sreq 信号必须保持m+1 个dclk 时钟周期;data 信号必须保持m 个dclk 时钟周期;dack 信号必须保持m+1 个sclk 时钟周期;源时钟域在收到应到信号之前必须保持请求信号;在上一个请求传输没有结束之前不能发出新的请求。
  • 异步FIFO: 异步FIFO 应该是大家最熟悉的同步电路了,在学习Verilog 的时候都应该写过异步FIFO. 异步FIFO 还是常见的笔试面试题,根据需求算FIFO 深度。

CDC check 在检查什么?


实现端的CDC check 工具,在做CDC check 时,首先根据SDC 确定时钟域,然后在设计中提取同步电路;然后再分析同步电路的各种问题,常见的检查有:

  • Convergence in the Crossover Path: 多路跨时钟信号通过组合逻辑进入同步器,这会导致源时钟域的glitch 传递到目标时钟域。
  • Divergence in the Crossover Path: 同一个控制信号控制多路数据传输,如下图所示,用Trans_en 来同时控制数据和地址使能信号,但实际中,由于不同的同步电路『meta-stable settling 』时间不同,所以无法保证数据使能跟地址使能同时有效,从而导致功能错误。
  • Divergence of Meta-stable Signal: 不要从同步器中间拉出一根信号用作他用,也不要在同步器中间插入多级buffer 或inverter.
  • Re-convergence of Synchronized Signals: 多路跨时钟信号经过同步器后做逻辑运算,这跟同步一组bus 而没用格雷码的风险是类似的,无法保证不同路的同步器在目标时钟域信号稳定是同时的,各路同步器之间的skew 是无法确切知道的。

实现端做CDC check 是依赖于SDC 的,所以要确保在SDC 中 clock 关系定义正确。老驴很好奇,在验证端的CDC check 是怎么做的?是否用『断言』更有效?

本文分享自微信公众号 - 陌上风骑驴看IC(MoShangFengQiLv),作者:陌上风骑驴

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何从零开始设计一颗芯片?

    在各方助力下,集成电路成了时代热点,有大量文章在写芯片设计之复杂之困难,本文从EDA使用角度捋一遍芯片设计流程。

    老秃胖驴
  • 一文懂 | 数字实现流程各步骤的输入输出

    应某友人要求,写一篇总结数字电路实现流程各个步骤的输入输出文件都有哪些。本文所有输入输出都基于Cadence 数字实现工具,其他厂家对应工具需要的输入文件也都大...

    老秃胖驴
  • 论STA | POCV/ SOCV spatial derate

    回顾一下《论STA | POCV / SOCV total derate 计算解析》total derate 的计算公式,其中distance derate 就...

    老秃胖驴
  • 参照STM32时钟树配置STM32CubeMX Clock Configuration(STM32L011G4U6为例)

    微控制器(处理器)的运行必须要依赖周期性的时钟脉冲来驱动——往往由一个外部晶体振荡器提供时钟输入为始,最终转换为多个外部设备的周期性运作为末,这种时钟“能量”扩...

    不脱发的程序猿
  • 【Vivado约束学习】 时钟约束

    在数字设计中,时钟代表从寄存器(register)到寄存器可靠传输数据的时间基准。Xilinx Vivado集成设计环境(IDE)时序引擎使用ClocK特征计算...

    FPGA开源工作室
  • STM32F4系统时钟树

    时钟配置在system_stm32f4xx.c和stm32f4xx.h中,如PLL_M、PLL_N、PLL_P、PLL_Q、HSE_VALUE。 时钟配置函数...

    小锋学长
  • 操作系统中系统时钟,硬件时钟(后备时钟,实时时钟),网络时钟 辨析

    linux默认把后备时钟当成GMT+0时间,windows则和BIOS完全相同。

    种花家的奋斗兔
  • 如何快速找到组合逻辑生成的时钟

    组合逻辑生成时钟的典型特征是在网表中我们能够看到LUT(查找表)的输出直接连接或通过BUFG连接到时序逻辑单元比如触发器的时钟端口。最直接的危害是组合逻辑可能会...

    Lauren的FPGA
  • 从小白到 Pro | RCC时钟基础知识和常见问题

    RCC,Reset and Clock Control(复位和时钟控制),在绝大部分MCU芯片中都包含复位和时钟控制模块,也是MCU重要的组成部分。

    AI 电堂
  • FPGA时序约束实战篇之梳理时钟树

      我们以Vivado自带的wave_gen工程为例,该工程的各个模块功能较为明确,如下图所示。为了引入异步时钟域,我们在此程序上由增加了另一个时钟--clki...

    猫叔Rex

扫码关注云+社区

领取腾讯云代金券