为什么 "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]};
   }