@[TOC](VC Spyglass: Lint & CDC)
Spyglass是S家推出的用于芯片设计质量检查(静态分析)与验证平台，主要用于RTL设计阶段进行检查；Lint & CDC & RDC 都是Spyglass平台提供的具体功能；
VC Spyglass是一个提供RTL静态分析功能的平台；愈加复杂的芯片设计愈加要求在RTL开发早期对RTL、跨时钟域(CDC)和跨复位域(RDC) 设计的正确性进行验证，尽可能将发现bug左移；
VC Spyglass RTL Signoff:指在RTL设计阶段通过SpyGlass工具完成设计规范的全面验证，确保代码达到可交付下一阶段（如综合）的质量标准。
RTL签核：指在综合前完成代码质量闭环检查；
现在必须迁移到该先进工具VC Spyglass平台上进行Check和Verification,来大大提高工作效率和质量；
VC Spyglass相比Spyglass来说：是基于Spyglass具体的功能上，进行了紧密的整合，打通了工具和流程，进一步提升效率；
一句话：VC Spyglass既能提供保证高质量的签核，又能提供高效的调试能力；
# 0 What is VC Spyglass
VC SpyGlass还与Verdi®自动调试系统进行了天然的集成，以加快分析故障的根本原因。
VC SpyGlass平台使用与新思科技Design Compiler®和PrimeTime®工具保持一致的设计行为和Tcl流程，来显著缩短实现流程和验证流程之间的设置时间。
VC Spyglass内通过紧密集成的Lint、CDC和RDC分析，来提高工作效率和加快RTL静态Signoff;
VC Spyglass价值就是体现在RTL早期设计阶段就进行静态分析验证，具体是提供Lint,CDC ,RDC功能；

具体支持：
先进强大的静态和动态分析可识别 RTL 中关键的设计问题
一套完备的电气规则检查可确保网表完整性
包含 STARC、OpenMORE 等设计重用符合性检查，在整个设计过程中执行统一风格
可定制框架，用于捕获和自动化运用公司专业知识
集成的调试环境可以在违规报告、原理图和 RTL 源代码之间轻松地进行交叉探查
十分全面的设计专业知识和行业优选实践知识库
支持 Verilog、VHDL、V2K、SystemVerilog 和混合语言设计
Tcl shell 可高效实现规则执行和设计查询
SoC 层次化流程可加快执行速度并降低误报率

# 1 VC Spyglass Lint
该工具本质是采用行业的RTL编码最佳实践来进行提供RTL编码风格、代码静态分析、和形式化验证，通过整合传统lint能力和调试交互技术，来提高分析调试解决能力；
本质上是将Lint能力与Verdi调试环境深度集成；
## 1.1 Key Benefits
### 1 Identify Critical RTL Design Issues--识别关键RTL设计问题
基于GuideWare设计规则的静态和动态分析；--GuideWare是可支持自定义的一套规则集；
```verilog
// 静态分析示例：检测未初始化的寄存器
always @(posedge clk) begin
    if (!rst) 
        counter <= 'h0;  // 静态分析可验证所有路径都有初始化
end

// 动态分析示例：通过GuideWare检查总线协议
assert property (@(posedge clk) 
    req |-> ##[1:3] ack); // 动态验证请求响应时序

```
### 2 ML-Based Root Cause Analysis--基于机器学习来分析原因
Easier & faster handling of millions of violations；--帮助更容易和更快解决违例；

### 3 Electrical Rules Check
Integrated electrical rules check to ensure netlist integrity--内置规则检查确保网表完整性；

### 4 Comprehensive Variety of Rulesets --STARC、OpenMORE
比如STARC规则集：
```verilog
// 典型应用示例：时钟域交叉检查
// STARC要求所有跨时钟域信号必须同步
(* starc_cdc = "true" *) 
reg [7:0] sync_data;  // 必须添加CDC同步器

// 主要规则：
// 1. 时钟域交叉验证(CDC)
// 2. 异步复位同步释放
// 3. 组合逻辑环路检测

```

OpenMORE规则集：
```verilog
// 典型应用：FSM验证
// OpenMORE要求所有状态机必须有默认状态
always @(posedge clk) begin
    if (!rst_n) begin
        state <= DEFAULT_STATE;  // 必须明确定义默认状态
    end else begin
        case(state)
            //...状态转移逻辑
        endcase
    end
end

// 核心要求：
// 1. 状态机完备性验证
// 2. 代码覆盖率分析
// 3. 时序约束检查

```

ISO 26262 (汽车功能安全标准)
```verilog
// 典型应用：安全关键逻辑
// 要求所有安全相关信号必须冗余校验
output reg [1:0] safe_signal;  // 双bit防失效设计

always @(*) begin
    safe_signal[0] = compute_signal();
    safe_signal[1] = !compute_signal();  // 反向校验
end

// 关键要求：
// 1. ASIL等级划分(A-D级)
// 2. 故障注入测试
// 3. 安全机制覆盖率

```

DO-254 (航空电子设备标准)
```verilog
// 典型应用：航空电子验证
// 要求所有参数必须参数化配置
parameter WIDTH = 8;  // 禁止使用硬编码
reg [WIDTH-1:0] data; 

// 核心要求：
// 1. 需求追踪矩阵
// 2. 配置管理
// 3. 工具鉴定
```
### 5 Single-Step Inbuilt Formal Flow --内置单步形式化验证流程
提供单步执行的形式化验证流程；

### 6 Verdi Integration--提供调试环境以实现便捷的交叉探测
在这里额外提一下Verdi是S家的debug调试工具；对比C家的是Simvision；M家的是Questa；

### 7 Efficient Rule Execution--通过Tcl shell实现高效规则执行和设计查询
即跑起来提供TCL Shell来跑进行执行TCL命令，来帮助调试；

### 8 SoC Abstraction Flow--更快的表现和干扰

## 1.2 Features
多种编码风格、结构设计及电气设计问题都可能演变为设计缺陷，导致设计迭代或芯片重新投片。其他工具或许能检测到设计错误，但往往是在设计实现的后期阶段;
设计意图的一致性和正确性已成为芯片集成团队面临的核心挑战。设计复用和IP集成的重点是要求设计元素在更短时间内完成集成，并且满足正确性和一致性的规范要求。

# 2 VC Spyglass CDC
VC SpyGlass™ CDC提供了一套全面的方法论来提升调试效率；该工具工联control和data信号来深入理解设计意图；内部集成结构性和功能性CDC分析；用户还可灵活生成静态数据库来用于验证CDC协议和结构性分析中的假设；

## 2.1 Key Benefits
* Best and Faster SignOff--综合形式化验证和仿真来CDC分析；
* ML-based Root Cause Analysis--提示帮助解决违例
* 同步器与准静态信号的自动检测——降低误报Vilations
* 自动提取——从约束文件中提取时钟、复位及时钟域信息
* 原生支持与集成——基于UPF和SDC的时钟域交叉(CDC)分析，以及Verdi®工具针对CDC调试的深度集成
* 快速迭代——基于签核抽象模型的层次化流程

## 2.2 CDC重要性不言而喻
现代SoC包含数十甚至数百个异步时钟域，CDC问题已成为设计错误的主要源头，这类错误会大幅增加设计调试周期的时间和成本。
常用解决防护技术：1.自动同步器插入（如：2FF/3FF同步链）;2.时钟域隔离验证; 3.形式化等效性检查;

# 3 VC Spyglass RDC
电源域的引入增加了复位域交叉的复杂性，因此对采用UPF描述的RTL设计进行RDC分析（即正确连接电源开关和隔离器件）是实现最高质量和最全面签核的必要条件。
## 3.1 Key Benefits
* Native Integration and Support: Verdi integration for design debug & SDC support for RDC analysis;
* Efficient Debug Capabilities: Provides high-performance & efficient debug capabilities using Tcl
* 设计环境复用能力(Ability to Reuse Setup)——可复用Design Compiler®、PrimeTime®和Synopsys VCS的配置
* 减少干扰--省略无复位信号的时序元件
```verilog
(* no_reset *) 
reg [1:0] last_select;  // 不需要复位的状态保持寄存器

always @(posedge clk) begin
    last_select <= decode_address(addr); // 仅时钟驱动
end
```
* 高级复位域交叉验证能力——复杂复位关系、复位与时钟关联性、RDC限定条件分析
* 自动提取——供设计工程师审查的时钟与复位信号；

## 3.2 Features
众所周知，亚稳态的主要来源是时钟域交叉问题；然而，同一时钟域内的异步复位交叉同样会导致亚稳态。随着多相位上电启动序列的广泛应用以及软件栈复杂度增加带来的软件异步复位需求，异步复位的使用正变得越来越普遍。为确保设计符合规范，复位域交叉(RDC)验证已成为与时钟域交叉验证同等重要的签核标准。"

Demo:
```verilog
# SpyGlass RDC检查脚本
check_rdc -module decode_address \
          -reset_signals {rst_n pwr_rst_n} \
          -sync_stages 2 \
          -report rdc_report.html

```


【Ref】
https://www.synopsys.com/zh-cn/verification/static-and-formal-verification/spyglass/spyglass-lint.html  
https://www.synopsys.com/zh-cn/verification/static-and-formal-verification/vc-formal.html
