返回介绍

12.4 约束块

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

随机变量的值通过由约束块声明的约束表达式来确定。像任务、函数和变量一样,随机块是类的成员。在一个类中,约束块的名字必须是唯一的。

声明约束块的语法如下:

constraint_declaration ::=              // 引用自附录A.1.9
    [static] constraint constraint_identifier constraint_block

constraint_block ::= {{constraint_block_item}}

constraint_block_item ::=
    solve identifier_list before identifier_list;
  | constraint_expression

constraint_expression ::=
    expression_or_dist;
  | expression –> constraint_set
  | if (expression) constraint_set [else constraint_set]
  | foreach (array_identifier [loop_variables]) constraint_set

constraint_set ::=
    constraint_expression
  | {{constraint_expression}}

dist_list ::= dist_item {, dist_item}

dist_item ::= value_range [dist_weight]

dist_weight ::=
    := expression
  | :/ expression

constraint_prototype ::= [static] constraint constraint_identifier;

extern_constraint_declaration ::=
    [static] constraint class_scope constraint_identifier constraint_block

identifier_list ::= identifier{, identifier}

expression_or_dist ::= expression [dist{dist_list}]    // 引用自附录A.2.10

loop_variables ::= [index_variable_identifier]{, [index_variable_identifier]}
                                                            // 引用自附录A.6.8

语法12-2 — 约束语法(摘录自附录A)

constraint_identifier是约束块的名字。使用constraint_mode()(参见12.8节)方法,这个名字可以用来使能或关闭一个约束。

constraint_block是一个表达式语句的列表,它用来限制一个变量的取值范围或者定义变量间的关系。constraint_expression是任意SystemVerilog表达式,或者是约束专用操作符->和dist(参见12.4.4节和12.4.5节)中的一个。

约束的说明状态对约束表达式强加了下列限制:

  • 函数可以具有某种限制(参见12.4.11节)。
  • 不允许使用具有边带效应的操作符,例如++和--。
  • 在排序约束中不能指定randc变量(参见12.4.9节中的solve...before)。
  • dist表达式不能出现在其它表达式中。

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

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

发布评论

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