永发信息网

FPGA中怎么产生一个随机数?

答案:5  悬赏:50  手机版
解决时间 2021-01-23 23:00
  • 提问者网友:眉目添风霜
  • 2021-01-23 11:35
FPGA中怎么产生一个随机数?
最佳答案
  • 五星知识达人网友:醉吻情书
  • 2021-01-23 12:33
个人认为FPGA内部电路是不能产生的随机数的,应该说是伪随机数,从产生的周期来看,长时间还是有规律的。过去做过模拟的噪声发生器,是利用热噪声来产生的,但是也是有规律的高斯噪声,随机数的道理也是一样的
全部回答
  • 1楼网友:渡鹤影
  • 2021-01-23 15:01
系统任务 $random
这个系统函数提供了一个产生随机数的手段。当函数被调用时返回一个32bit的随机数。它是一个带
符号的整形数。
$random一般的用法是:$ramdom % b ,其中 b>0.它给出了一个范围在(-b+1):(b-1)中的随机数。
下面给出一个产生随机数的例子:
reg[23:0] rand;
rand = $random % 60;
上面的例子给出了一个范围在-59到59之间的随机数,下面的例子通过位并接操作产生一个值在0到
59之间的数。
reg[23:0] rand;
rand = {$random} % 60;
利用这个系统函数可以产生随机脉冲序列或宽度随机的脉冲序列,以用于电路的测试。下面例子中的
Verilog HDL模块可以产生宽度随机的随机脉冲序列的测试信号源,在电路模块的设计仿真时非常有
用。同学们可以根据测试的需要,模仿下例,灵活使用$random系统函数编制出与实际情况类似的随
机脉冲序列。
[例] `timescale 1ns/1ns
module random_pulse( dout );
output [9:0] dout;
reg dout;
integer delay1,delay2,k;
initial
begin
#10 dout=0;
for (k=0; k< 100; k=k+1)
begin
delay1 = 20 * ( {$random} % 6);
// delay1 在0到100ns间变化
delay2 = 20 * ( 1 + {$random} % 3);
// delay2 在20到60ns间变化
#delay1 dout = 1 << ({$random} %10);
//dout的0--9位中随机出现1,并出现的时间在0-100ns间变化
#delay2 dout = 0;
//脉冲的宽度在在20到60ns间变化
end
end
endmodule
  • 2楼网友:等灯
  • 2021-01-23 14:03
最简单的方法是用移位反馈寄存器,产生一个PN序列。当然是伪随机数。
  • 3楼网友:雪起风沙痕
  • 2021-01-23 13:51
好像是通过循环队列产生的额,也是
伪随机数,具体忘了
  • 4楼网友:青尢
  • 2021-01-23 13:42
采用伪随机数,至于生成式,可以自己试试。
一般产生随机数是以2的N次幂,
如verilog语法
reg [7:0] a;
always @(posedge clk or negedge rst_n)
begin
if(~rst_n)
a <= 8'haa;
else
a <= #1 {a[0]^a[1]^a[3]^a[4]^a[7],a[7:1]};
end
至于初始值和生成式,可以自己调整,使其更符合伪随机数。
为了产生更大范围的伪随机数,还可以在前一个伪随机数下在做一次。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯