网站设计的出路,seo基础教程视频,html5 wordpress,品牌排行榜哪个网站更权威随着技术的发展#xff0c;数字电路的集成度越来越高#xff0c;设计也越来越复杂。很少有系统会只工作在同一个时钟频率。一个系统中往往会存在多个时钟#xff0c;这些时钟之间有可能是同步的#xff0c;也有可能是异步的。如果一个系统中#xff0c;异步时钟之间存在信… 随着技术的发展数字电路的集成度越来越高设计也越来越复杂。很少有系统会只工作在同一个时钟频率。一个系统中往往会存在多个时钟这些时钟之间有可能是同步的也有可能是异步的。如果一个系统中异步时钟之间存在信号通道则就会存在CDCclock domain crossing问题。 SpyGlass CDC分析使你能够识别设计中的CDC问题。SpyGlass CDC tool是一种 Formal Check Methodology工具, 相比写case跑仿真来找CDC问题, 靠SpgGlass能更早,更全,更快的发现CDC问题. 它能够:
管理多时钟域设计系统地处理CDC问题检查和报告任何不同步的信号: 时钟和复位当SOC design涉及的clock domain太多,用到很多第三方IP,及涉及人员水平参差不齐时, 用SpyGlass CDC来做检查来保证RTL质量是十分必要的.
一、基本流程 在工程的block-level和SOC 集成的两个不同阶段, 所适用的CDC Goal也是有所不同的。Block-Level关心的是模块内部, 只有模块内检查没问题后才能做deliver. 而SOC集成主要关心的是模块间interface的CDC问题。
1、block level 各个步骤的说明如下
1Creating SpyGlass CDC Setup指定constraintsSGDC 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的数量。
2Verifying SpgGlass CDC Setup :检查setup的正确性和完整性。在进行下一步时一定要修掉该stage报的violation如确保所有flip-flop都有时钟。“set_case_analysis”参数合适定义来确保多时钟源的flip-flop有指定的时钟选择。时钟的周期有效沿及domain都需要合适定义。
3Performing Clocks and Reset Integrity Checks修掉时钟和复位不完整定义的问题确保时钟和复位都被合理定义并且确保clock/reset没有glitch和race。
4Performing Block-Level CDC Verification: 要修掉所有的violations, error和warning都要review必要时可以waive掉。 清理violation是有先后优先级顺序的。优先级如下
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来解决. Convergence violations: rule Ac_conv01,Ac_conv02,Ac_conv03,Ac_conv04 and Ac_conv05.Glitch violations: Ac_glitch* 和 Clock_glitch*Data hold violation: rule Ac_cdc01, 表明 signal/data从快时钟到慢时钟发送时hold不住。Data hold issues in synchronized data crossing: rule Ac_datahold01aViolations related to data correlation and race conditions: Rule Ac_cdc08, Ac_conv01 and Ac_conv02Violations related to reset synchronization and deassertion: Rule Ar_unsync01, Ar_sync01,Ar_asyncdeassert01,Ar_syncdessert01,Reset_sync02violations related to FIFO recognition and verification: Rule Ac_fifo01, SpgGlass可以识别通常的FIFO结构。 也可以在constraint fileSGDC中指明fifo。
5Performing SOC-Level CDC Verification在soc level进行CDC检查可以发现所有structural issues。
6Signing-off SpyGlass CDC Verification检查报告清干净问题和sign-off 。
2、SOC level 不同于block level flow 在Hierarchy Verify Flow中使用abstract view来专注于模块边界的问题从而减少CDC verify的运行时间。block owner deliver 已经verified的模块给SOC集成teamSOC 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设置
将时钟生成模块指定为black box为设计指定时钟和复位为设计生成时钟和复位使用设置管理器
1 将时钟生成模块指定为black box 对时钟生成模块(比如PLL)的内部执行SpyGlass CDC分析非常复杂而且对整体SpyGlass CDC分析几乎没有价值。将这些块标记为黑盒子除非你有详细的SGDC约束来定义这些模块的时钟特性。标记PLL时钟生成模块为black boxes的方法是在project file中设置如下命令
set_option stop blocks 一旦你设置这些模块为black boxes:
将时钟约束定义在这些模块的输出pin上将输出时钟和输入定义为同一个时钟域除非两者之间没有相位关系2 为设计指定时钟和复位 如果知道设计中的时钟和复位可以执行以下步骤来指定他们: 在SGDC中定义CLOCK和RESET的约束
clock -name “clk_sys”reset -name “rst_n” –value 0 在此流程还需要检查约束的完整性
通过运行SpyGlass CDC 方法的Goals来分析设计检查The Clock-Reset-Summary Report.在The Clock-Reset-Summary Report 的Section D: Cases not checked for clock domain crossings Section里面列出了unconstrained clocks.修改SGDC来指定The Clock-Reset-Summary Report里列出的时钟信号修改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验证请执行以下步骤:
设置所需的参数(parameters)运行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。如果你采用这种方法就有可能掩盖一个真正的问题。
1Crossing发生或者结束于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验证的主要挑战之一是管理大量的违规。你可以通过特定的设置和设置检查步骤来降低这些“噪声”的干扰。