必威体育Betway必威体育官网
当前位置:首页 > IT技术

SV randomize

时间:2019-10-30 08:14:30来源:IT技术作者:seo实验室小编阅读:57次「手机版」
 

randomize

randomize中的变量只支持2-state的values,不支持4-states。

randc类型的变量不能被约束在solve------before的语句中。

constraint可以被定义在class外

    class  C;

      rand int x;

      constraint protol;    //隐式的

      extern constraint protol2;    //显示的

     endclass

     constraint C::protol { x inside {-4, 5, 7}; }

     constraint C::protol2  { x >= 0; }

constraint的继承性

由于内置的randomize()函数virtual function,所以constraint也是只和对象的类型有关,extend会覆盖baseclass

在virtual class中可以定义pure cosntraint,只作为一个constraint 原型,但是class中是不允许出现pure constraint的。

unique关键字,表示之后的几个变量的值不重复;需要加{},表明区间范围。

constraint u { unique {b, a[2:3], exclude}; }

constraint exclusion { excluded == 5; }

constraint中的迭代只能使用foreach,对于array的计算,可以使用with (item)的方式

constraint c1 {A.size == 5;}

constraint c2 { A.sum() with (int'(item)) < 1000; }

global constraint,当一个object进行随机的时候,包含的所有的object也会一起随机,被调用randomize()方法。

static constraint,主要作用是constraint_mode()约束的时候,是所有的instant一起被关闭或者打开

constraint中调用function,需要满足几个条件:

1) 函数的参数不能是output或者ref类型,可以是input和const ref类型。

2) 函数中不能调用rand_mode()和constraint_mode()的方法。

constraint中的guard expression:约束中的某些逻辑可能是错的,但是通过&&和||逻辑,某些项可以是不关注的。

   a.x==5时,并不关注b是不是null的。

soft constraint,相较于hard constraintsolver并不需要一定解决这些constraint,并不会造成solver failure

  p的with randomize优先级高,class内定义的constraint不需要被考虑

priority,class内部的soft constraint,按定义的顺序排列优先级,越晚的优先级越高。

    高优先级,可以覆盖掉低优先级的约束。(与override不一样的是不需要cosntraint名字相同,只是作用在变量的约束上。)

discard soft var,将之前所有的关于变量var的软约束都取消掉。

randomize function,是每个class中内建的一个virtual的function。成功返回1,失败返回0。

还有两个hook function,pre_randomize()和post_randomize()是virtual的,但是必须super调用 被override的function

randomize() with {};in-line的randomize,也必须满足之前定义的约束,只是一个子集

  其中的变量的范围约束,this,super,可以绑定某个handle

             local::,绑定调用randomize() with的当前scope,如function,task

randomize(var)加参数时,只对某个参数进行随机化,但是pre_randomize和post_randomize仍然会被调用

  如果var是null,SV并不进行随机,只是check当前的约束条件是否都能被满足

std::randomize(),是SV中单独定义的一个static的方法,可以对class之外的变量进行随机

可以加with来约束变量。与class中的pre_randomize和post_randomize完全无关。

$urandom(seed)和$urandom_range(max, min),对变量随机,但是不能加约束,而且都是32bit的随机,只赋值低位。

srandom(seed),是一个function,可以用来初始化一个RNG object。通过class handle调用

randcase,建模不同的选择分支,randsequence,更像是建模状态机的

文章最后发布于: 2018-03-16 10:34:00

相关阅读

【VBA研究】Rnd和Randomize的关系和理解

iamlaosong文1、程序中如果只用Rnd取随机数时,每次执行都会产生相同的随机数序列。2、程序如果先用Randomize number初始化(number

分享到:

栏目导航

推荐阅读

热门阅读