【问题标题】:How to use foreach in constraint in multidimensional array如何在多维数组的约束中使用foreach
【发布时间】:2023-02-22 01:45:53
【问题描述】:

我有两个相关的信号。对于所有 i 值,signalToConstraint[i][j][k] 应小于 signalLimit[i]。我尝试在下面编写代码,它适用于索引 0,但对于其余的(1 到 7)它不起作用。

rand logic [7:0][1:0][15:0][3:0] signalToConstraint;
rand logic [7:0][3:0] signalLimit;

constraint c_testConstrain {
    foreach (signalToConstraint[i]) {
        foreach (signalToConstraint[i][j]) {
            foreach (signalToConstraint[i][j][k]) {
                signalToConstraint[i][j][k] < signalLimit[i];
            }
        }
    }
}

只是为了让它更清楚。比如我要signalToConstraint[4][1][12] &lt; signalLimit[4]

【问题讨论】:

    标签: system-verilog


    【解决方案1】:

    您显示的 foreach 语法通常是不可接受的。一些工具混淆

    foreach (signalToConstraint[i]) {
         foreach (signalToConstraint[i][j]) {
    

    并将第二行中的 [i] 视为新的迭代器,而不是上一行的迭代值。

    正确的写法是使用逗号分隔的迭代器列表

    constraint c_testConstrain {
      foreach (signalToConstraint[i,j,k])
        signalToConstraint[i][j][k] < signalLimit[i];  
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2016-02-01
      • 1970-01-01
      相关资源
      最近更新 更多