SV中|-> 和 |=>的区别与关系

在 SystemVerilog 断言(SVA)中,|-> 和 |=> 都是蕴含操作符 ,用于连接前提条件(antecedent)和后续条件(consequent)。它们的核心区别在于检查后续条件的起始时间点。

1. 重叠蕴含 |->

  • 含义 :若前提条件在当前时钟周期成立,则在同一时钟周期开始检查后续条件。

  • 时间关系 :前提和后续的第一个时钟周期重叠。

示例

复制代码
property p_overlap;
  @(posedge clk) a |-> b;
endproperty
  • 当 a 在时钟周期 T 为真,则在同一个周期 T 检查 b 是否为真。

  • 如果后续条件是一个序列(如 ##1 c),则从周期 T 开始匹配序列:b 在 T 周期成立,c 在 T+1 周期成立。

2. 非重叠蕴含 |=>

  • 含义 :若前提条件在当前时钟周期成立,则从下一个时钟周期开始检查后续条件。

  • 时间关系 :前提和后续的第一个时钟周期间隔一个周期。

示例

复制代码
property p_nonoverlap;
  @(posedge clk) a |=> b;
endproperty
  • 当 a 在周期 T 为真,则在下一个周期 T+1 检查 b 是否为真。

  • 这等价于 a |-> ##1 b。

3. 对比表

操作符 后续检查起始点 等价写法 典型应用场景
` ->` 同一周期 `a
` =>` 下一周期 `a

4. 举例说明

假设一个简单的协议:请求 req 拉高后,同一周期内 允许 gnt 为高(流水线响应),或者下一个周期 gnt 必须为高。

  • 使用 |-> 检查立即响应:

    复制代码
    req |-> gnt;  // gnt 必须在 req 的同一周期有效
  • 使用 |=> 检查延迟响应:

    复制代码
    req |=> gnt;  // gnt 必须在 req 的下一周期有效

5. 注意事项

  • 序列嵌套 :后续条件可以是复杂序列。|-> 序列的起点是当前周期,|=> 的起点是下一周期。

  • 多周期延迟 :若需要延迟多拍,推荐用 |-> ##n ...,更清晰。|=> 仅用于正好一拍延迟。

  • 常见错误:混淆两者会导致断言在错误的时间点检查,产生误报或漏报。

总结

  • 用 |->:前提满足后立即检查后续(同一周期开始)。

  • 用 |=>:前提满足后下一拍才开始检查后续。

选择哪个取决于设计时序:响应是组合逻辑路径(同拍)还是寄存输出(下一拍)。

相关推荐
星夜离尘567 小时前
FPGA 复位回归实验:双时钟停钟、释放中重入与消费端首拍自检
fpga开发
szxinmai主板定制专家8 小时前
ZYNQ 数据采集方案踩坑总结:电力强电磁干扰、工业现场多协议适配优化
运维·人工智能·fpga开发·机器人·zynq
幻智星科技9 小时前
一个开源的纯FPGA网口采集卡
网络协议·fpga开发·udp
bobuddy9 小时前
硬件加速三件套:emulator-FPGA 原型-云仿真
fpga开发
szxinmai主板定制专家14 小时前
软硬协同!ZYNQ 高速多通道同步采集,变电站 / 工厂设备状态监测方案详解
人工智能·深度学习·机器学习·fpga开发·zynq·rk3576
FPGA小徐14 小时前
FPGA 8阶LFSR加扰/解扰器设计
fpga开发
逐光者93316 小时前
超前进位加法器:原理、推导与 Verilog 实现
fpga开发
szxinmai主板定制专家17 小时前
ZYNQ PL+PS 架构拆解|工业自动化与电力物联网高速数据采集、预处理与协议上云
arm开发·人工智能·物联网·fpga开发·数据采集卡·rk3576
szxinmai主板定制专家18 小时前
告别 ARM 实时性短板:基于 ZYNQ 的电力故障录波 + 工业振动数据采集系统设计
arm开发·人工智能·fpga开发·zynq·数据采集卡·arm+fpga·rk3588+fpga
FPGA小徐20 小时前
FPGA 实现 Canny 边缘检测|大白话原理 + 专业工程解析
fpga开发