快速上手SpyGlass——CDC检查

        随着技术的发展,数字电路的集成度越来越高,设计也越来越复杂。很少有系统会只工作在同一个时钟频率。一个系统中往往会存在多个时钟,这些时钟之间有可能是同步的,也有可能是异步的。如果一个系统中,异步时钟之间存在信号通道,则就会存在CDC(clock domain crossing)问题。

        SpyGlass CDC分析使你能够识别设计中的CDC问题。SpyGlass CDC tool是一种 Formal Check Methodology工具, 相比写case跑仿真来找CDC问题, 靠SpgGlass能更早,更全,更快的发现CDC问题. 它能够:

  1. 管理多时钟域设计
  2. 系统地处理CDC问题
  3. 检查和报告任何不同步的信号: 时钟和复位

        当SOC design涉及的clock domain太多,用到很多第三方IP,及涉及人员水平参差不齐时, 用SpyGlass CDC来做检查来保证RTL质量是十分必要的.

一、基本流程

        在工程的block-level和SOC 集成的两个不同阶段, 所适用的CDC Goal也是有所不同的。Block-Level关心的是模块内部, 只有模块内检查没问题后才能做deliver. 而SOC集成主要关心的是模块间interface的CDC问题。

1、block level

        

        各个步骤的说明如下:

(1)Creating SpyGlass CDC Setup:指定constraints(SGDC file)、parameters 及其他指定用于该project的定义来精准运行SpyGlass CDC检查。

        可以使用‘sdc2sgdc’ 命令来将 block-level SDC 转化成相应的SGDC 约束文件。运行 “cdc_setup_check”goal 能够生成constraints, 但生成的constraint一定要designer仔细review下再用。运行‘cdc_setup’后工具可以理解整个design的architecture, 解决一些block-box的问题,并自动生成‘autoclock.sgdc’及autoreset.sgdc作为 constraint的base来使用。 合理设置parameter可以极大的减少CDC error/warning的数量。

(2)Verifying SpgGlass CDC Setup: :检查setup的正确性和完整性。在进行下一步时一定要修掉该stage报的violation,如确保所有flip-flop都有时钟。“set_case_analysis”参数合适定义来确保多时钟源的flip-flop有指定的时钟选择。时钟的周期,有效沿及domain都需要合适定义。

(3)Performing Clocks and Reset Integrity Checks:修掉时钟和复位不完整定义的问题,确保时钟和复位都被合理定义,并且确保clock/reset没有glitch和race。

(4)Performing Block-Level CDC Verification: 要修掉所有的violations, error和warning都要review,必要时可以waive掉。 清理violation是有先后优先级顺序的。优先级如下:

  1. Ac_sync_group Rule violations; rule Ac_unsync01(for scalar unsync) 和 Ac_unsync02(for vector data unsync),增加constraint或设置cdc_false_path, 不要靠waive来修,也可以定义static,quasi-static来解决. 
  2. Convergence violations: rule Ac_conv01,Ac_conv02,Ac_conv03,Ac_conv04 and Ac_conv05.
  3. Glitch violations: Ac_glitch* 和 Clock_glitch*
  4. Data hold violation: rule Ac_cdc01, 表明 signal/data从快时钟到慢时钟发送时hold不住。
  5. Data hold issues in synchronized data crossing: rule Ac_datahold01a
  6. Violations related to data correlation and race conditions: Rule Ac_cdc08, Ac_conv01 and Ac_conv02
  7. Violations related to reset synchronization and deassertion: Rule Ar_unsync01, Ar_sync01,Ar_asyncdeassert01,Ar_syncdessert01,Reset_sync02
  8. violations related to FIFO recognition and verification: Rule Ac_fifo01, SpgGlass可以识别通常的FIFO结构。 也可以在constraint file(SGDC)中指明fifo。

(5)Performing SOC-Level CDC Verification:在soc level进行CDC检查,可以发现所有structural issues。

(6)Signing-off SpyGlass CDC Verification:检查报告,清干净问题和sign-off 。

2、SOC level

        不同于block level flow, 在Hierarchy Verify Flow中使用abstract view来专注于模块边界的问题,从而减少CDC verify的运行时间。block owner deliver 已经verified的模块给SOC集成team,SOC integration team在abstract view上不用再担心block内的问题。如果有些block 是不可用的,可以为这些block产生abstract views, 从top-level移植constraints到block-level,考虑添加‘ip_block' constrain 到这些block.

二、流程介绍

        在执行SpyGlass CDC 分析之前,需要检查必要的先决条件。进行SpyGlass CDC分析的先决条件如下:        

  • 成功运行design-read流程
  • 确保设计包含最少数量的非预期的black box
  • 在设计中为实例化的技术库单元提供相应的技术库(.lib)
  • 在设计中指定有关时钟的信息,以及复位信息(如果可能的话)

        建议在开始运行SpyGlass CDC之前,从设计规范、IPs或芯片引线收集这些信息。如果没有这些信息,SpyGlass CDC也能够提供自动检测时钟和复位,但是会推断出额外的时钟和复位,最好是能够预先明确所有的时钟和复位信息。

1、CDC setup

        创建设置意味着在执行CDC验证之前指定设计信息,例如时钟、重置和停止模块。设置的质量决定了SpyGlass CDC分析的质量。错误或不完整的设置可能会导致许多违例或掩盖一个真正的设计错误。

        可以通过以下流程建立SpyGlass CDC设置:

  1. 将时钟生成模块指定为black box
  2. 为设计指定时钟和复位
  3. 为设计生成时钟和复位
  4. 使用设置管理器

1) 将时钟生成模块指定为black box

        对时钟生成模块(比如PLL)的内部执行SpyGlass CDC分析非常复杂,而且对整体SpyGlass CDC分析几乎没有价值。将这些块标记为黑盒子,除非你有详细的SGDC约束来定义这些模块的时钟特性。标记PLL时钟生成模块为black boxes的方法是,在project file中设置如下命令:

set_option stop <blocks>

        一旦你设置这些模块为black boxes:

  • 将时钟约束定义在这些模块的输出pin上
  • 将输出时钟和输入定义为同一个时钟域,除非两者之间没有相位关系

preview

2) 为设计指定时钟和复位

        如果知道设计中的时钟和复位,可以执行以下步骤来指定他们:

        在SGDC中定义CLOCK和RESET的约束:

clock -name “clk_sys”reset -name “rst_n” –value 0

        在此流程还需要检查约束的完整性:

  1. 通过运行SpyGlass CDC 方法的Goals来分析设计
  2. 检查The Clock-Reset-Summary Report.
  3. 在The Clock-Reset-Summary Report 的Section D: Cases not checked for clock domain crossings Section里面列出了unconstrained clocks.
  4. 修改SGDC来指定The Clock-Reset-Summary Report里列出的时钟信号;
  5. 修改SGDC后重复步骤2;

3)为设计生成时钟和复位

        如果不知道设计中的时钟和复位,可以执行以下步骤来生成:

1. 运行cdc_setup goal:这个步骤产生了autoclocks.sgdc和autoresets.sgdc两个SGDC文件,包含了推断的时钟和复位。

2. 检查和修改生成的SGDC文件:这些文件可能包括一些除了真正的时钟和复位的控制信号。因此,你必须检查这些文件中的每个推断的时钟和复位,并删除不是真正的时钟和复位信号。建议查看Setup_clock01和Reset_info01规则信息,以查看这样的推断信号。

3. 在SpyGlass中指定修改过的autoclocks.sgdc 和 autoresets.sgdc文件,并通过运行相应的Goal来分析设计。默认情况下,autoclocks.sgdc文件中生成的clock 假定为一个单独的时钟域。在这种情况下,CDC Verification Rules 报告了对每对时钟信号之间的时钟域交叉的违例。

        但是,工具可能会将设计中的一些时钟信号视为来自同一域。在这种情况下,工具会认为触发器之间的数据传输没有同步问题。我们可以通过约束中的clock 关键字来修改时钟域的信息。通过修改clock的-domain参数为同一个值来指定所有相同时钟域的clock到同一个时钟域。注意-domain的参数可以是有效的字符串或者时钟名。

2、Verifying SpgGlass CDC Setup

        Setup的主要目标是保证clock和reset被正确定义,必须保证所以error都被修复了,才能进行下一步,不然后续会有很多意想不到的错误。通过运行cdc_setup_check来进行。

3、Performing Clocks and Reset Integrity Checks

        这个步骤必须确保时钟和复位被正确定义,并且它们没有glitches、竞争和其他故障。

        通过运行clock_reset_integrity goal来修复时钟和复位的完整性。

4、Performing CDC Verification

        CDC验证是指在设计中检测CDC问题。

要执行CDC验证,请执行以下步骤:

  1. 设置所需的参数(parameters)
  2. 运行Goals,例如cdc_verify和cdc_verify_struct,以检测大量的CDC问题。

        最初可能会发现大量违反CDC的情况。以一种系统的方式来处理它们是很重要的,这样就可以快速地处理一些需要考虑的问题。

        下列列出了大多数重要的违例种类

1)未同步的跨时钟域问题 (Unsynchronized Crossings Issues)

        首先,通过查看Ac_unsync01 和Ac_unsync02来检查未同步的跨时钟域问题。

        未同步就进行跨时钟域设计会产生亚稳态,这是最基本的CDC问题。        

 2) 聚合问题(Convergence Issues)

        聚合问题发生在多个信号(可能是同一个时钟域也可以是不同的时钟域)从一个时钟域跨到另一个相同的时钟域,但是这些信号是分开同步的。这样你在使用这些同步过的信号的时候,就不能确定他们是不是同时有效,这样有可能就有问题。几种情况如下:

        有关此类违规类型的信息,一般查看Ac_conv01、Ac_conv02、Ac_conv03、Ac_conv04和Ac_conv05。

 3)复位同步问题

        对于此类问题,请检查违反Ar_*规则的情况。这些rules报告同步异步复位信号的违规行为。

        由于复位通常是单比特信号,你可能希望在Ac_sync01下报告它们。但是复位的同步往往不同,比如常见的异步复位同步释放,输入是拉高的。

        例如,下图显示了一个复位同步释放:

         有关这些违规的信息,请参见Ar_asyncdeassert01、Ar_syncdeassert01、Ar_sync01和Ar_unsync01。

4)毛刺问题

        检查通过Ac_glitch*Clock_glitch*规则报告的所有违例。

        这些规则突出了容易出现毛刺的逻辑,这些逻辑可能导致与同步问题非常类似的问题。

5)跨时钟信号宽度错误(Signal Width Errors in Synchronized Control Crossings)

        请检查Ac_cdc01 rule 违例。

        这种违例通常发生在信号从快时钟穿越到慢时钟,信号在慢时钟还没采样到的时候已经发生变化。下图是信号宽度问题的例子:

6)数据跨时钟的保持时间问题

        请检查Ac_datahold01a 违例。

        在使用同步器,但功能不正确的情况下,会出现此类违规报告的信号。考虑如下的情况:

        上图是一种不正确的跨时钟同步器的情况。这里,数据在enable有效的时候发生了变化。

5、调试CDC问题

        在调试CDC问题之前,需要保证setup是正确的。

        在正常规模的设计上跑SpyGlass CDC,一般会有大量的违例。大部分违例是因为:

  • 错误或者不完备的setup
  • 配置信号,通常不应报告为CDC错误

        注意:千万不要通过waiving的方式解决CDC的问题,这样十分危险,可能wave掉了真正的CDC问题。每一条waver都必须反复check。

1)使用电子表(Using Spreadsheets)

        当存在许多违规行为时,这些违规行为中的很大一部分是由一小部分的根本原因造成的。

        分析它们的推荐方法是使用电子表格查看器。执行以下步骤来使用电子表格查看器调试大部分的违规:

1. 打开电子表查看器

        通过右键单击违例标题(rule的大类,比如Ar_unsync01)并从快捷菜单中选择电子表格查看器选项来打开电子表格。如下图所示:

2. 筛选和排序数据

        在电子表格视图中使用筛选和排序来区分共同因素和违例。要过滤或排序数据,右键单击列标题并从快捷菜单中选择一个适当的选项,如下图所示:

        每一列单击可以排序,右键可以过滤:

3. 检查常见原因或者来源

        在电子表格中查找常见原因或常见来源。这些很可能指向一个单一的根本原因。

4. 根据源来进行过滤

        如果您正在使用静态信号的命名方法,请在电子表格中按源名称进行筛选。比如筛选所有的配置寄存器。例如,下图显示了如何为源指定过滤条件(_cfg):

         查看过滤后的列表并解决根本原因,以消除大量违例。

2)使用增量示意图(Incremental Schematic)

        示意图使你能够理解和隔离冲突的根本原因。

        你可以查看电子表格中出现的多个相关违规的示意图。为此,请执行以下步骤:

1.通过按下<Ctrl>键盘键在电子表格中选择违规。

2.执行下列操作之一,打开增量示意图:

  • 单击电子表格中某一行的Schematic列中的链接。
  • 单击电子表格工具栏中的增量示意图按钮。

        也可以右键直接选择Incremental Schematic

        下图为增量示意图:        

 3)在示意图中查看调试数据

        在示意图中调试SpyGlass CDC解决违例时,以下信息非常有用:

  • clock 路径中的net的时钟域信息
  • reset 路径中的net的复位域信息
  • 数据或者控制信号的时钟域信息
  • 数据或者控制信息的准静态信息

        注意:必须将enable_debug_data参数的值设置为yes,才能查看SpyGlass CDC解决方案规则的上述调试数据。

4)基于实例来过滤违例

        在处理大型设计时,设计师会被分配特定的设计实例。在这种情况下,设计师需要关注特定实例中报告的违规情况。为了帮助设计人员快速定位特定实例上的违规,SpyGlass CDC提供了基于实例的过滤机制。在此机制中,设计人员可以基于实例筛选违规。

5)解决多种CDC共同的违例问题

        在大量的SpyGlass CDC违例中,大多数是以下情况:

  • 不正确的设置
  • 可以安全忽略的明显问题

        本节描述了以下很多违例行为常见的根本原因:

  • Crossing发生或者结束于black box
  • 错误的Case Analysis设置
  • 源Flip-Flops产生静态信号
  • 噪声

        在关注rule相关的问题之前,应该首先考虑解决上述问题。解决了上述问题并重新运行SpyGlass CDC之后,您应该会看到更小、更易于管理的问题集。

        注意:处理CDC问题时,千万不要通过waving。如果你采用这种方法,就有可能掩盖一个真正的问题。

(1)Crossing发生或者结束于black box

        SpyGlass CDC分析依据如下:

  • 能够通过路径进行跟踪
  • 一定程度的功能性理解

        在black box的上游和下游都无法实现上述目标。

        要消除这个问题,特定的约束为SpyGlass CDC提供一个部分模型,如下所述:

  • 使用以下方法为black box的输入输出分配一个域:
  • 对black box输出使用abstract_port约束
  • 对black box输入使用signal_in_domain约束
  • 使用assume_path约束对从black box输入到输出建模为直通路径。

(2)错误的Case Analysis设置

        检查否正确地设置了set_case_analysis约束。

        例如,你可能会看到错误的原因是,所有的功能模式和所有的测试模式都是同时激活的,而实际上这些模式中的许多模式永远不会同时激活。要把test相关的信号用set_case_analysis约束。

(3)源Flip-Flops产生静态信号

        如果源触发器产生一个静态信号,可能不需要同步。比如说配置信号,这些信号通常在开机/启动时设置,然后不再更改。可以从芯片架构师获得关于哪些信号属于这种情况,并使用准静态约束quasi_static 来约束这些信号。

(4)噪声(Noise)

        在SpyGlass CDC验证的主要挑战之一是管理大量的违规。你可以通过特定的设置和设置检查步骤来降低这些“噪声”的干扰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字后端——低功耗单元库

在之前的文章中&#xff0c;介绍了低功耗设计物理实施的方案&#xff1a; 数字后端——低功耗设计物理实施_沧海一升的博客-CSDN博客_低功耗设计低功耗设计方案所涉及到的物理实施相关内容https://blog.csdn.net/qq_21842097/article/details/119918312 为了实现例如门…

NandFlash详述

1. 硬件特性&#xff1a; 【Flash的硬件实现机制】 Flash全名叫做Flash Memory&#xff0c;属于非易失性存储设备(Non-volatile Memory Device)&#xff0c;与此相对应的是易失性存储设备(Volatile Memory Device)。这类设备&#xff0c;除了Flash&#xff0c;还有其他比较常见…

史上最全的MySQL高性能优化实战总结!

1.1 前言 MySQL对于很多Linux从业者而言&#xff0c;是一个非常棘手的问题&#xff0c;多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行MySQL的优化之前必须要了解的就是MySQL的查询过程&#xff0c;很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器…

低功耗设计——基于UPF进行设计

UPF&#xff0c; 统一电源格式UPF(Unified Power Format)是新思(Synopsys)公司通用的电源格式&#xff0c;是一组标准的类Tcl 语言的集合&#xff0c;用来描述芯片设计中的低功耗意图&#xff08;Low-Power Design Intent&#xff09;。 使用UPF 的语言&#xff0c;可以描述供电…

用公众号获取 任意公众号文章列表 软件还是免费

用公众号获取 任意公众号文章列表 软件还是免费还不快点下载 下载 地址 https://pan.baidu.com/s/1jI44Wjs转载于:https://www.cnblogs.com/wx85437898/p/7488590.html

CentOS7时间设置问题

本地安装一个VMWare player虚拟机客户端&#xff0c;并安装了Linux CentOS7 Basic Web Server系统&#xff0c;时区在安装时已经选择了Asia/Shanghai,但是安装完成后&#xff0c;时间和当前外部的时间不一致&#xff0c;如下图 图一 图二 图三 后经搜索发现&#xff0c;由于未开…

低功耗设计——功耗估算

根据在功耗分析的过程中是否有输入向量的提供&#xff0c;功耗估算方法可以分为仿真的方法&#xff08;Simulative&#xff09;和非仿真的方法&#xff08;Non-simulative&#xff09;&#xff1a; 仿真的方法是根据用户所提供的大量输入向量来对电路进行模拟&#xff0c;利用…

Deep Learning(深度学习)学习笔记整理系列三

Deep Learning&#xff08;深度学习&#xff09;学习笔记整理系列 声明&#xff1a; 1&#xff09;该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的。具体引用的资料请看参考文献。具体的版本声明也参考原文献。 2&#xff09;本文仅供学术交流&…

Conformal ECO 流程介绍

之前听说过一句话&#xff0c;没有修过ECO的人生是不完整的。最近就给我整得再次完整了。。。。。。 最近赶项目&#xff0c;RTL freeze之后&#xff0c;后仿发现出了bug&#xff08;还好拦下来了&#xff0c;不然头更大&#xff09;&#xff0c;于是做了一次function ECO&…

Zabbix discoverer processes more than 75% busy

原文发表于cu&#xff1a;2016-06-22 Zabbix discoverer processes more than 75% busy原因及处理。 一&#xff0e;现象 配置了discovery任务后&#xff0c;zabbix dashboard 告警如下&#xff1a; Zabbix discoverer processes more than 75% busy 二&#xff0e;原因 1. 配置…

图像紫边消除(depurple)

图像紫边广泛存在于目前的手机摄像头、数码相机、监控摄像头等数字成像系统所得图像中,当我们使用这些设备在逆光、大光圈等条件下拍摄时,所得图像的局部区域,特别是高反差区域(亮暗对比反差很大的图像区域,比如天空、灯管与物体相接的边缘)会比较容易观察到紫边,解决图…

Swift 性能相关

起初的疑问源自于「在 Swift 中的, Struct:Protocol 比 抽象类 好在哪里&#xff1f;」。但是找来找去都是 Swift 性能相关的东西。整理了点笔记&#xff0c;供大家可以参考一下。 一些疑问 在正题开始之前&#xff0c;不知道你是否有如下的疑问&#xff1a; 为什么说 Swift 相…

HTTPS 路径配置

1: 首先安装 fiddlercertmaker.exe 文件2:Tools -> HTTPS 3: Connections 勾中Allow remote computer to connect转载于:https://www.cnblogs.com/eason-d/p/7492177.html

CMOS图像传感器——相位对焦

之前介绍了许多自动对焦的方案 自动对焦方法学习_沧海一升的博客-CSDN博客自动对焦的各类方法学习介绍https://blog.csdn.net/qq_21842097/article/details/121373263 在里面提到了遮蔽像素相位检测法,原理上算是相位检测法(Phase Detection Auto Focus,PDAF)的一种。…

Spring Cloud Config 和Spring Cloud Bus实现配置中心

2019独角兽企业重金招聘Python工程师标准>>> Spring Cloud是很多组件的集合&#xff0c;Spring将常用的技术框架进行包装和整合&#xff0c;如mybatis zookeeper rabbitmq redis等等&#xff0c;还有一些科技公司贡献出来的一些经过生产环境验证的组件如奈飞公司贡献…

CMOS图像传感器——闪烁(flicker)现象

一、概述 闪烁(Flicker),通常发生在室内场景,曝光时间设置如果不是光源能量周期的整数倍,则图像不同位置处积累的信号强度不同,并呈周期性变化,这是单帧图像的情况。在视频序列上,如果满足一定条件,视频会出现条纹模式在垂直方向上缓慢移动。 二、形成原因 1、光源 …

CMOS图像传感器——图像传感器噪声

图像传感器噪声取决于图像传感器的制作工艺、内部结构及内部补偿技术等原因,噪声反应了图像传感器的内部特性。CMOS图像传感器基本原理见: CMOS图像传感——概述_沧海一升的博客-CSDN博客_cmos图像传感器CMOS图像传感器基本介绍https://blog.csdn.net/qq_21842097/article/d…

TI Davinci DM6441嵌入式Linux移植攻略——UBL移植篇

目录(?)[] 一DM6441的Boot过程简介二DM6441的UBL移植 CCS文件夹Common文件夹GNU文件夹 移植DDR2移植Nand Flash其它 声明&#xff1a;本文参考网友zjb_integrated的文章《TI Davinci DM6446开发攻略——UBL移植》和《DAVINCI DM365-DM368开发攻略——U-BOOT-2010.12及UBL的移…

python接口自动化测试(二)-requests.get()

环境搭建好后&#xff0c;接下来我们先来了解一下requests的一些简单使用&#xff0c;主要包括&#xff1a; requests常用请求方法使用&#xff0c;包括&#xff1a;get&#xff0c;postrequests库中的Session、Cookie的使用其它高级部分&#xff1a;认证、代理、证书验证、超时…

数字图像处理——图像锐化

图像增强是图像处理的一个重要环节,早期的图像处理就是从图像增强开始的,人们研究对质量低的图像进行处理以获得改善质量后的图像。现今的图像增强还为后续的图像处理,如图像信息提取、图像识别等,提供更高识别度的图像。 从图像处理技术来看,图像的摄取、编码、传输和处理…