system-verilog - 为什么“Implication”和“if-else”约束显示不同的结果?
问题描述
为什么我在使用 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]};
}
推荐阅读
- html - 在一个表中我需要有thead、tbody 和tfooter 吗?
- batch-file - 问:寻找使用批处理文件自动运行 AWS CLi 命令的解决方案
- python - 使用 Slack 中的实时投票更新消息
- r - 按子组为最常见的特征赋值
- r - 如何在执行脚本和绘制GGPLOT2时将SAP应用程序中用户选择的值传递给R脚本
- python - 如何在 Kivy 中加载多个图像而不会耗尽内存
- javascript - Next.js 动态路由:避免为路径参数生成新页面
- emgucv - EMGU - EDSR:无法创建层 DepthToSpace
- visual-studio-code - VS Code自己的语言,如何更改注释字符(撇号)而不是//?
- node.js - NodeJS 中的要求构造行为