【握手协议3】握手协议中常用的并发断言介绍¶
- Version
- linhuangnan
- 2024-01-03
- 学习握手协议专栏
- review
同步写在assertion文件中然后bind到module上: 这种方式意味着你将创建一个单独的断言文件,这个文件包含了所有相关的并发断言。然后,你会使用Verilog或SystemVerilog的bind构造将这些断言"绑定"到特定的模块上。这样可以在不修改原本模块代码的情况下增加额外的验证逻辑,使得验证和设计可以分开进行。
写在对应的interface中: 另一种方法是直接在interface定义中包括并发断言。在SystemVerilog中,interface被用来封装与模块间通信相关的信号和协议。在interface内部编写断言意味着这些断言与通信接口紧密关联,可以提高代码的模块化和重用。
而于握手接口对应的interface形式为:
interface axi_ar_interface(input clk, rst_n);
logic valid;
logic ready;
logic [8 -1:0]data;
endinterface
那么基于接口命名来完成相关断言。
1.复位后valid不能为不定态(X态或者Z态)
property valid_xz_chk;
@(posedge clk) disable iff(~rst_n)
~$isunkonwn(valid);
endproperty
2.复位后ready不能为不定态(X态或者Z态)
property ready_xz_chk;
@(posedge clk) disable iff(~rst_n)
~$isunkonwn(ready);
endproperty
3.data在valid为1时不能不定态(X态或者Z态)
property data_xz_chk;
@(posedge clk) disable iff(~rst_n)
valid |-> ~$isunkonwn(data);
endproperty
4.data在valid为高后,在只有在握手之后才能跳变,否则必须保持
property data_stable_chk;
@(posedge clk) disable iff(~rst_n)
valid && !ready |-> ##1 $stable(data);
endproperty
5.valid在valid为高后没有ready握手之前,不能跳变
property valid_stable_chk;
@(posedge clk) disable iff(~rst_n)
valid && !ready |-> ##1 valid;
endproperty
6.valid之后若干拍ready必须为1
property data_stable_chk;
@(posedge clk) disable iff(~rst_n)
valid |-> ##[0:$] ready;
endproperty