EDA

Spyglass

Spyglass

Posted by George Lin on May 17, 2025

https://www.bilibili.com/video/BV1cj411i7zf?spm_id_from=333.788.player.switch&vd_source=6bdb3504029acf6961e3195b9ad841b9

VC Spyglass 工具Lint检查默认使用的方法学说明位置

VC_STATIC_HOME/auxx/monet/tcl/GuideWare/soc/rtl_handoff/lint

VC_STATIC_HOME/auxx/monet/tcl/GuideWare/block/rtl_handoff/lint

VC Spyglass Lint检查时有哪些goal?

以block检查目标为例,有lint_rtl, lint_rtl_enhanced, lint_formal_aware_rtl, lint_dccompat, lint_formality等共10个默认的goal

Lint 各个goal主要检查内容是什么?

  • lint_rtl(默认使用):连接性检查,动态仿真相关检查,不可综合结构检查,RTL结构性检查
  • lint_formal_aware_rtl:使用形式验证方法学对RTL进行lint检查,可进一步降低结果中的误报
  • lint_dccompat:RTL可实现性检查,包含了使用DC进行综合时对RTL的基本要求
  • lint_formality: 包含了使用formality等工具进行一致性比对时对RTL的基本要求

怎样在Lint检查时设置方法学要求以及检查目标集合?

image-20250517203248746

Spyglass中的跨复位域路径RDC问题

image-20250517203626195

image-20250517205852335

image-20250517210212228

image-20250517210258385

image-20250517210432159

Spyglass常见的合规与不合规的同步结构

CDC同步结构检查

image-20250517212156201

image-20250517212306826

image-20250517212456177

复位信号同步结构

image-20250517212855732

image-20250517212909978

image-20250517213412692

上图右图可以有效实现异步复位同步释放

Spyglass Qualifier声明示例

image-20250517215249631

image-20250517215412834

image-20250517215553163

image-20250517215818432

image-20250517215859276

层次化验证

image-20250517220255817

spyglass自动抽取block中顶层需要知道的东西

image-20250517220408199

SAM会向顶层屏蔽掉block中阴影部分的内容

image-20250517220622146

image-20250517220632796

CDC Jitter流程

image-20250517220838871

image-20250517221100451

看到CDC报了汇聚,则需要手动check是否做了格雷码转换之类的处理,CDC Jitter流程可以主动插入随机Jitter来模拟产生上述10这一中间态的场景。

image-20250517221337581

image-20250517221423735

亮点是插入jitter的位置

可以通过tracediff看看插入不同jitter产生的动态仿真vcs波形是否有差别,从而自动判别。

CDC功能检查(即有了正确的结构,结构能否有正确的功能)

image-20250517221600467

image-20250517225259510

功能性检查指Formal CDC Verification这一步

RDC约束

image-20250517225613614

image-20250517225635591

image-20250517225825416

image-20250517225929849

image-20250517230034534

RDC实例

image-20250517231106243

image-20250517231129408

image-20250517231149300

CDC合规同步路径的抓取

image-20250517231246186

image-20250517231300984

image-20250517231440284

CDC路径的时钟信息

image-20250517231632295

image-20250517231651364

image-20250517231724628

image-20250517231827235

Spyglass Check CDC常见会报的三种错误

该部分内容全部来自Spyglass:你一定要懂的CDC错误

1、CDC Unsynchronized(没有跨时钟)

没有采用跨时钟模块,即咱们通常说的裸跨,不同时钟域的数据直接互连,会存在亚稳态问题。同步电路会进行STA(静态时序分析)保证setup-hold time满足要求,因此寄存器能够保证正确采样。而不同时钟域的信号之间没有setup-hold time要求,无法保证正确采样。

image-20251217160427245

上图所示为亚稳态的案例,F1是clk_A时钟域的寄存器,F2是clk_B时钟域的寄存器,clk_A和clk_B是异步时钟,寄存器F1的输出信号A发生跳变的时刻有可能与clk_B的上升沿发生重叠,此时对寄存器F2来说,在setup-hold time时间区间内,输入A没有保持稳定,因此寄存器F2输出的B是不确定状态,这就是亚稳态。

解决方案:根据实际场景添加对应的跨时钟模块,例如bit同步器,脉冲跨时钟模块,异步fifo,多比特跨时钟等等。

解读1

没有跨时钟,不一定就是错误;在一些场景中,为了节约资源不跨时钟是允许的。

下图所示案例:配置模块csr模块产生的配置信号cfg_*_mode是clk1时钟域,直接用于clk2时钟域的逻辑模块。

在芯片使用过程中,复位和配置顺序如下:hrst_n先释放—>完成csr模块寄存器配置—>释放srst_n。

在srst_n复位释放后,静态配置cfg__mode不再发生改变。这种情况中,功能逻辑模块处于复位状态时,cfg__mode发生跳变,这种情况下即使发生了亚稳态也没有影响,因为功能逻辑模块还没允许。

image-20251217160448078

解读2:

在部分握手机制的模块中,没有跨时钟,也能保证不会出现亚稳态。

CDC无法识别是否实现握手机制,如果跨时钟模块实现握手机制,即能够保证图中的F2准备采样时信号A已保持稳定,虽然会报错,但是不会出现亚稳态。在多bit的配置信号跨时钟模块中就存在这样的情况。

2、CDC Glitch (毛刺)

简单来说,就是组合逻辑直接跨时钟,组合逻辑会存在glitch,导致glitch被目的时钟采样到,导致出现不期望的信号

解决方案:增加源时钟域寄存器打拍,寄存器输出的信号才跨时钟。

特殊场景:如果图10中的D0或者I1是一个准静态信号(几乎不会跳变的),那么不会产生glitch,也是可以接受的。

image-20251217160505563

图片

Glitches的产生有如下三种场景:

1)同一个bit信号的组合逻辑跨时钟

2)多个源时钟域的信号的组合逻辑跨时钟

3)同一个时钟域的多个源信号的组合逻辑跨时钟

3、CDC-Convergence(跨时钟重新汇聚)

CDC-Convergence会产生不期望的信号组合,从而导致功能异常。

如果多个信号从源时钟域通过不同的跨时钟路径进入目的时钟域,然后这些信号在目的时钟域中又聚合到一起,那么就有可能因为信号的重新聚合导致电路功能上的异常。例如下图中,x和y的组合(x,y)在同步前只有(1,1)和(0,0)的组合,在同步后出现了(1,0)的组合,还有可能出现(0,1)组合。

如下图所示,X、X1、Y和Y1 属于clk_a时钟域,delay A和delay B表示不同的延时(走线延时),X3,X4,Y3,Y4属于clk_b时钟域。clk_a和clk_b属于异步时钟。X4和Y4作为输入进行组合逻辑获得O。

假设因为某些原因,x和y的组合(x,y)只会出现2’b00 或者2‘b11的情况。在正确设计过程中,我们期望x4和y4的组合(x4,y4)也只会出现2’b00 或者2‘b11的情况。但是由于不同的跨时钟路径会导致(x4,y4)出现错误组合。见图7-28,由于delay A和delay B的延时不同,导致X2和Y2到达同步器D端口的时间有差异,因此采样后的值X3和Y3可能会出现一个clk_b周期的差异,此时(x3,y3)出现了2‘b10的组合,此组合会传递到(x4,y4)。因此输出的Q可能是不符合预取的值。此为Convergence导致的错误

image-20251217160532738

image-20251217160545347

图8显示了3种汇聚的情况:

case1:同一个源时钟域的信号同步后立即汇聚在组合逻辑

case2:源时钟域信号同步后在目的时钟域打了若干拍后再汇聚。如果当目的时钟域打拍数量过大,例如20级,超过了spyglass 工具默认配置值,此种情况spyglass工具就无法检查出问题了。

case3: 不同源时钟域的信号同步后立即汇聚在组合逻辑

image-20251217160608080

参考文档:VC_SpyGlass_CDC_UserGuide

RTL级综合优化寄存器根源分析

image-20250517232150495

image-20250517232233604

image-20250517232339277

image-20250517232351689

image-20250517232456667

image-20250517232524691

image-20250517232555932

image-20250517232611147

image-20250517232622740

image-20250517232646658

image-20250517232858764

image-20250517232925639

复位信号定义

image-20250517233338443

image-20250517233540545

image-20250517233630619

image-20250517233649375

image-20250517233819997

image-20250517233852308

时钟关系检查

image-20250517234002270

image-20250517234107755

Top Port的Reset

image-20250517234310789

image-20250517234332715

TCM Timing Exception Confliction检查

image-20250517234631126

左右三栏中的左边两栏相互冲突

image-20250517234906541

image-20250517235005215

image-20250517235108354

image-20250517235228192

image-20250517235442503

Lint连接性检查

image-20250517235708415

image-20250517235734432

image-20250517235747063

image-20250517235813536

image-20250517235900372

image-20250518000121803

image-20250518000136819

image-20250518000151886

image-20250518000211877

image-20250518000338710

image-20250518000354061

image-20250518000511437

如何在RDC中有效定义和约束Qualifier

image-20250518000643178

image-20250518000757219

image-20250518000819823

image-20250518000936983

image-20250518001120108

image-20250518001212714

image-20250518001415502

image-20250518001525186