cam*_*nso 3 verilog system-verilog
我试图生成随机单位,只要你想要一个正常的随机化,这很简单:
wire R;
assign R = $random % 2;
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是一种加权概率,如:
wire R;
assign R = 60%(0) || 40%(1);
Run Code Online (Sandbox Code Playgroud)
请原谅我,如果它不符合标准的Verilog代码,那只是想知道我想要什么.谁能帮我吗?谢谢
SystemVerilog解决方案在randomize被调用中具有分发方法dist.权重由value_or_range := weight或分配value_or_range :/ distributed_weight.这篇来自IEEE Std1800-2012§18.5.4第476页的文章给出了一个明确的例子:
当权重应用于范围时,它们可以应用于范围中的每个值,或者它们可以作为整体应用于范围.例如: 表示x等于100,101,102,200或300,加权比率为1-1-1-2-5,并且 表示x等于100,101,102,200 中的一个,或者300的加权比为1/3-1/3-1/3-2-5.
x dist { [100:102] := 1, 200 := 2, 300 := 5}
x dist { [100:102] :/ 1, 200 := 2, 300 := 5}
dist用于随机化,因此它需要是一个randomize() with(或一个类constraint)的母马.randomize成功返回位,因此它应该是内叫assert,void'()或转让的RHS.
在你我们可以设置0到6的重量和1到4的重量,总重量为10,分布为60/40.例:
reg R;
initial begin
assert( randomize(R) with { R dist { 0 := 6, 1 := 4 }; } );
end
Run Code Online (Sandbox Code Playgroud)
更多信息dist请参见IEEE Std1800-2012§18.5.4 "分布".