我想在verilog中生成随机十进制数0,1或-1,我可以将它添加到我的基本信号中并用它来获取一些噪音。 我试过
reg [1:0] SIGNAL_noise_ii;
SIGNAL_noise_ii <= {$random}%2;
但它不能按我想要的方式工作。
有人可以给我建议做什么吗?
由于
答案 0 :(得分:4)
SystemVerilog中的一个简单解决方案是使用randomize()方法将变量约束到所需的值集。
bit signed [1:0] SIGNAL_noise_ii;
...
randomize(SIGNAL_noise_ii) with {SIGNAL_noise_ii inside {-1,0,1};};
// alternatively specify a distribution
randomize(SIGNAL_noise_ii) with {SIGNAL_noise_ii dist {-1:=25,0:=50,1:=25};};
答案 1 :(得分:3)
怎么样:
reg signed [1:0] SIGNAL_noise_ii;
SIGNAL_noise_ii <= $signed($urandom_range(0,2))-1;
如果SIGNAL_noise_ii
需要表示“随机十进制数0,1或-1”,那么将其设为signed
似乎是个好主意。
$urandom_range(min,max)
生成min
到max
范围内的随机无符号整数。
所以,让我们使用$signed
对该整数进行签名,然后让它从中减去1。默认情况下,没有基础的文字(例如1
)在Verilog中签名。我们需要在赋值 signed 的右侧创建所有内容,因为如果在Veriog中混合有符号和无符号数量,则无符号算术完成。