IEC 62531:属性规范语言(PSL)用于数字电路形式验证

掌握硬件基于断言的验证——从时序逻辑基础到高级形式验证方法学

IEC 62531源自IEEE Std 1850,定义了属性规范语言PSL,这是一种用于描述数字硬件设计属性的形式化语言。PSL使工程师能够以精确、无歧义的方式表达复杂的时序行为和约束,这些属性和约束可以通过动态仿真和形式验证工具进行验证。随着集成电路设计复杂度的指数级增长,传统的纯仿真验证方法已不足以确保功能正确性。PSL与SystemVerilog断言一起,为基于断言的验证方法学提供了基础,这种方法已成为半导体行业不可或缺的技术。

PSL在硬件断言语言中独一无二的特点是其分层架构:它将布尔层、时序层和验证层清晰分离。这种清晰的分离使得PSL无需修改即可同样适用于RTL仿真、门级仿真和形式模型检验,为验证工程师提供了极大的灵活性。

PSL语言架构与时序逻辑基础

PSL语言构建在四层架构之上。布尔层由设计信号上的标准布尔表达式组成。时序层提供基于线性时序逻辑扩展了顺序扩展正则表达式的算子,用于指定随时间变化的行为。验证层提供assert、assume和cover等指令,告诉验证工具如何处理属性。建模层允许辅助代码支持属性规范。

时序算子是PSL的核心。基本的LTL算子包括always(全局)、never(全局否定)、eventually!(将来必然)、until!(强直到)、before和next。这些算子通过@算子补充了时钟变体,允许属性相对于特定时钟沿进行指定。SERE层支持类似正则表达式的方式指定顺序行为,算子包括连接、融合、Kleene星号和布尔交集。

PSL核心时序算子及其语义
算子 语法示例 含义
always always (req -> ack) 属性在每个周期都成立
never never (busy & grant) 条件永远不会发生
eventually! eventually! (done) 条件最终必须成立(强算子)
until! req until! ack req保持成立直到ack发生
next next (ready) 条件在下一个周期成立
before a before b a在b之前发生
SERE连接 {req; ack} req后接下一个周期的ack
SERE融合 {req : ack} req和ack在同一周期重叠
SERE重复 {start; data[*4]; done} data在start和done之间精确保持4个周期
编写PSL属性时一个常见陷阱是强弱时序操作符的区别。eventually!(带感叹号)是强算子,表示事件必须发生,而eventually(不带感叹号)在上下文中可能是弱算子。在形式验证中,在需要强算子的地方使用弱算子可能导致属性空洞地通过。务必验证属性是否足够强以捕获预期行为。

基于断言的验证方法与工程实践

PSL支持三种验证指令。assert指令指定必须始终成立的属性。assume指令指定对设计环境的约束。cover指令指定覆盖点,跟踪仿真过程中是否执行了某些行为。从工程方法学的角度来看,有效的PSL使用遵循几种既定模式:接口协议属性的规范、使用PSL assume指令约束形式验证工具、以及使用cover指令定义功能覆盖点。行业经验表明,具有全面PSL断言的设计在验证过程中缺陷发现率提高30-50%,硅后缺陷减少40-60%。

PSL验证指令及其应用
指令 用途 动态仿真 形式验证 典型应用
assert 强制设计属性 每个周期检查 证明属性成立 协议合规性,数据完整性
assume 环境约束 监控输入合法性 约束输入空间 总线接口假设,复位序列
cover 覆盖度量 跟踪行为发生 状态可达性分析 功能覆盖,边界情况
最有效的PSL验证策略将动态仿真与形式验证相结合。仿真运行数百万个周期,使用逼真的流量模式验证系统级行为,而形式工具则彻底证明关键属性,如”无数据损坏”、”无死锁”和”FIFO永不上溢”。这种互补方法比单独使用任何一种方法都能获得更高的验证置信度。

基于PSL形式验证的工程设计要点

在实际验证流程中有效部署PSL需要关注几个工程考量。首先,属性集必须作为设计规范的一个组成部分来开发,而不是在验证阶段才事后添加。最佳实践是在架构阶段捕获PSL断言,在RTL编码开始之前将属性转化为可执行的规范来指导实现。其次,PSL属性的复杂度显著影响形式验证工具的性能。高度复杂的属性可能导致模型检验中的状态空间爆炸。工程师应将复杂属性分解为更小、更简单的断言。第三,PSL assume指令与复位序列之间的交互需要仔细设计。PSL提供了default clock和复位处理结构来管理这些场景。

问1:PSL和SystemVerilog断言之间有什么区别?
答:PSL具有更清晰的布尔层、时序层和验证层分离,使用基于LTL的时序算子。SVA集成在SystemVerilog语言中,使用不同的基于序列和属性的时序语法。
问2:PSL能否用于软件验证?
答:虽然PSL主要用于硬件,但其时序逻辑基础已影响软件验证语言。嵌入式软件和并发软件验证可以使用相关概念。
问3:一个复杂的IP模块通常需要多少个PSL断言?
答:行业经验各不相同,但一个典型的复杂IP模块可能有200-1000个断言。一般指导原则是每个接口协议5-10个断言,每个有限状态机3-5个断言。
问4:PSL形式验证的主要局限性是什么?
答:主要局限性是状态空间爆炸问题。对于大型设计,完整的形式验证在计算上变得难以处理。通常采用组合验证、抽象和证明分解等技术来管理这种复杂度。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注