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 整数,范围在 min
到 max
之间(含)。
所以,让我们使用 $signed
使该整数有符号,然后从中减去 1。默认情况下,没有基础的文字(例如1
)在 Verilog 中签名。我们需要将所有内容都放在赋值 signed 的右侧,因为如果在 Veriog 中混合有符号和无符号的数量,unsigned 算术就完成了。
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};};
我想在 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 整数,范围在 min
到 max
之间(含)。
所以,让我们使用 $signed
使该整数有符号,然后从中减去 1。默认情况下,没有基础的文字(例如1
)在 Verilog 中签名。我们需要将所有内容都放在赋值 signed 的右侧,因为如果在 Veriog 中混合有符号和无符号的数量,unsigned 算术就完成了。
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};};