返回介绍

12.4.5 蕴含

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

约束提供了两种结构来声明有条件(判定的)的关系:蕴含和if...else。

蕴含操作符(->)可以用来声明隐含了一个约束的表达式。

定义一个蕴含约束的语法如下:

constraint_expression ::=  // 引用自附录A.1.9
    ...
  | expression –> constraint_set

语法12-4 — 约束蕴含语法(摘录自附录A)

expression可以是任意integral SystemVerilog表达式。

蕴含操作符在布尔表达式上等价于:a -> b等价于(!a || b)。它表明:如果表达式为真,那么产生的随机数被其后的约束(或约束集合)所约束。否则,产生的随机数是未施加约束的。

constraint_set代表任意有效的约束或一个未命名的约束集合。如果表达式为真,那么约束集合中的所有约束也必须被满足。

例如:

mode == small -> len < 10;
mode == large -> len > 100;

在这个例子中,mode的值意味着:如果mode == small,那么len的值应该被约束成小于10;如果mode == large,那么len的值应该被约束成大于100;否则,len的值是未约束的。

在下面的例子中:

bit [3:0] a, b;
constraint c {(a == 0) -> (b == 1);}

无论是a还是b都是4位的,因此ab的组合会有256种可能。约束c表明,a==0意味着b==1,因此排除了15种组合:{0,0}, {0,2}, … {0,15}。因此,a==0的概率为1/(256-15)或1/241。

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

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

发布评论

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