返回介绍

12.10 内联随机变量控制

发布于 2020-09-09 22:55:50 字数 890 浏览 1087 评论 0 收藏 0

randomize()方法可以用来临时性地控制一个类实例或对象中的随机变量和状态变量的集合。当调用无参数的randomize方法的时候,它的行为就像前一节所描述的那样,也就是说,它会为对象中所有使用rand或randc声明的随机变量赋新的值,这样所有的约束都会被满足。当调用带有参数的randomize的时候,它的参数指定了该对象内随机变量的完整集合;对象中的所有其它变量都被认为是状态变量。例如,考虑下面的类以及对randomize方法的调用:

class CA;
    rand byte x, y;
    byte v, w;
    constraint c1 {(x < v && y > w)};
endclass

CA a = new;
a.randomize();       // 随机变量:x, y  状态变量:v, w
a.randomize(x);      // 随机变量:x     状态变量:y, v, w
a.randomize(v, w);   // 随机变量:v, w  状态变量:x, y
a.randomize(w, x);   // 随机变量:w, x  状态变量:y, v

这种机制在randomize的调用期内控制了活跃随机变量的集合,它在概念上等价于调用一组rand_mode()方法来关闭或使能对应的随机变量。调用带有参数的randomize()方法能够改变任意类属性的随机模式,即使是那些没有使用rand或randc声明的类属性。然而,这种机制不会影响循环随机模式;它不能将一个非随机变量改变成一个循环随即变量(randc),并且不能将一个循环随机变量改变成一个非循环随机变量(从randc改变成rand)。

randomize方法参数的范围是目标类。参数被限制成调用对象的属性的名字,并且不允许使用表达式。本地类成员的随机模式仅在randomize方法的调用能够访问这些属性的时候才能够改变,也就是在本地成员被声明的类范围内。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文