这是为SystemVerilog。我知道你可以在一组随机变量选择的值中指定值或值的范围的权重,但是如果你想要一个好的高斯分布呢?你怎么写这种约束?如何更改SystemVerilog随机变量的概率分布?
3
A
回答
5
当调用randomize时,该类将生成具有平均值和标准偏差分别为100和20的正态(高斯)分布的变量“值”的值。我还没有测试过这么多,但它应该可以工作。
class C;
int seed = 1;
rand int mean;
rand int std_deviation;
rand int value;
function int gaussian_dist();
return $dist_normal(seed, mean, std_deviation);
endfunction
constraint c_parameters {
mean == 100;
std_deviation == 20;
}
constraint c_value { value == gaussian_dist(); }
endclass
2
由于我无法添加评论我写了什么看起来像一个新的答案,但可能不是。
由史蒂夫给出K的代码没有在VCS G-2012.09(带service pack)由于以下问题开展工作:
mean
和std_deviation
在gaussian_dist()
使用不应该是rand
变量。我刚刚在下面的例子中初始化了它们,但它们也可以在pre_randomize()
中分配,在任何随机化之前调用它们。gaussian_dist()
不允许修改除函数本地以外的变量。$dist_normal
调用修改seed
,以便可以将变通办法seed
变成该函数的参数。
下面是类似的代码与问题解决:
class C;
int seed = 1;
int mean = 100;
int std_deviation = 20;
rand int value;
function int gaussian_dist (int seed);
return $dist_normal (seed, mean, std_deviation);
endfunction
constraint c_value { value == gaussian_dist (seed); }
endclass
然而这段代码的缺点是,通过$dist_normal
鉴于新的“种子”值被扔掉,并为随后的随机用户必须以某种方式设置seed
变量(因为使用相同的seed
值$dist_normal
会给出相同的输出)。
一种选择是使用pre_randomize()
或post_randomize()
来随机化高斯变量而不是将其放入constraint
块中。
相关问题
- 1. 随机变量的概率
- 2. 在Python中分布随机变量的概率计算
- 3. 二元正态分布随机变量的概率
- 4. PHP随机概率
- 5. 概率随机数?
- 6. 随机概率PHP
- 7. 确定随机变量的概率质量函数
- 8. 定制的随机概率分布选择MongoDB的文件
- 9. 向前倾向的随机数的概率分布
- 10. 随机数字的概率
- 11. 高概率数的随机?
- 12. 随机更改stringbuilder变量
- 13. PHP变量随机更改
- 14. 用概率分布生成范围内的随机整数
- 15. scikit学习随机森林的概率分布?
- 16. 任意概率分布方式的随机数发生器
- 17. c#概率和随机数
- 18. 随机概率错误
- 19. 随机概率选择
- 20. 概率和随机数
- 21. 从三维概率分布生成随机数
- 22. 根据概率分布函数生成随机数
- 23. 随机在SystemVerilog
- 24. C++中的Gamma分布随机变量
- 25. 概率分布和浮点型变量,概率必须加1 1
- 26. 从C++中概率分布向量生成随机数发生器
- 27. 如何使用自定义概率分布选择随机选择
- 28. 更改双变量中的随机值?
- 29. Python的numpy的随机数的概率
- 30. 绘制不同变量的概率分布
有关可在systemverilog标准内使用的不同分发的更多信息,请参阅:http://techblog.karnank.in/constrained-randomisation-in-systemverilog-part-1/ – Joniale 2016-10-19 08:32:27