第四章HAL HDL 静态分析

概述

HDL 静态分析是 Xcelium 模拟器集成的 HDL 代码静态检查工具,提供丰富的规则集检查 RTL 代码质量、可综合性、时钟域交叉、编码风格等问题。

HAL 在设计流程中的位置

HAL 应用于多种验证流程:

HAL Features

NCBrowse 消息浏览器:左侧按类别分组的 hal.log 消息,右侧显示对应源码,下方为 Message Detail
NCBrowse 消息浏览器:左侧按类别分组的 hal.log 消息,右侧显示对应源码,下方为 Message Detail

常用术语

内置检查类别

类别说明
Advance DFT在基本 DFT 检查之外提供进阶可测性分析。关键特点是即使 design_info 文件里没有指定任何 test mode 信号也能做 RTL 可测性检查——它会自动识别测试电路和时钟门控,据此完成时钟与复位的可控性检查,并检查时钟/复位生成结构的可测性。启用 Advance DFT 后,DFT 类别中重叠的检查不再报告
Clock Domain Crossing Checks检查跨时钟域信号是否有正确同步。异步时钟域间同步失败会违反触发器的建立/保持要求并导致亚稳态(既非 0 也非 1 的不稳定状态)。HAL 报告未经正确同步的跨域信号,并给出跳转到 HDL 代码中违规信号的链接。该分析为纯静态,不需要仿真
Netlist Checks分析门级网表,报告与扫描链相关的问题——这些问题在 RTL 级无法发现,因为扫描链是综合阶段插入的。由于输入是真实网表,报告的是实际问题而非潜在问题。检查项包括:所有状态元件是否可扫描并串联成扫描链、扫描链是否超过指定长度(长度由 hal.def 中的参数指定)、同一扫描链中的触发器是否共用扫描时钟。需要额外提供仿真模型、综合后网表的仿真 snapshot 和综合库
SystemVerilog Checks指 HAL 对 SystemVerilog 语言构造的支持范围(如 unsized literals、literals 中的时间单位等),按构造分类列出,而非一组 SystemVerilog 专用规则
e Checks对 e 文件做静态分析,检查语法与语义错误、常见编程错误(变量/方法/操作符用法)、编码风格问题(行长、文件扩展名、命名规范)、不利于覆盖率驱动验证方法学的环境特征、可能影响运行性能和内存占用的写法,以及是否违反 UVM e 规范。对 e 文件运行 HAL 时,报告的是 ALL_E 类别中的检查
ALL_BEHAVIORAL针对 VHDL 的类别:警告那些不应出现在设计行为描述中的特定 VHDL 构造,同时包含一些指导编写良好行为描述的检查。它只有一个子类别 BEH_CODING_VHDL,含 BEHINI、DESULN、ENTDCL、FENAME、MAXPRT、MLITNU、NOLABL、PDFPKG、SUBPNM、SUBTNM、SYNCSL、UNITNM、USRATN、WNBFLK 等规则。本类别的检查受参数 BEH_ARCHNM 定义的 architecture 名影响

hal.def 中,顶层类别是 ALL,其下含 ALL_BEHAVIORALALL_RTLALL_NETLISTALL_TOOLALL_SYSTEMCALL_E 六个子类别。另有独立的 JRDRS.def 文件,其顶层类别 JRDRS 含子类别 JRDS_VERILOG

Rules File (hal.def)

规则的启用/禁用在规则文件 hal.def 中完成。批处理模式下直接用文本编辑,在类别定义内部给检查加 on/off 参数:

category <category_name>
{
  <check_name> {on | off} <short_message>
}

例如要禁用 RMM 类别中的 CBYNAM 规则:

category RMM "All checks complying to Reuse Methodology Manual" default_on
{
  CBYNAM {off} // "Port connections should be made by name rather than position"
  ....
}

也可以在文件末尾用 params 语句达到同样效果:

params CBYNAM {off}
易错点:要启用某条检查,它所属的父类别必须是 default_on。例如 category RTL_NAMING_VERILOGdefault_off,即使在其中把 MODLNM 设为 on,该检查也不会被启用。如果一条检查同时属于多个类别,只要其中至少一个父类别是 default_on 就能启用。

详细的 BNF 语法和每条规则的说明参见 HAL Reference Manual。

HAL 静态分析界面

HAL 静态分析方法论

HDL analysis (HAL) 的定位

HAL 是 Cadence Xcelium 的 HDL 静态分析技术(HAL = HDL analysis),由一组预定义规则组成,用来检查 Verilog、VHDL、Mixed、SystemC 和 e 文件。它帮你在仿真之前就发现编码错误和不良的 RTL 设计风格。不同于 FPV(证明属性),HAL 做的是结构化分析

什么时候用 HAL

HAL vs Superlint:HAL 侧重结构化、代码质量检查(不需要 prove,纯静态分析);Superlint 结合形式引擎证明 bug 可达。先用 HAL 清掉明显问题,再用 Superlint 找深层 bug。

来源文档

  • hal_userguide.pdf
  • hal_reference.pdf
  • example_jaspergold_apps/RTLD/