SVA(systemverilog assertion)序列循环算子[*] [->] [=]

本文详细介绍了循环结构中的[*n:$]、[*]、[+]、[=n]、[->n]等算子的含义及使用方法。这些算子用于描述序列在不同周期内的重复模式,包括连续和非连续循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • [*n : $], [*] [+]连续循环,是针对sequence的连续循环

[* n:$]结构类似于[* n:m],除了m被$符取代,$符代表无限的意思,并且n意味着重复最少n个周期。 [*]是[* 0:$]的缩写,表示重复至少0次,最多无限次。 [+]是[* 1:$]的缩写,表示重复至少1次,最多无限次。

  • [=n], [=n:m] 非连续循环算子

能够对不连续的循环进行评价,循环评价结束时,不连续的可能性依然继续。重复次数可以是固定常数或固定范围。

b[=m] is equivalent to ( b [->m] ##1 !b [*0:$]
b[=1] is equivalent to:
!b[*0:$] ##1 b ##1 !b[*0:$]
b[=2] is equivalent to:
!b[*0:$] ##1 b ##1 !b[*0:$] ##1 b ##1 !b[*0:$]

(a) |=> (b[=2] ##1 c);

该属性指出,如果从a成立下一个周期开始,那么b应该成立两次,b要么是连续的要么是不连续的,然后稍后一段时间(即下一个周期或之后)出现c。

如果在第二次出现b后出现新的b(且 c 没有成立),则该属性失败。
但是,如果在b的第二次成立之后,c在新的b之前的任何时间发生,或者与最后一次b同时出现,则属性成功。

  • [->n ], [->n:m] goto循环算子

goto循环算子(Boolean[ - > n])允许布尔表达式(而不是序列)在连续或不连续的循环中重复,而且循环评价结束时,不连续的可能性也结束了。 重复次数可以是固定常数或固定范围。

 b [->m] is equivalent to ( !b [*0:$] ##1 b)[*m]
b[->1] is equivalent to:
!b[*0:$] ##1 b
b[->2] is equivalent to:
!b[*0:$] ##1 b ##1 !b[*0:$] ##1 b
(a)|=>(b [->2] ## 1 c);

上述属性指出,如果从a成立下一个周期开始,那么b应该成立两次,它可以是连续的或不连续的。 但是,c必须发生在b最后一次出现的下一个周期。

各个运算符图示如下:


### 交叠蕴含(`|->`)与非交叠蕴含(`|=>`)的定义 在SystemVerilog Assertion (SVA) 中,交叠蕴含(`|->`)和非交叠蕴含(`|=>`)是两种重要的操作符,用于描述时序逻辑行为。它们的主要区别在于如何处理触发条件后的序列匹配。 #### 定义 - **交叠蕴含 (`|->`)** 表示当左侧条件成立时,在当前时刻或之后的时间窗口内寻找右侧序列的第一个匹配项[^4]。这意味着左侧条件和右侧序列可能在同一时间点重叠。 - **非交叠蕴含 (`|=>`)** 表示当左侧条件成立时,从下一个时钟边沿开始查找右侧序列的匹配项。因此,左侧条件和右侧序列不会在同一时间点重叠。 --- ### 应用场景差异 #### 1. **交叠蕴含的应用场景** 交叠蕴含适用于需要立即响应的情况,即希望在同一个时钟周期检测到事件并启动后续动作。例如: - 验证某个信号的变化是否会在同一周期或其他指定时间内引发另一个信号变化。 - 检查错误标志位是否能在特定条件下及时清除。 **代码示例:** ```verilog // 使用 |-> 的例子 property immediate_response; @(posedge clk) $rose(error_flag) |-> ##[0:5] clear_signal; endproperty assert property(immediate_response); ``` 在此示例中,`$rose(error_flag)` 发生后,允许 `clear_signal` 在相同周期或最多五个周期内有效。 --- #### 2. **非交叠蕴含的应用场景** 非交叠蕴含通常用于验证因果关系发生在不同时间点上的情况,特别是需要等待至少一个时钟周期再评估后续条件的情形。例如: - 确认状态机转换是否按预期执行。 - 测试寄存器写入后数据是否正确反映在其输出端口上。 **代码示例:** ```verilog // 使用 |=> 的例子 property delayed_transition; @(posedge clk) current_state == STATE_A |=> next_state == STATE_B; endproperty assert property(delayed_transition); ``` 在这个例子中,只有在下一周期才能判断 `next_state` 是否等于 `STATE_B`。 --- ### 总结对比表 | 特性 | 交叠蕴含 (`|->`) | 非交叠蕴含 (`|=>`) | |---------------------|-------------------------------------------|------------------------------------------| | 时间偏移 | 可能无延迟 | 至少有一个时钟周期延迟 | | 左右条件的关系 | 允许左条件和右序列部分或完全重合 | 不允许任何重合 | | 常见应用 | 即时反应需求 | 下一周期生效 | 通过以上分析可以看出,选择哪种蕴含取决于具体的设计意图以及待验证的行为特点。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值