为什么 "Implication" 和 "if–else" 约束显示不同的结果?
Why "Implication" and "if–else" constraints showing different results?
为什么我在使用 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}|
我想知道我遗漏了什么并得到不同的结果。
你的两个约束之间的逻辑不同。要使您的 if-else
符合含义,请更改:
foreach(arrQ[i]) {
if( i < (arrQ.size -1)) {
arrQ[i+1] > arrQ[i];
arrQ[i] inside {[1:100]};
}
}
至:
foreach(arrQ[i]) {
if( i < (arrQ.size -1)) {
arrQ[i+1] > arrQ[i];
}
arrQ[i] inside {[1:100]};
}
为什么我在使用 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}|
我想知道我遗漏了什么并得到不同的结果。
你的两个约束之间的逻辑不同。要使您的 if-else
符合含义,请更改:
foreach(arrQ[i]) {
if( i < (arrQ.size -1)) {
arrQ[i+1] > arrQ[i];
arrQ[i] inside {[1:100]};
}
}
至:
foreach(arrQ[i]) {
if( i < (arrQ.size -1)) {
arrQ[i+1] > arrQ[i];
}
arrQ[i] inside {[1:100]};
}