【问题标题】:Why "Implication" and "if–else" constraints showing different results?为什么“Implication”和“if-else”约束显示不同的结果?
【发布时间】: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


    【解决方案1】:

    两个约束之间的逻辑不同。要使您的 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]};
       }
    

    【讨论】:

      猜你喜欢
      • 2012-05-11
      • 2011-12-25
      • 1970-01-01
      • 2016-11-18
      • 2019-02-13
      • 2016-10-10
      • 2019-02-16
      • 2017-11-04
      • 1970-01-01
      相关资源
      最近更新 更多