Clock Domain Crossing

CDC问题主要有亚稳态问题,多比特信号同步,握手信号同步,异步Fifo等

Topics

  1. Describe the SoC Design Issues
  2. Understand the tranditonal verification limitation
  3. Know about the CDC Issues

Soc架构

  • CPU是整个Soc的大脑,会执行一些指令,这些指令可以控制Soc中的模块,CPU可以给DMA发送指令,还可以给NAND FLASH CONTROLLER发指令....
  • CPU有指令的cache(I-Cache),也有数据的Cache(D-Cache),CPU通过JTAG接口与外界连接,进行调试,CPU如果在执行某些代码时出现问题,通过JTAG进行调试
  • DMA是一个直接访问的存储器,可以将数据从外存搬移到内存,或者将数据从内部的一个组件搬移到内部的另外一个组件,DMA数据在进行搬移数据的时候,不需要通过CPU进行搬移,可以通过CPU下发一个指令给DMA,DMA进行数据的搬移

  • 数据不一定存储在Soc内部,内部的PFLASH,SRAM存储空间都比较小,可以通过外挂存储芯片存储数据,通过控制器来访问外接的存储芯片,比如SRAM芯片和NAND Flash(存储密度更大一些);SD Controller可以访问一些SD卡
  • AHB-高速总线,AHB上挂载的都是一些访问速度快的模块,因为要大批量的传输数据
  • APB-慢速总线,挂载的模块传输数据量比较小,传输速度慢
  • System Controller系统控制器,上电,时钟,复位
  • 一个Soc中的模块很多,CPU的工作频率较高,所以时钟域跑的比较快;SPI,UART本身对接的外部接口的变化率比较低,使用CPU的频率去跑,频率大,功耗大,会造成浪费;对于速率要求不高的模块可以降低频率,降低能耗,使用低速总线
  • RSA,USB模块有自己的时钟频率
  • 不同模块有不同的时钟频率,不同模块之间会有一些交互,所以要解决CDC

Soc Design Problem



  • 很多问题都需要进行修改RTL或者是Spec,发现问题的时间点越接近前段,成本越低,有没有一种方式可以在写RTL的时候,就可以检查这些问题

  • SpyGlass 可以在前期检查问题,效果肯定没有实际的pr,timing,power检查准确





  • 不同的IP集成在一起会出现跨时钟域的问题

Principle of Synchronous Design

  • 上面的设计使用了两个clock,出现跨时钟域的设计,clk1直接连到clk2上就不合理;D0到C0中间经过组合逻辑,会加剧亚稳态的形成
  • D0信号是稳定的,经过组合逻辑之后可能在C0会出现毛刺,因为是异步电路,clk2可以在c0端任意时间点内进行采样,这时就有可能会采样到亚稳态
  • 如果clk1和clk2是相同的时钟,那么只要保证C0处信号满足在clk2的setup time和hold time就可以,不是产生亚稳态

What is a Clock Domain Crossing

  • 数据或者控制信号,从一个时钟域跨越到零一个时钟域
  • Soc设计有很多时钟域

Traditional verification and their Limitation

  • STA一般进行同步电路的设计进行分析,STA往往是在netlist生成之后进行的时序分析,但是这个时间点晚于RTLcoding时间节点很长时间,出现的时机也不太合适
  • false path

  • 黑盒测试-不关心内部的实现,只关心接口和功能;白盒测试,即关心接口也关心内部的结构,会深入到模块内部进行验证

Types of CDC Problems

  • data hold问题产生数据丢失,就是一个时钟域频率很快(1G),另一个时钟域信号很慢(1M),信号由快时钟域到慢时钟域传递的时候,在时钟上升沿,可能采集不到快时钟的数据

亚稳态问题



重汇聚问题



  • 两个信号分别经过同步器之后,因为同步器导致的latency问题,也会产生亚稳态,CDC工具可以进行检测和解决
  • FIFO的地址操作都是加1的操作,使用格雷码进行编码,相邻两个数之间只更改1bit,即使是因为latency的影响,也不会产生新的状态,latency只影响同步时间的早晚

Data hold问题

时钟从快时钟域传递到慢时钟域,由于快时钟域信号窄,可能导致数据丢失

  • 当clkA采样clkB的时候,clkB可能已经为0了,解决方式就是对于快的时钟域进行一个展宽







  • 实现方式:将快时钟经过两个同步寄存器进行打拍之后,使用一个或门将第一级寄存器输出的信号和第二级寄存器输出的信号连接起来,信号拓宽之后,就可以被捕捉到

  • F1的作用:信号经过组合逻辑之后会出现毛刺现象,为了让信号更加干净,使用一级寄存器将其过滤掉

Design Intent(handshake,FIFO)

  • 如果传递数据总线data-bus,传递数据,传递的数据之间不是加一和减一的关系,可以使用两种解决方式握手或者是异步FIFO
  • 握手:首先数据不经过处理,原数据传递过去,传递的是enable信号;REQ拉高表示data准备好了(数据稳定了),将REQ经过两级打拍器传递到接收端,接收端接收到REQ之后,就可以进行采样数据了;接收端拿到数据之后,还要告诉发送端已经拿到了数据(ACK),发送端拿到ACK信号之后,就可以进行下一组数据的传输
  • 握手传递的是1bit信号,优点是面积小,缺点是传递效率不高,传递速度慢
  • 异步FIFO:将数据写到FIFO中,将读写指针进行一个同步;优点是性能比较高,缺点是面积较大

Reset Synchronization



比如时钟是上升沿有效的时钟,假设时钟要去采样一个值,寄存器的输入是1,如果复位信号是低电平有效;在某个时刻,复位信号和时钟同时从0到1跳变,会出现竞争;复位先撤销,时钟先采样再进行复位,Q为1,复位信号撤销的比较晚,就是先复位后采样,Q端为0,出现两种不同的结果(在一个时间点内同时发生,会出现亚稳态)



时钟上升沿之前,复位的撤销需要保持稳定,时钟有效沿之后的一段时间,时钟的复位也需要保持一段时间,类似于setup time和hold time

异步复位:时钟有效沿和reset复位信号是没有关系的



异步复位信号转变为同步复位:就是将reset信号和时钟产生一个相位关系,使用两级寄存器进行同步

一些问题

  • 同步时钟域(可能不是一个时钟,但是是同源的时钟,频率和相位是有一定关系的)和异步时钟域(时钟频率和相位是没有关系的)
  • 同步跨时钟域不一定是安全的,100MHz与50MHz时钟域跨时钟域,会造成数据丢失
  • 列举两个CDC问题
  • 亚稳态问题是和时钟频率有关的
  • STA检查不到CDC问题
  • CTS(clock tree sysnthesis)是PR之间的一个过程,是不能解决跨时钟域问题的

  • 三个时钟域有问题
  • 发射时钟域不能经过组合逻辑,加大亚稳态风险
  • 两个时钟域之间重汇聚问题

CDC Tool Flow

CDC Recommanded Methodology

分治策略,将大模块分为几个小的子模块,先对子模块进行检查









Clock Domain Crossing的更多相关文章

  1. 跨时钟域设计【一】——Slow to fast clock domain

    跨时钟域设计是FPGA设计中经常遇到的问题,特别是对Trigger信号进行同步设计,往往需要把慢时钟域的Trigger信号同步到快时钟域下,下面是我工作中用到的慢时钟域到快时钟域的Verilog HD ...

  2. 跨时钟域设计【二】——Fast to slow clock domain

    跨时钟域设计中,对快时钟域的Trigger信号同步到慢时钟域,可以采用上面的电路实现,Verilog HDL设计如下:   // Trigger signal sync, Fast clock dom ...

  3. AMBA interconnector PL301(一)

    HPM(High-Performance Matrix)是一个自生成的AMBA3 bus subsystem. 由一个AXI bus matrix,Frequency Conversion Compo ...

  4. 7系列FPGA的时钟资源——UG472

    时钟架构总览 7系的FPGA使用了专用的全局(Global)和区域(Regional)IO和时钟资源来管理设计中各种的时钟需求.Clock Management Tiles(CMT)提供了时钟合成(C ...

  5. CDC工具使用

    最近一直在搞CDC (clock domain crossing) 方面的事情,现在就CDC的一些知识点进行总结. 做CDC检查使用的是0in工具. 本来要 写一些关于 CDC的 知识点,临时有事,要 ...

  6. CDC之Metastability

    1 CDC  A clock domain crossing occurs whenever data is transferred from a flop driven by one clock t ...

  7. EDA简介

    Electronic design automation (EDA), also referred to as electronic computer-aided design (ECAD),[1] ...

  8. Spyglass CDC工具使用(五)

    最近一直在搞CDC (clock domain crossing) 方面的事情,现在就CDC的一些知识点进行总结. 做CDC检查使用的是Spyglass工具.以下内容转载自:Spyglass之CDC检 ...

  9. Spyglass CDC工具使用(四)

    最近一直在搞CDC (clock domain crossing) 方面的事情,现在就CDC的一些知识点进行总结. 做CDC检查使用的是Spyglass工具.以下内容转载自:Spyglass之CDC检 ...

  10. Spyglass CDC工具使用(三)

    最近一直在搞CDC (clock domain crossing) 方面的事情,现在就CDC的一些知识点进行总结. 做CDC检查使用的是Spyglass工具.以下内容转载自:Spyglass之CDC检 ...

随机推荐

  1. Odoo16—权限控制

    odoo的权限控制是通过用户组来实现的,在用户组中配置控制权限,然后再添加用户到用户组中,从而实现对用户的访问和操作权限控制.一个用户可以属于多个用户组,用户最终的权限范围取决于所属用户组权限的并集. ...

  2. Python 中 key 参数的含义及用法

    哈喽大家好,我是咸鱼 我们在使用 sorted() 或 map() 函数的时候,都会看到里面有一个 key 参数 其实这个 key 参数也存在于其他内置函数中(例如 min().max() 等),那么 ...

  3. PBKDF2(Password-Based Key Derivation Function 2)算法

    一.引言 在当今数字时代,保护用户数据和隐私的安全变得越来越重要.为实现这一目标,加密和密钥管理技术发挥着关键作用.PBKDF2(Password-Based Key Derivation Funct ...

  4. GO的逃逸分析

    逃逸分析 前言 指的就是由编译器决定内存分配的位置,不需要由程序员来指定.函数中申请一个新的对象,其目的是为了提高程序的性能,减少内存分配和垃圾回收的开销. 分配在 栈 中, 则函数执行结束则可自动将 ...

  5. Github 星标 8K+ 这款国人开源的 Redis 可视化管理工具,真香...

    做程序员就少不了与一些工具打交道,比如:监控工具.管理工具等,有些工具是命令行界面,有些工具是可视化界面,反正都是可以能够满足日常使用的功能需求. 对于redis管理工具来说,也有不少可能的产品,比如 ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (23)-- 算法导论4.2 5题

    五.V.Pan 发现一种方法,可以用 132 464 次乘法操作完成 68 x 68 的矩阵相乘,发现另一种方法,可以用 143 640 次乘法操作完成 70 x 70 的矩阵相乘,还发现一种方法,可 ...

  7. Xshell与Xftp安装与使用

    Xshell与Xftp安装 软件安装:官网或者应用商店 安装结束 nslicense.dll替换 下载文件 使用 登录 双击刚刚建立的连接 表示建立成功 点击文件传输 右边就是服务器的文件,左边就是本 ...

  8. 10个安全问题带你了解OWASP 定义的大模型应用

    摘要:OWASP 的一群研究人员,总结目前大模型中可能存在的TOP10安全风险,很好的揭示了我们在大模型应用中需要防护的目标,以及如何采取相应的防护措施. 本文分享自华为云社区<OWASP 定义 ...

  9. 从1天到10分钟的超越,华为云DRS在背后做了这些

    摘要:华为云DRS助力一汽-大众BI平台实时查看报表,提升数字化决策能力. 本文分享自华为云社区<分钟级查看报表,华为云&一汽-大众,让商机时刻被洞见>,作者:GaussDB 数据 ...

  10. 深度克隆从C#/C/Java漫谈到JavaScript真复制

    如果只想看js,直接从JavaScript标题开始. 在C#里面,深度clone有System.ICloneable.创建现有实例相同的值创建类的新实例 克隆原理 值类型变量与引用类型变量 如果我们有 ...