前言
数字前端的功能验证利器——SVA断言学习笔记_moon9999的博客-CSDN博客_sva断言
学会了写断言还要学会将断言bind到环境中,因此总结归纳下bind sva_module到RTL上的方式;
正文开启
并发断言SVA的组织形式一般是,把断言组织在一个module中,之后将这个sva_module bind在对应的rtl_module上;
bind module_name sva_name sva_inst;
第一种方式,断言会关联到module_name的所有例化示例,在VCS中bind之后sva_inst路径位于rtl_inst下一层;
例如:
module test_sva #(parameter DATA_WIDTH = 4)(
input clk ,
input rst_n ,
input data_out_vld ,
input data_out_sop ,
input data_out_eop ,
input [DATA_WIDTH-1:0] data_out
);
logic before_rst = 1'b1;
always @(*)begin
if(~rst_n) begin
#1ps;
before_rst = 1'b0;
end
end
property onehot_chk;
@(posedge clk) disable iff(before_rst)
$onehot(top.U_flow_proc.data_out);
endproperty
endmodule
bind flow_proc test_sva U_test_sva(.*);
bind module_inst sva_name sva_inst(.*);
断言会关联到特定的rtl_inst上,module_inst一般需要完整路径;
例如:
module test_sva #(parameter DATA_WIDTH = 4)(
input clk ,
input rst_n ,
input data_out_vld ,
input data_out_sop ,
input data_out_eop ,
input [DATA_WIDTH-1:0] data_out
);
logic before_rst = 1'b1;
always @(*)begin
if(~rst_n) begin
#1ps;
before_rst = 1'b0;
end
end
property onehot_chk;
@(posedge clk) disable iff(before_rst)
$onehot(top.U_flow_proc.data_out);
endproperty
endmodule
bind top.U_flow_proc test_sva U_test_sva(.*);
bind module_name: inst1, inst2 sva_name sva_inst(.*);
断言会关联到module_name的某些例化实例下;
例如:
module test_sva #(parameter DATA_WIDTH = 4)(
input clk ,
input rst_n ,
input data_out_vld ,
input data_out_sop ,
input data_out_eop ,
input [DATA_WIDTH-1:0] data_out
);
logic before_rst = 1'b1;
always @(*)begin
if(~rst_n) begin
#1ps;
before_rst = 1'b0;
end
end
property onehot_chk;
@(posedge clk) disable iff(before_rst)
$onehot(top.U_flow_proc.data_out);
endproperty
endmodule
bind flow_proc: top.U_flow_proc test_sva U_test_sva(.*);
直接例化sva_module sva_inst(.*);
如果不采用bind方式,也可以把sva_module作为一个rtl_module直接例化在环境中,或者例化在module中。
test_sva #(.DATA_WIDTH(8)) U_test_sva(clk, rst_n);
不考虑继承性的话,断言也中可以直接使用全局路径信号进行检查。
property onehot_chk;
@(posedge clk) disable iff(before_rst)
$onehot(top.U_flow_proc.data_out);
endproperty
接口连接
连接时使用.*可以自动连接名称相同、类型匹配的接口信号,其他信号可以使用.sig1(rtl.sig2)显示的写出,两种方式在连接中可以混用。