返回介绍

12.7 使用rand_mode()关闭随机变量

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

rand_mode()可以用来控制激活或关闭一个随机变量。当一个随机变量处于未激活状态的时候,这个随机变量就好像没有使用rand或randc声明一样。未激活的随机变量不会被rand_mode()方法随机化,并且它们的值会被求解器当作状态变量。所有的随机变量最初都是激活的。

rand_mode()方法的语法如下:

task object[.random_variable]::rand_mode(bit on_off);

或者

function int object.random_variable::rand_mode();

object是能够产生对象句柄的任何表达式,并且随机变量在其中定义。

random_variable是操作被应用的随机变量的名字。如果没有指定随机变量的名字(仅在作为任务调用是才允许出现这种情况),那么这个动作会被应用到对象内的所有随机变量。

当作为任务调用时,rand_mode方法的参数确定了执行的操作:

表格12-1:rand_mode参数

含义描述
0OFF将指定的随机变量设置为未激活状态。这样,它们不会被后来调用的randomize()方法随机化。
1ON将指定的随机变量设置为激活状态。这样,它们能够被后来调用的randomize()方法随机化。

对于非压缩数组变量,random_variable可以使用索引来指定数组中单独的元素。省略索引会导致数组中的所有元素都被调用所影响。

对于非压缩结构体变量,random_variable可以使用对应的成员来指定单独的成员。省略成员会导致结构体中的所有成员都被调用所影响。

如果随机变量是一个对象句柄,那么仅仅变量的模式会被改变,这个对象内的随机变量的模式不会改变(参见12.4.8节中有关全局约束的内容)。

如果指定的变量在类层次中不存在或者它虽然存在但没有使用rand或randc声明,那么编译器应该发布一个错误信息。

如果作为一个函数调用,那么rand_mode()返回指定变量当前的激活状态。如果随机变量处于激活状态(ON)返回1;如果随机变量处于未激活状态(OFF)则返回0。

rand_mode()方法的函数形式仅能接受单一变量,因此,如果指定的变量是一个非压缩数组,那么必须使用索引来选择单一的元素。

例子:

class Packet;
    rand integer source_value, dest_value;
    // ... 其它声明
endclass

int ret;

Packet packet_a = new;

// 关闭对象中的所有随机变量
packet_a.rand_mode(0);

// ... 其它代码
// 使能source_value
packet_a.source_value.rand_mode(1);
ret = packet_a.dest_value.rand_mode();

这个例子首先关闭对象packet_a中的所有随机变量,然后仅仅使能source_value变量。最后它将ret变量设置为变量dest_value的激活状态。

rand_mode()方法是内建的,并且不能被过载。

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

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

发布评论

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