最近一直在搞CDC (clock domain crossing) 方面的事情,现在就CDC的一些知识点进行总结。

做CDC检查使用的是Spyglass工具。以下内容转载自:Spyglass之CDC检查(4) | 码农家园 (codenong.com)

文章目录

  • 同步方法

    • 哪些信号需要同步
    • 常用同步方法
  • Rules
    • AC_unsync01/02
    • AC_sync01/02
    • AC_conv01/02/03
    • AC_glitch03
    • Clock_sync05/06
    • setup_quasi_static

CDC_verify_struct过程主要检查设计中是否有未同步的信号,是否有毛刺。在多时钟设计中,要考虑哪些信号需要同步?用什么同步方法?如果处理不当,则会在设计中引入亚稳态或者数据丢失。亚稳态产生的根本原因是建立时间或保持时间不够。本文先简单介绍CDC常用同步方法,再介绍CDC_verify_struct中的rules

同步方法

note: 本节相位差单位为纳秒

哪些信号需要同步

时钟有效跳变沿的相位差是固定的,称为同步时钟。如下图clk1和clk2,虽然两者频率不一样,但有效边沿(上升沿)之间的相位差固定为T, 2T, 3T,因此可称为同步时钟。

无法判定两个时钟有效边沿相位差,称为异步时钟。不同DPLL或晶振的时钟一定是异步时钟。信号跨异步时钟传输时如果不做同步处理,很容易引起亚稳态和数据丢失。如下图所示。

同一个DPLL或晶振的时钟称为同源时钟。同源时钟根据频率和相位可以分为:

  • 同频零相位差时钟
  • 同频恒定相位差时钟
  • 非同频可变相位差时钟,包括整数倍时钟和分数倍时钟。

只要设计中的时钟不都是同频零相位差,就要考虑信号传输时是否会引入亚稳态,是否有数据丢失。

常用同步方法

跨时钟域传输的信号可以分为两类:

  • 控制信号的传输(通常为单bit),常用二级同步器。
  • 数据信号的传输(通常为多bit),常用握手信号,异步FIFO方法。

    图片来源:Verilog基础知识(亚稳态和跨时钟域的同步电路)

Rules

AC_unsync01/02

报告跨时钟传输中未同步的信号。如果此项违例,应检查:

  • 如果源寄存器和目的寄存器都在同一个IP模块中,使用ip_block约束此模块;
  • 如果源寄存器或目的寄存器在black_box中,使用abstract_port或assume_path约束black_box端口;
  • 如果源寄存器是个静态信号,使用quasi_static对源寄存器进行约束;
  • 如果源寄存器是控制信号,检查信号是否通过一个有效同步器(qualifier);
  • 如果源寄存器是数据信号,检查是否使用异步FIFO或握手信号;

AC_sync01/02

报告设计中已经同步的信号。这项规则只是报告信息,不会报告违例。

AC_conv01/02/03

报告设计中的聚合问题。聚合问题有可能会引起数据一致性(data coherency)问题,即同步前的数据与同步后的数据不一致。
AC_conv01规则报告信号经过同步器+寄存器后聚合违例:

  • 不同信号经过同步器后又经过不同数量的寄存器,最终在同一个逻辑门处聚合


    在上面例子中,第一根信号经过二级同步器后经过一个寄存器,第二个信号经过二级同步器后经过两个寄存器。这两个信号最终在同一个逻辑门处聚合。为什么这样会有问题?假设两个信号在clk1时钟域有00->11的跳变,那么经过clk2时钟域的一堆寄存器后,在逻辑门处看到信号会有00->10->11的跳变,显然这样是不行的。如果确保两根信号不会同时跳变,就没有问题,例如00->01或00->10的跳变就不会有问题。

  • 同一个信号经过多个同步器后又经过不同数量的寄存器,最终在同一个逻辑门处聚合。这种情况与上述情况类似。

  • 特殊情况下不会报违例:两个信号由同一个控制信号控制

如果spyglass报出违例,但通过检查发现设计没有问题,可使用 cdc_false_path , quasi_static, cdc_filter_conherency等命令约束。

AC_conv02规则报告信号经过同步器后聚合违例,且聚合后又通过寄存器:

  • 报告不同信号经过同步器后在同一个逻辑门处聚合问题

    注意这里报告违例的地方与AC_conv01不同,仔细看两张图。一个是在寄存器之后聚合,一个是在寄存器之前聚合。这里为什么会出问题?假设clk1时钟与信号有011->100跳变,由于各个路径延时不同,经过同步器后可能会产生011->110->100等奇怪的跳变。如果这个信号是个计数器,那么这样同步肯定有问题。解决办法就是使用格雷码编码,在同步之前,先将二进制编码转换成格雷码,再经过同步器。可以参考异步FIFO中的格雷码指针同步。

    上述例子中,sync[0:3]是使用格雷码同步的信号,sync_1是经过二级同步器同步的信号,它们在同一个逻辑门处聚合,spyglass会报出这里违例。如果确定sync_1与sync[0:3]信号没有关系,即这样的设计没有问题,可使用如下约束脚本

cdc_filter_coherenct -unrelated sync[0:3] sync_1
gray_signals -nam sync[0:3]

  • 报告同一个信号经过多个同步器后在同一个逻辑门处聚合问题

    AC_conv03规则检查不同时钟域信号经过同一个时钟域同步器后聚合问题。

AC_glitch03

报告设计中的毛刺

竞争: 组合逻辑电路中,同一信号经不同的路径传输后,到达电路中某一会合点的时间有先有后(每条途径的组合逻辑污染延时不同),这种现象称为逻辑竞争,而因此产生输出干扰脉冲的现象称为冒险。
冒险: 信号在器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存在冒险。
毛刺: 数字电路中常将毛刺定义为采样间越过逻辑门限一次以上的任何跳变,主要是指电路输出波形中含有时间很短有规律或没有规律的脉冲而又对设计没有用处或产生其他影响,一般都要考虑去除毛刺。
脉冲: 在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号,在单位时间内所产生的脉冲个数就称为频率。例如手电筒打开灯亮,这是直流,不停的开关灯亮、熄,就形成了脉冲,开关速度的快慢也就是脉冲频率的高低。
The reason for 竞争冒险: 数字电路中的竞争与冒险出现在组合逻辑电路中。由于延迟时间的存在,当一个输入信号经过多条路径传送后又重新会合到某个门上,由于不同路径上门的级数不同,或者门电路延迟时间的差异,导致到达会合点的时间有先有后,从而产生瞬间的错误输出。
The judgement for 竞争冒险: 只要输出端的逻辑函数在一定的条件下能简化成 Y = A + A’ 或者 Y = A·A’,那么就可以判断存在竞争-冒险现象。
The resolve of 竞争冒险: 接入滤波电容、引入选通脉冲、修改逻辑设计等等。
转载于:https://www.cnblogs.com/PG13/p/10329675.html

在下图设计中,D0与I1信号达到与门时间不同,C0处容易输出毛刺,如果该毛刺恰好被CLK2时钟域的寄存器采到,则设计容易出错。应将CLK1的组合逻辑修改成寄存器输出。

Clock_sync05/06

Clock_sync05报告输入信号被多个时钟域下寄存器采样,如下图中,输入信号在clka和clkb中被采样。

Clock_sync06报告输出信号由多个时钟域信号组合而成。

若确保设计没有问题,可使用set_case_analysisquasi_static命令加强对输入信号的约束。

setup_quasi_static

准静态寄存器是指设计中的输入信号、寄存器、线网在芯片工作开始时改变,但在接下来的工作中保持为0或1。

setup_quasi_static报告设计中spyglass推断出的准静态寄存器约束脚本约束的静态寄存器。应仔细检查信号是否满足准静态寄存器的定义。如果信号被spyglass错误推断为准静态寄存器,那么当芯片工作时,该信号变化可能会引起功能出错。

Spyglass CDC工具使用(四)的更多相关文章

  1. Java开发人员必须掌握的两个Linux魔法工具(四)

    子曰:"工欲善其事,必先利其器." 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣) ...

  2. 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入

    一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...

  3. Unity3D ——强大的跨平台3D游戏开发工具(四)

    第六章 Unity3D中的C#Script编程的注意事项 也许您在学习Unity3D之前,已经是一位C#的编程高手了.但在Unity3D中的C#并不像真正的C#那般强大,在Unity3D的C#中必须全 ...

  4. CDC工具使用

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

  5. CocoStuff—基于Deeplab训练数据的标定工具【四、用该工具标定个人数据】

    一.说明 本文为系列博客第四篇,主要讲述笔者在正式使用该工具使用自定义标签标注自己的图片的过程. 二.数据整理 相信大家已经在 *占坑

  6. 马后炮之12306抢票工具(四)--抢票Demo,2014年1月9日终结版

    时隔一年多,终于朋友的忽悠下吧抢票Demo的最后一步完善了,与2014年1月9日成功生成车票. Demo仅经过自己测试,并未在高峰期进行测试,代码质量很差,因为赶工,套用去年模板并未使用设计模式. 代 ...

  7. 微软Connect教程系列—VS2015集成新潮工具(四)

    本课程来源与微软connect视频教程,Modern Web Tooling in Visual Studio 2015 本课程主要讲下当下流行的前端工具 bower和grunt 首先简单介绍下这俩货 ...

  8. React开发实时聊天招聘工具 -第四章 Redux

    复杂以后 setState 就不太方便了 所以使用Redux来管理 React只负责View. Store.State.Dispatch.Reducer reducer(state,action) { ...

  9. JDK的可视化工具系列 (四) JConsole、VisualVM

    JConsole: Java监视与管理控制台 代码清单1: import java.util.*; public class JConsoleDemo { static class OOMObject ...

  10. JDK1.8 LocalDate 使用方式;LocalDate 封装Util,LocalDate工具类(四)

    未完待续 ........ 前言:       加班了好几天,终于结束上一个坑的项目了,项目交接人员全部离职,代码一行注释没有,无人问津的情况下,完成了项目,所以好的规范真的很重要. 继续日期改写 一 ...

随机推荐

  1. SVNKit使用相关工具类

    SVNKit操作SVN仓库 导入依赖 <dependency> <groupId>org.tmatesoft.svnkit</groupId> <artifa ...

  2. Typora的初使用

    HelloTypora 二级标题 三级标题 HelloWorld! HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld 引用 分割线 图片 # ...

  3. java技术系列(三) 多线程之并行处理和同步

    java同步器: 1,Semaphone: 信号量 2,CountDownLatch:倒计数门栓 3,CyclicBarrier 障栅 : 4,Exchanger :

  4. 关于HTML5语义化

    根据 HTML5 规范,在没有其他合适标签更合适时,才应该把 <b> 标签作为最后的选项. HTML5 规范声明:应该使用 <h1> - <h6> 来表示标题,使用 ...

  5. Linux进程调度算法

    进程的状态 进程的基本状态 就绪:进程已获得除处理机以外的所需资源,等待分配处理机资源 执行:进程正在占用处理机资源执行 阻塞:进程等待某种条件,在条件满足之前无法执行.例如发起I/O系统调用,等待I ...

  6. SFINAE几种实现方式

    一.通过函数返回值实现 template<class T> typename std::enable_if<std::is_trivially_default_constructib ...

  7. 理解cpu过高的逻辑思维与分析方法

    工作经常碰到负载过高,cpu占有太高,系统变慢,运维通常做的第一件事就是通过top或者uptime命令来了解系统负载的情况 通常uptime后会出现三个小数,就是平均负载值,那真正的了解这个平均负载值 ...

  8. PHPStudy设置局域网访问

    PHPStudy是一款轻量级PHP服务器,搭建环境迅速.但是与XAMPP之类服务器不同的是,PHPStudy默认只有本机才能设置域名.访问网站.需要更改vhost.conf中的文件,才可以使得内网可以 ...

  9. 关于echart折线图只有2个点时的平滑曲线问题

    问题描述: 折线图,设置平滑曲线,多个点时没有问题, 可当只有两个点(数据)的时候,这时光靠 smooth: true  就不管用了. 解决方法: 还另需设置   smoothMonotone 单调性 ...

  10. el-pagination分页-自定义左右箭头样式

    1,官方样式: 查了网上,有人说可以用slot插槽,但是试过之后,因为 不能插入多个 slot(没法定义名字做区分),所以导致左右按钮一样了.. 2,还有种方法: 利用 prev-text  和  n ...