在VERILOG中随机0,1,-1

时间:2017-03-31 08:32:23

标签: verilog fpga hdl

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

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

但它不能按我想要的方式工作。

有人可以给我建议做什么吗?

由于

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)生成minmax范围内的随机无符号整数。

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

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