with条件语句 & item.index

class C;
  rand int arr[$];
  rand int c;
  rand int d;
  rand int e;
  constraint c0 {
    foreach (arr[i]) arr[i] inside {[0:200]};
    arr.size() == 5;
    c == arr.sum() with (item < 100);
    d == arr.sum() with (arr[item.index] >= 100);
    e == arr.sum(y) with (y%2 == 0);
  }
endclass

program automatic test;
  initial begin
    C obj = new;
    obj.randomize();
$display("===");
    $display("%p", obj.arr);
$display("===");
    $display(obj.c);
    $display(obj.d);
    $display(obj.e);
$display("===");

  end
endprogram
  • c == arr.sum() with (item < 100);
  • d == arr.sum() with (arr[item.index] >= 100);
  • e == arr.sum(y) with (y%2 == 0);

这三句表示的意思是一样的。详细解释如下:

  1. arr.sum() 是求队列arr的所有元素的和,返回int类型数值。
  2. arr.sum() with (item < 100) 语句表示将队列arr中元素值小于100的元素求和。
    在with条件语句中,item被称为重复参数,它代表数组中的每一个单独的元素。item是缺省的名字,也可以指定别的名字。比如
  3. arr.sum(y) with (y%2 == 0) 中的y就是重复参数,跟item的作用是一样的;表示对队列arr中所有的偶数元素求和。
  4. arr.sum() with (arr[item.index] >= 100) 表示对队列arr中所有的值大于等于100的元素求和。其中item表示队列中的每个元素,index表示该元素所在队列中的索引。
item.index的一个列子

将数组arr中的元素数值与元素索引值相同的元素取出来。

int arr[]; 
int q[$];
...
// find all items equal to their position (index)
q = arr.find with ( item == item.index );

注意在下面的$display()打印中,
$display("%p", obj.arr)
打印队列可以用用%p,
以前打印队列是用foreach()打印出来每个元素。

你可能感兴趣的:(with条件语句 & item.index)