spyglass CDC入门

debug rules的顺序
Ac_unsync01
when to use
description
messages and suggested fix
潜在的问题
how to debug and fix
个人解决的思路
Ac_unsync01
when to use
个人解决的思路
Ac_datahold01a
when to use
Description
潜在的问题
how to debug and fix
个人解决的思路debug使用gui界面更容易理解
waveform viewer
根据设计分析源输出的信号会保持多久
Ac_cdc08
SeverityError
when to use
Description
Parameters
Constraints
Meassages and Suggested Fix
message1
message2
meassage3
Example code andor Schematic
Reset_info01
when to use
Description
附录spyglass cdc debug理解
spyglass的错误报告分组有多种主要是下面两种个人理解利用Goal by rule去分组按照spyglass执行流程依次解决error和warning有利于spyglass流程因为Severity ERROR不一定是第一时间要解决的而流程错误需要第一时间解决
通过Goal by rule去分组
通过Severity去分组
疑问同一个复位信号用做同步复位的同时又用做异步复位该怎么定义
利用spyglass自动生成clockreset约束也许需要迭代几次才能找全而不是一次就能找出所有的clockreset信号
黑盒子怎么设置才算是完善的
clock
reset
set_case_analysis
input
个人理解
根据工程遇到的cdc规则,进行理解。 
目标:

熟悉rules的阅读方法,参考文档是SpyGlass CDC Rules Reference Guide(另外一个cdc的书是spyglass cdc submethodology,介绍spyglass作为cdc工具的方法学,而且这一本要先看。有这两本书就够了。)
熟悉cdc遇到的error、warning
debug思路 
error肯定有问题,不要只关注结构上是否做了异步处理,也许异步处理的实现有问题。这个可以从waveform上去分析。例如异步fifo,有些设计,功能上导致格雷码跳转不是按顺序的,有时候从5转为0;这时,就会有error报告。而且确实是错误设计。
debug rules的顺序
按照下述流程顺序,依次排查warning和error。 
基于goal目标的流程。 
1. cdc_setup 
如果出现大量违反,成千上万个。那么很大可能是setup步骤不正确或者不完整。 
必须解决Ac_unsync01 rule和Ac_unsync02 rule的违反之后,再解决其它问题。 
2. cdc_setup_check 
3. clock_reset_integrity 
4. cdc_verify 
5. cdc_verify_struct

Ac_unsync01
when to use
找到未做同步的跨时钟域信号。

description
跨时钟域的信号,未做同步处理。

messages and suggested fix
潜在的问题
会出现亚稳态。

how to debug and fix
如果源和目的实例,都在一个IP module里,要使用ip_block约束;
如果跨时钟域穿过一个黑盒子,保证黑盒子配置是正确的,可以使用下述两种方式的任一一种。 
2.1 黑盒子,要设置好时钟域。(使用abstract_port约束) 
2.2 黑盒子的pin已经定义feed through。(使用assume_path) 
如果不想查看黑盒子的跨时钟域报告,可以设置cdc_reduce_pessimism参数到这个黑盒子bbox。
3.
个人解决的思路
通过电路图分析,源信号,是一个控制寄存器,是一个配置完成后,就基本不会改变的信号。 
由于功能的原因,可以不需要做同步设计。

Ac_unsync01
when to use
多位信号的跨时钟域,没有找到相关同步逻辑。

个人解决的思路
发现一个情况,是因为cdc约束了两个时钟信号,但是他们都应该属于一个时钟域的。 
修改办法:两个时钟改成一个时钟域。

Ac_datahold01a
when to use
跨时钟域时,数据同步的正确性。

Description
当enable使能之后,数据同步,会出现不稳定情况。 
- fifo同步机制 
- 握手同步机制 
- 时钟门控单元的同步机制

潜在的问题
qualifier作为同步enable时,同步的不正确

how to debug and fix
原因可能: 
1. 缺少reset信号 
2. setup流程不正确或者不完整 
3. 波形的初始值不正确(datahold经常是这个原因,即spyglass工具不能识别你的源时钟域触发器的输出信号,功能上是可以保证保持足够时间的。)

个人解决的思路(debug,使用gui界面更容易理解)
waveform viewer
G1(我理解,应该是下述信号的第几个变化点) 
源时钟域 
目的时钟域 
源输出(就是源触发器的输出端口) 
目的输入(就是目的触发器的的输入端口) 
目的输出(就是目的触发器的输出端口) 
有图形,可以看出data hold的危险。

根据设计,分析源输出的信号会保持多久?
如果能够保证“源输出”的信号,保留足够长时间,被目的时钟域的触发器正常采样到,就没有问题。 
虽然,默认的严重级别是ERROR。

Ac_cdc08
Severity:Error
个人评价:设计里,Ac_cdc08是常见的异步处理规则。

when to use
控制总线,即控制信号不是单bit的信号。控制总线用于跨时钟域的情况下,有情况没有遵循格雷编码。 
理解: 
控制总线,没有经过格雷码译码。这是异步处理的标准方法之一。单位信号,可以简单的2级同步器同步;多位控制总线,一般利用异步fifo结构,而且异步fifo的控制信号,就是通过格雷码译码的。 
为什么一定要用格雷码译码? 
看异步fifo的教程,就可以知道,格雷码的编码特点,总线信号每次变化都有且仅有1位信号发生变化。这种编码特点,适合多位信号的同步。多位信号组成的bus[3:0]同步之前的变化,跟同步之后的变化是一致的,中间不会有其它不期望的状态变化。不画图解释了,网上多的是。

Description:
Reports control-bus clock domain crossings which do not follow gray encoding. 
会检查以下三种同步机制:

多级触发器同步
利用同步单元进行同步
qualifier synchronization scheme using qualifier -crossing。我理解的是利用已经做过同步的控制信号,进行数据同步。
Parameters
保留

Constraints
需要定义的约束? 
clock 
reset 
set_case_analysis 
input ports要指定时钟域 
cdc_false_path 
quasi_static

Meassages and Suggested Fix
相关rule的显示,有可能是error、warning、info

message1
error:控制总线用于跨时钟域的情况下,有情况没有遵循格雷编码。 
然后介绍潜在问题、不修复的风险、怎样debug并修复(而且提供了检查失败的原因分析) 
原因和解决思路: 
1. 存在潜在的reset导致的;需要在约束文件里定义这个reset信号。 
2. setup(clock、reset、set_case_analysis、input ports要指定时钟域)不正确或者不全。这种情况,要formal setup rules检查。 
3. waveform viewer的初始状态值不正确。这种情况需要在约束文件里提供正确的初始状态值,或者利用vcd文件加载正确的初始状态值。

message2
warning情况。Partially-Proved状态。 
这种情况,应该不会多见。毕竟是SOC,没那么复杂。 
spyglass cdc工具没有分析完全。出现这种问题,需要考虑以下几种情况。 
1. 设置fa_atime参数,降低assertion run-time 
2. 设置fa_propfile参数,使用递增性的分析方法; 
3. 设置fa_abstract参数,即应用abstraction技术,使复杂的验证问题转为更小的能解决的问题。

meassage3
控制总线,跨越时钟域做同步的时候,遵循了格雷码的要求,是PASS的。 
这种信息,叫INFO。 
1. 一般来说,不会报告,可以设置fa_msgmode;去报告。

Example code and/or Schematic
有图有例子,并提供了解决方案。 
技巧: 
1. schematic,颜色有标注意义的。比如跨时钟域的交界线、源时钟域的信号逻辑区域、目标时钟域的信号逻辑区域、。

Reset_info01
Severity:info

when to use
用这个规则,可以查找设计中的异步和同步置位或者复位信号。

Description
定义了复位或者置位(统称为复位信号)的类型。

复位的位置    复位的类型
复位来自输入端口    叫primary复位
复位来自bbox黑盒子    叫black box复位
复位来自触发器的输出    叫derived复位
悬空的线网    叫undriven复位
latch或者三态门的输出    叫gated复位
附录:spyglass cdc debug理解
spyglass的错误报告,分组有多种。主要是下面两种。个人理解,利用Goal by rule去分组,按照spyglass执行流程,依次解决error和warning。有利于spyglass流程;因为Severity ERROR不一定是第一时间要解决的。而流程错误,需要第一时间解决。
通过Goal by rule去分组
通过Severity去分组
疑问?同一个复位信号,用做同步复位的同时,又用做异步复位。该怎么定义?
现在是定义为异步复位;因为定义为同步复位的时候,会提示异步复位信号未约束。

利用spyglass自动生成clock/reset约束,也许需要迭代几次才能找全。而不是一次就能找出所有的clock/reset信号。
黑盒子怎么设置,才算是完善的。
abstract_port

clock
约束写法,推荐period和edge参数都要写上。 
周期默认单位是10ns,可以查询《spyglass consolidated constraints appnotes》

current_design rtl_ctrl
clock -name clka -period 10 -edge {0 5}
1
2
reset
分异步同步两种复位定义。 
如果是复位信号,既做了同步,又做为异步复位使用;我理解是看做同步复位信号,因为看做同步复位信号,相对异步复位信号,会考虑同步复位信号的跨时钟域处理。

current_design rtl_ctrl
reset -async -name reseta -value 0
reset -sync -name resetb -value 0
1
2
3
set_case_analysis
input
个人理解
std_cell和ram等模块,不能吃lib,要吃有功能描述的.v;否则CDC会无法理解std_cell和ram的行为。 
但不吃lib,又会报无法综合。
--------------------- 
 

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值