【发布时间】:2021-10-19 18:53:29
【问题描述】:
为什么我在使用 if-else 和蕴含约束时会得到不同的结果?
由于这两个被认为是相同的,我认为我不应该有任何区别。 在 if-else 情况下,最后一项不是约束。
class consMultiline;
rand int arr[$];
rand int arrQ[$];
constraint c_iterate {
arr.size inside {[4:4]};
foreach(arr[i]) {
(i < arr.size - 1) -> arr[i+1] > arr[i];
arr[i] inside {[1:100]};
}
}
constraint c_iterateQ {
arrQ.size inside {[4:4]};
foreach(arrQ[i]) {
if( i < (arrQ.size -1)) {
arrQ[i+1] > arrQ[i];
arrQ[i] inside {[1:100]};
}
}
}
endclass
module tb;
initial begin
consMultiline cMult = new;
for (int i = 0; i < 1; i++) begin
cMult.randomize();
$display ("%t %M: Arr=|%p| ", $time, cMult.arr);
$display ("%t %M: ArrQ=|%p| ", $time, cMult.arrQ);
end
end
endmodule
输出:
0 tb.unmblk1.unmblk1: Arr=|'{1, 7, 23, 47}| 0 tb.unmblk1.unmblk1: ArrQ=|'{23, 28, 67, 1364678739}|
我想知道我错过了什么并得到不同的结果。
【问题讨论】:
标签: system-verilog verification