首页 > 其他分享 >Weighted Distribution

Weighted Distribution

时间:2022-08-17 14:35:42浏览次数:60  
标签:10 Weighted addr weight 70 权重 Distribution data

约束提供了对随机化的控制,用户可以从中控制随机化的值。有很多方法可以控制这些值。其中之一是加权分布。加权分布在约束块中创建分布,使得某些值的选择频率高于其他值。加权分布运算符是 dist,它采用由“:=”或“:/”运算符分隔的值和权重列表。 “:=”运算符指定范围内每个指定值的权重相同,“:/”运算符指定权重在所有值之间平均分配。

这两个运算符的语法是:

Value := <weight>
Value :/  <weight>

值和权重可以是常数或变量。 “值”可以是单个或一个范围。未指定值的默认权重为 1。此外,权重总和不必为 100。

例如: Data dist { 10 := 8, [11:13] := 10 };

在这种情况下,加权分布如下。一系列值的均匀分布:

Data == 10, weight 8

Data == 11, weight 10

Data == 12, weight 10

Data == 13, weight 10

再例如:Data dist { 10 :/ 8, [11:13] :/ 10 };

在这种情况下,加权分布如下。 :/ 将指定的权重分配给项目,或者如果项目是范围,则指定权重/N,其中 N 是范围内的值的数量:

Data == 10, weight 8
Data == 11, weight 10/3
Data == 12, weight 10/3
Data == 13, weight 10/3

看一个完整的示例( := )

 1 class distClass;
 2   rand bit [2:0] data;
 3   constraint distr  { data dist { 0:=30, [1:3]:=70, 4:=50, 5:=20}; }
 4   endclass
 5 module top;
 6     distClass dc = new ();
 7     initial begin
 8       for (int i = 0; i < 20; i++) begin
 9         dc.randomize();
10         $display ("data=%0d",dc.data);
11       end
12      end
13 endmodule

模拟结果:

Compiler version S-2021.09; Runtime version S-2021.09; Aug 17 02:09 2022
data=5
data=1
data=1
data=3
data=2
data=1
data=4
data=1
data=3
data=4
data=4
data=2
data=3
data=0
data=2
data=3
data=2
data=1
data=4
data=0
V C S S i m u l a t i o n R e p o r t

权重分布如下:

data == 0, weight 30

data == 1, weight 70

data == 2, weight 70

data == 3, weight 70

data == 4, weight 50

data == 5, weight 20

此示例中的分布显示数据范围 [1:3] 的分布权重最高,为 70。因此,在模拟日志中,您会看到更多的值 1、2 和 3 作为随机生成的值,以及一些“4”,因为它的权重于为50”。但是你只看到两个“0”,因为它的权重是第二低的 30,只有一个“5”,因为它的权重是最低的。

让我们看一个将“:=”与“:/”运算符进行对比的示例。我们使用“:/”运算符扩展上面的示例以查看并比较:

 1 class distClass;
 2   rand bit [2:0] data, addr;
 3   constraint distr   {  data dist { 0:=30, [1:3]:=70, 4:=50, 5:=20}; } //    := operator
 4   constraint distr1  {  addr dist { 0:/30, [1:3]:/70, 4:/50, 5:/20}; } //    :/ operator
 5 endclass
 6 module top;
 7     distClass dc = new ( );
 8     initial begin
 9       for (int i = 0; i < 20; i++) begin
10         dc.randomize();
11         $display ("data=%0d addr=%0d",dc.data, dc.addr);
12       end
13      end
14 endmodule

模拟结果:

Compiler version S-2021.09; Runtime version S-2021.09; Aug 17 02:18 2022
data=5 addr=1
data=1 addr=3
data=1 addr=4
data=3 addr=5
data=2 addr=2
data=1 addr=1
data=4 addr=4
data=1 addr=4
data=3 addr=1
data=4 addr=4
data=4 addr=0
data=2 addr=5
data=3 addr=4
data=0 addr=0
data=2 addr=0
data=3 addr=2
data=2 addr=1
data=1 addr=5
data=4 addr=0
data=0 addr=0
V C S S i m u l a t i o n R e p o r t

“data”的分布与我们在前面的示例中看到的相同,但与“addr”的分布形成对比。 “addr”权重分布如下:

addr == 0, weight 30

addr == 1, weight 70/3 ( = 23.3 )

addr == 2, weight 70/3 ( = 23.3 )

addr == 3, weight 70/3 ( = 23.3 )

addr == 4, weight 50

addr == 5, weight 20

因此,addr == 1, 2, 3 的权重现在从 70 减少到 23.3。因此,其他值的权重现在更高。因此,您会看到更多的“4”值,然后是“0”值,然后是较小的值 1、2 和 3,最后是最少数量的 5。对比“data”与“addr”的分布, ' 并且您将看到两个运算符之间的区别。

最后注意: “dist”操作不能应用于“randc”变量。 “dist”操作要求表达式至少包含一个“rand”变量。

 

标签:10,Weighted,addr,weight,70,权重,Distribution,data
From: https://www.cnblogs.com/xiangtianxiao/p/16595071.html

相关文章

  • hdu7215 Weighted Beautiful Tree
    problem一个点的点权的可能为不变或者变为连着的边的边权。然后dp、dp[u][0]表示变成大于等于w[u]边的最小代价。dp[u][1]表示变成小于等于w[u]边的最小代价。然后对......