返回介绍

12.4.6 if...else约束

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

SystemVerilog还支持if...else类型的约束。

定义if...else约束的语法如下:

constraint_expression ::=         // 引用自附录A.1.9
    ...
  | if (expression) constraint_set [else constraint_set]

语法12-5 — if...else约束语法(摘录自附录A)

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

constraint_set代表了任意有效的约束或一个未命名的约束块。如果表达式为真,那么第一个约束或约束集合中的约束必须被满足,否则在可选的else约束或约束块中的约束必须被满足。约束集合可以用来聚合多个约束。

if...else类型的约束声明具有等价的蕴含约束,例如:

if (mode == small)
    len < 10;
else if (mode == large)
    len > 100;

等价于

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

在这个例子中,mode的值意味着len小于10,或者大于100,或者未约束。

与蕴含一样,if...else类型的约束也是双向的。在上面的声明中,mode约束的值约束了len的值,并且len约束的值约束了mode的值。

因为一个if...else类型的约束声明的else部分是可选的,所以当在一个嵌套的if序列中忽略else的时候会引起混淆。这个问题通过总是将else与最近的前一个缺少else的if相关联来解决。在下面的例子中,else匹配于内层的if,就像缩进格式所指示的那样:

if (mode != large)
    if (mode == small)
        len < 10;
    else     // else应用于前一个if
        len > 100;

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

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

发布评论

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