VERILOG 中的随机 0、1、-1

RANDOM 0, 1, -1 IN VERILOG

我想在 verilog 中生成随机十进制数 0、1 或 -1,我可以将它添加到我的基本信号中并用它获得一些噪声。 我试过

reg [1:0] SIGNAL_noise_ii;
SIGNAL_noise_ii <= {$random}%2;

但它没有按照我想要的方式工作。

有人可以告诉我该怎么做吗?

谢谢

怎么样:

reg signed [1:0] SIGNAL_noise_ii;
SIGNAL_noise_ii <= $signed($urandom_range(0,2))-1;

如果需要 SIGNAL_noise_ii 来表示 "random decimal number 0, 1 or -1",将其设为 signed 似乎是个好主意。

$urandom_range(min,max) 生成一个随机 unsigned 整数,范围在 minmax 之间(含)。

所以,让我们使用 $signed 使该整数有符号,然后从中减去 1。默认情况下,没有基础的文字(例如1)在 Verilog 中签名。我们需要将所有内容都放在赋值 signed 的右侧,因为如果在 Veriog 中混合有符号和无符号的数量,unsigned 算术就完成了。

https://www.edaplayground.com/x/3tCK

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};};