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 ...,更清晰。|=> 仅用于正好一拍延迟。

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

总结

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

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

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

相关推荐
码农小韩16 小时前
FPGA学习(二)——LED闪烁
fpga开发·verilog·fpga·led·组合逻辑·分频设计
9527华安1 天前
FPGA纯verilog实现DP视频接口,支持2K60帧分辨率,提供3套工程源码和技术支持
fpga开发·音视频·dp
ChaseVLSI2 天前
FPGA与ASIC的区别详解:内部结构、开发成本与适用场景,项目选型到底该选哪个
嵌入式硬件·fpga开发·硬件架构·硬件工程
9527华安3 天前
FPGA实现ARINC818总线协议,基于GT Transceivers Wizard高速收发器,提供7套工程源码和技术支持
fpga开发·transceivers·arinc818
小蘇的FPGA3 天前
fpga-wide-data-crc32
fpga开发
落雨无风3 天前
fpga板级调试常见问题
fpga开发
码农小韩4 天前
FPGA学习(一)——LED点灯与开发流程
学习·fpga开发·入门·环境配置·仿真·点灯
FPGA小迷弟4 天前
FPGA 与千兆以太网:各类物理接口的形式、区别、使用方法与应用场景详解
tcp/ip·macos·fpga开发·udp·fpga
NamoAmitabha1284 天前
Zynq 的 AXI GPIO,是“ARM 通过一条国际标准高速公路(AXI 总线),去遥控 FPGA 里的一个寄存器”。---deepseek
fpga开发·zynq--ps
NamoAmitabha1284 天前
ARM 不懂寄存器,它只懂内存地址---deepseek
fpga开发·zynq--ps