返回介绍

12.6 内联约束 — randomize() with

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

通过使用randomize()...with结构,用户可以在randomize()方法的调用点上声明内联约束。这些额外的约束与对象约束一起应用。

randomize()...with的语法如下:

inline_constraint _declaration ::=             // 没有包含在附录A中
    class_variable_identifier.randomize[([variable_identifier_list | null])]
        with constraint_block

语法12-9 — 内联约束语法(没有包含在附录A中)

class_variable_identifier是一个被实例的对象的名字。

未命名的constraint_block包含了额外的内联约束,这些内联约束与在类内声明的对象约束一起应用。

例如:

class SimpleSum
    rand bit [7:0] x, y, z;
    constraint c {z == x + y;}
endclass

task InlineConstraintDemo(SimpleSum p);
    int success;
    success = p.randomize() with {x < y;};
endtask

这个简单的例子在前面章节已经使用过,然而在这里我们使用randomize()...with来引入一个额外的x < y的约束。

randomize()...with结构可以出现在表达式可以出现的任何地方。紧跟在with之后的约束块可以包含在类中声明的所有相同的约束类型和格式。randomize()...with约束块还可以引用本地变量以及任务和函数的参数,因此我们不需要将一个本地状态映射成对象类中的成员变量。一个约束块中变量名的作用范围由内而外为:randomize()...with对象类、自动和本地变量、任务和函数参数、类变量、包围范围内的变量。randomize()...with类在最内层的嵌套中被引入到作用范围。

在下面的例子中,randomize()...with类是foo。

class Foo;
    rand integer x;
endclass

class Bar;
    integer x;
    integer y;

    task doit(Foo f, integer x, integer z);
        int result;
        result = f.randomize() with {x < y + z;};
    endtask
endclass

f.randomize() with约束块中,xfoo类的一个成员,并将x隐藏在Bar类中。它还将x参数隐藏在doit()任务中。vBar的一个成员。z是一个本地参数。

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

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

发布评论

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