這是爲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