這是爲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. 在Python中分佈隨機變量的概率計算
- 2. PHP隨機概率
- 3. 隨機概率PHP
- 4. 概率隨機數?
- 5. 確定隨機變量的概率質量函數
- 6. 隨機數字的概率
- 7. 隨機更改stringbuilder變量
- 8. 用概率分佈生成範圍內的隨機整數
- 9. 根據概率分佈函數生成隨機數
- 10. 隨機概率錯誤
- 11. 概率和隨機數
- 12. c#概率和隨機數
- 13. C++中的Gamma分佈隨機變量
- 14. 概率分佈和浮點型變量,概率必須加1 1
- 15. 從C++中概率分佈向量生成隨機數發生器
- 16. Python的numpy的隨機數的概率
- 17. 隨機的值從枚舉的概率
- 18. 隨機數範圍的不同概率
- 19. 帶概率的隨機圖生成
- 20. 不同概率的隨機行選擇
- 21. python:概率的隨機樣本
- 22. Java的高概率隨機數
- 23. 選擇隨機數的快速概率?
- 24. 更改隨機運算符或變量
- 25. 生成概率分佈
- 26. matlab概率分佈擬合
- 27. 概率分佈值情節
- 28. 隨機算法概率最大化
- 29. 以概率生成隨機數
- 30. 概率隨機數發生器
有關可在systemverilog標準內使用的不同分發的更多信息,請參閱:http://techblog.karnank.in/constrained-randomisation-in-systemverilog-part-1/ – Joniale 2016-10-19 08:32:27