gpt4 book ai didi

properties - 我可以在一个循环中生成多个 SystemVerilog 属性吗?

转载 作者:行者123 更新时间:2023-12-04 22:14:28 24 4
gpt4 key购买 nike

我有两个打包的信号数组,我需要为该属性创建一个属性和关联的断言,以证明这两个数组在某些条件下是相同的。我正在正式验证并且该工具无法在单个属性中证明两个完整数组,因此我需要将其拆分为单个元素。那么有没有一种方法可以使用循环为数组的每个元素生成属性?目前我的代码非常冗长且难以导航。

我的代码目前看起来像这样:

...
property bb_3_4_p;
@(posedge clk)
bb_seq
|=>
bb_exp [3][4] == bb_rtl [3][4] ;
endproperty

property bb_3_5_p;
@(posedge clk)
bb_seq
|=>
bb_exp [3][5] == bb_rtl [3][5] ;
endproperty

property bb_3_6_p;
@(posedge clk)
bb_seq
|=>
bb_exp [3][6] == bb_rtl [3][6] ;
endproperty
...

...
assert_bb_3_4: assert property (bb_3_4_p);
assert_bb_3_5: assert property (bb_3_5_p);
assert_bb_3_6: assert property (bb_3_6_p);
...

这就是我希望我的代码的样子:
for (int i = 0; i < 8; i++) 
for (int j = 0; j < 8; j++)
begin
property bb_[i]_[j]_p;
@(posedge clk)
bb_seq
|=>
bb_exp [i][j] == bb_rtl [i][j] ;
endproperty
assert_bb_[i]_[j]: assert property (bb_[i]_[j]_p);
end

最佳答案

您可以尝试使用端口声明该属性,以便您可以将其重用于多个断言。然后使用生成循环声明您的断言。

module
...
property prop1(signal1,signal2);
@(posedge clk)
bb_seq
|=>
signal1 == signal2 ;
endproperty
...
generate
for (genvar i = 0; i < 8; i++)
for (genvar j = 0; j < 8; j++)
begin : assert_array
assert property (prop1(bb_exp[i][j],bb_rtl[i][j]));
end
endgenerate
...
endmodule

您还可以在断言中内联该属性:
module
...
generate
for (genvar i = 0; i < 8; i++)
for (genvar j = 0; j < 8; j++)
begin : assert_array
assert property (@(posedge clk) bb_seq |=> bb_exp[i][j] == bb_rtl[i][j]);
end
endgenerate
...
endmodule

关于properties - 我可以在一个循环中生成多个 SystemVerilog 属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12929887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com