《SVA断言系统学习之路》【02】并发断言

一 基本概要

并发断言用于描述随时间推移的行为特性。与即时断言不同,其评估模型基于时钟周期,使得并发断言仅在时钟跳变时刻被评估。评估中所用变量值为采样值。通过这种方式,无论仿真器内部的事件排序与评估机制如何,都能从评估中获得可预测的结果。这种执行模式也对应于从RTL描述进行硬件解释的综合模型。

断言中使用的变量值在时间槽的预载区(Preponed region)进行采样,而断言本身则在观察区(Observe region)完成评估。

并发断言规范采用的时序模型基于时钟脉冲,并使用广义的时钟周期概念。时钟的定义由用户显式指定,且可随不同表达式而变化。

时钟脉冲是时间上的原子时刻,其本身不占据时间跨度。在任何仿真时间点,时钟仅脉冲一次,且该仿真时间的采样值将用于并发断言评估。在断言中,采样值是时钟脉冲时刻变量的唯一有效值。图17-1展示了时钟推进过程中变量的数值变化:信号req在时钟脉冲1和2处为低电平;在脉冲3时刻,其采样值为高并保持至脉冲6;变量req在脉冲6处的采样值为低,并持续至脉冲10。请注意,仿真值虽然在脉冲9处跳变为高,但脉冲9时刻的采样值仍为低。

断言中使用的表达式始终与时钟定义绑定。采样值用于评估值变化表达式或布尔子表达式,这些表达式是判定序列匹配所必需的。

这里请注意:

(1) 必须确保所定义的时钟行为无毛刺,否则可能采样到错误值。

(2)若出现在时钟表达式中的变量同时出现在断言表达式内,该变量在这两处使用的值可能不同:时钟表达式使用变量的当前值,而断言内部使用变量的采样值。

关于(2)点,更加详细说明如下:

  1. 时钟表达式中的变量 :使用当前值(Current Value)

    • 当前值 指的是在仿真时间步长(time slot)的主动区(Active Region) 等阶段计算出的最新值。它可能因为仿真事件排序而随时变化,可能存在毛刺(glitch)。
  2. 断言表达式中的变量 :使用采样值(Sampled Value)

    • 采样值 指的是在仿真时间步长最开始、所有变化发生之前的预载区(Preponed Region) 捕获的值。它代表了这个时间点开始时的"稳定状态",过滤掉了该时间点内产生的所有毛刺。

控制序列评估的时钟表达式可以比单一信号名更为复杂。诸如(clk && gating_signal)(clk iff gating_signal)等表达式可用于表示门控时钟,还可能出现其他更复杂的表达式。然而,为确保系统行为的正确性并尽可能符合真正的基于周期的语义,时钟表达式中的信号必须无毛刺,且在任意仿真时间点最多只能发生一次跳变。

二 并发断言语法

相关推荐
NamoAmitabha1285 天前
UVM在时间维度上也做了规范,phase机制----deepseek讲解
systemverilog·uvm
NamoAmitabha1285 天前
SystemVerilog 中的 :: 作用域解析运算符详解--deepseek讲解
systemverilog·uvm
NamoAmitabha1287 天前
class基础+继承的专项训练
systemverilog
NamoAmitabha1287 天前
rand/randc/constraint 练习
systemverilog
Salt & Light1 个月前
UVM 字段自动化 Field Automation:让打印、复制、比较自动化
学习·systemverilog·uvm
北方孤寂的灵魂2 个月前
关于AXI协议详解
verilog·systemverilog·sv·数字验证
Salt & Light2 个月前
SV基础之连接设计和测试平台
systemverilog
fei_sun3 个月前
【SystemVerilog】连接设计和测试平台(待补充)
systemverilog
fei_sun4 个月前
【SystemVerilog验证】数据类型(待补充)
数据结构·systemverilog
不会武功的火柴4 个月前
SystemVerilog语法(11)-面向对象编程下篇
面向对象·fpga·systemverilog·ic验证