第四章Superlint 静态检查

概述

Superlint App 将传统 Lint 检查与形式验证结合,不仅检测代码风格和语法问题,还通过形式证明验证 Lint 检查发现的问题是否真的会在设计中触发,大幅降低 false positive(误报)率。

主窗口概览

Superlint App 主窗口
Superlint App 主窗口

两种 Setup 流程

JasperGold 流程

  1. 在 JasperGold 中加载设计(analyze + elaborate)
  2. 配置要运行的检查规则
  3. 排除特定实例/层级
  4. 运行检查

Xcelium 流程

  1. 在 Xcelium 编译流程中启用 Superlint
  2. 导入 HAL Design Information Files
  3. 配置和运行检查

配置检查

# 启用/禁用检查规则
set_superlint_check -rule {CON_IS_PATH CON_NO_PATH} -enable
set_superlint_check -rule {CODINGSTYLE} -disable

# 排除特定层级
set_superlint_exclude -hierarchy top.testbench

# 保存配置
save_superlint_config config.tcl

运行检查

Design Build Violations

首先检查设计是否能成功编译,编译错误会阻止后续检查。

Extracting and Proving Checks

# 提取并证明检查
run_superlint -extract
run_superlint -prove

Superlint 将 Lint 规则转化为形式断言,运行证明:

Rule Profiling

分析每条规则的运行时间,识别耗时规则。

Noise Filtering

自动过滤低质量/重复的报告。

导出为 SVA

# 将 Lint 检查导出为 SVA 断言
export_superlint_to_sva -output checks.sva

结果分析

Persistent Waivers

Waiver 可以保存在文件中,在回归中持续生效:

# 保存 waiver
save_waivers waivers.txt

# 加载 waiver
load_waivers waivers.txt

定制规则文件

Superlint 支持自定义 Lint 规则文件,添加项目特定的检查。详细语法参见官方规则定制指南。

Superlint 检查结果界面

静态检查方法论

lint vs formal-lint:质的区别

传统 Lint 工具做的是静态模式匹配——发现代码中"看起来可疑"的模式(如未驱动的信号、可能越界的数组),但不能证明 bug 真正可达。很多 lint warning 是假阳性(实际不可能发生)。

Superlint 的 AUTO_FORMAL 功能用形式引擎证明 bug 可达:它生成断言检查可疑模式是否真能被触发,如果 proven(不可能发生)就放心忽略,如果 failed(能触发)就是真 bug。这大大减少了假阳性。

修复优先级

严重级别含义处理
Fatal确定的 bug,形式引擎证明可达必须修复 RTL
Error高度可疑,可能导致功能错误分析并修复或加约束
Warning代码风格/潜在问题review 后决定修复或 waive

不是所有 warning 都需要修

AUTO_FORMAL 的优势就是帮助你区分:

Waiver 策略

对于确认是假阳性的警告,使用 waiver 机制而不是修改代码:

使用建议:在 RTL 开发早期就跑 Superlint,在代码提交前作为 gate 检查。越早发现 bug 修复成本越低。

来源文档

  • jaspergold_superlint_userguide.pdf
  • jaspergold_superlint_reference.pdf
  • example_jaspergold_apps/Superlint/