返回介绍

12.4.4 分布

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

除了集合成员资格外,约束支持被称为分布的加权值的集合。分布具有两个特性:它们是集合成员资格的关系测试,并且它们为结果指定了一个统计分布函数。

定义一个分布表达式的语法如下:

constraint_block ::=              // 引用自附录A.1.9
    ...
  | expression dist {dist_list};

dist_list ::= dist_item{, dist_item}

dist_item ::= value_range [dist_weight]

dist_weight ::=
    := expression
  | :/ expression

dist_item ::=
    value_range := expression
  | value_range :/ expression

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

语法12-3 — 约束分布语法(摘录自附录A)

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

如果表达式的值包含在集合中,那么分布操作符dist的计算结果为“真”;否则计算结果为“假”。

如果没有任何其它约束,那么表达式匹配列表中任意值的概率与为它指定的权重成比例。

分布集合是一个以逗号分割的integral表达式和范围的列表。列表中的每一项都可以带有一个可选的权重,这个权重使用:=或:/操作符说明。如果没有为某一条目指定权重,那么缺省权重是:= 1。权重可以是任意integral SystemVerilog表达式。

:=操作符为一个条目指定一个权重,如果条目是一个范围,它为范围中的每一个值指定权重。

:/操作符为一个条目指定权重,如果条目是一个范围,它会将范围作为一个整体指定权重。如果范围中有n个值,那么范围中每个值的权重为range_weight/n

例如:

x dist {100 := 1, 200 := 2, 300 := 5}

上面的例子意味着x可以是100、200、或300,它们的权重比为1-2-5。如果添加了另外的约束来说明x不能等于200:

x != 200;
x dist {100 := 1, 200 := 2, 300 := 5}

那么x等于100或300,它们的权重比为1-5。

相对于真实的概率,混合比率(例如1-2-5)更加容易考虑,因为混合比例不需要规格化成100%。将概率转换成婚和比率是直接的。

当权重应用于范围的时候,它们可以应用到范围中的每一个值,或者它们可以将范围作为一个整体应用。例如:

x dist {[100:102] := 1, 200 := 2, 300 := 5}

上面的例子意味着x可以等于100、101、102、200或300中的一个,并且它们的权重比为1-1-1-2-5。

x dist {[100:102] :/ 1, 200 := 2, 300 := 5}

上面的例子意味着x可以等于100、101、102、200或300中的一个,并且它们的权重比为1/3-1/3-1/3-2-5。

通常,分布保证了两个特性:集合成员关系以及无变化的加权,这意味着增加一个权重会增加选择那些值的可能性。

限制:

  • 一个dist操作不应该应用到randc变量。
  • 一个dist表达式要求表达式至少包含一个rand变量。

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

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

发布评论

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