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

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

1. 重叠蕴含 |->

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

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

示例

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

  • 如果后续条件是一个序列(如 ##1 c),则从周期 T 开始匹配序列:bT 周期成立,cT+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 ...,更清晰。|=> 仅用于正好一拍延迟。

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

总结

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

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

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

相关推荐
2601_961845422 小时前
2027考研数学大纲|数一数二数三
考研·fpga开发·ar·vr·mr·oneflow
X_xcccc5 小时前
2026年嵌入式智能核心,从异构计算到敏捷开发的硬核指南
fpga开发·敏捷流程·zynq-7000·fpga板卡定制
9527华安7 小时前
FPGA实现GTX Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·aurora·gtx·高速接口·高速收发器·transceivers
ALINX技术博客9 小时前
【黑金云课堂】FPGA技术教程Linux开发:摄像头GPU渲染显示/Qt OpenGLES使用
linux·qt·fpga开发·gpu
S&Z34639 小时前
SZ901下载器烧写国产Flash指南
fpga开发
liuluyang5309 小时前
Verilog-1995风格,reg变量声明两次
fpga开发
cjie22111 小时前
安路好用的调试工具VPI
fpga开发
chenlance1 天前
基于FPGA的激光器多通道数据采集与波形控制系统设计
fpga开发
9527华安1 天前
FPGA实现GTP高速收发器2路视频传输,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
图像处理·fpga开发·aurora·高速收发器·8b10b·derdes
cjie2211 天前
lanczos插值引起的振铃现象
计算机视觉·fpga开发