Spartan-3E 上的随机数生成

发布于 2024-07-16 14:54:15 字数 76 浏览 11 评论 0 原文

我需要在 Spartan-3E FPGA 上为我的遗传算法生成伪随机数,并且我想在 verilog 中实现它:您能给我任何关于此的指示吗?

I need to generate pseudo-random numbers for my genetic algorithm on a Spartan-3E FPGA and i want to implement it in verilog: could you give me any pointers on this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

不即不离 2024-07-23 14:54:15

当然,Adam 的随机生成器是不可合成的! 您必须显式创建 LFSR

以下示例可能会有所帮助。 它是一个 8 位最大 LFSR

module lfsr(input clk, reset, en, output reg [7:0] q);
  always @(posedge clk or posedge reset) begin
    if (reset)
      q <= 8'd1; // can be anything except zero
    else if (en)
      q <= {q[6:0], q[7] ^ q[5] ^ q[4] ^ q[3]}; // polynomial for maximal LFSR
  end
endmodule;

Of course the random generator by Adam is not synthesizable! You have to explicitly create an LFSR.

Following example might help. It is an 8-bit maximal LFSR

module lfsr(input clk, reset, en, output reg [7:0] q);
  always @(posedge clk or posedge reset) begin
    if (reset)
      q <= 8'd1; // can be anything except zero
    else if (en)
      q <= {q[6:0], q[7] ^ q[5] ^ q[4] ^ q[3]}; // polynomial for maximal LFSR
  end
endmodule;
悲欢浪云 2024-07-23 14:54:15

您已经得到了一些很好的答案,但我只想指出 FPGA 中 LFSR 的规范指南位于:

http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf

它在某些地方有点 Xilinx 特定(这对您的 FPGA 来说没问题:),但原理可以转让给其他人。

You've already got some good answers, but I'll just point out the canonical guide to LFSRs in FPGAs is here:

http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf

It's a bit Xilinx specific in places (which is OK for your FPGA :) but the principles are transferable to others.

风吹雪碎 2024-07-23 14:54:15

通常,您会使用 IEEE.math_real 统一函数

use IEEE.math_real.all;
procedure UNIFORM (variable Seed1,Seed2:inout integer; variable X:out real);

但是做一个对伪随机数生成器 (PRNG) 进行一点研究,您会发现许多简单的变体 LFSR< /a> 的 - 看起来与 CRC 生成器非常相似。

如果您想从现有的、工作的 PRNG 开始推出自己的资源,这里有一些资源:

http ://www.opencores.org/?do=project&who=systemc_rng

http://verificationguild.com/modules.php?name=Downloads&d_op=viewdownload&cid=3

这是一个 CRC VHDL 代码生成器:

http://www.easics.be/webtools/crctool

Typically you'd use the IEEE.math_real uniform function

use IEEE.math_real.all;
procedure UNIFORM (variable Seed1,Seed2:inout integer; variable X:out real);

But do a tiny bit a research on pseudo random number generators (PRNGs) and you'll find many variants that are simple LFSR's - which look remarkably similar to CRC generators.

Here are several resources if you want to roll your own starting from existing, working PRNGs:

http://www.opencores.org/?do=project&who=systemc_rng

http://verificationguild.com/modules.php?name=Downloads&d_op=viewdownload&cid=3

Here's a CRC VHDL code generator:

http://www.easics.be/webtools/crctool

烧了回忆取暖 2024-07-23 14:54:15

有一个在线工具可以为伪随机数生成器生成 Verilog 或 VHDL 代码。 它位于 OutputLogic.com

There is an online tool that can generate Verilog or VHDL code for a pseudo-random number generator. It's on OutputLogic.com

过期以后 2024-07-23 14:54:15

上面指向 OpenCores 的指针在 verilog 文件夹中有一个文件,名为: rng.v

我已在Spartan-3AN,效果很好。 在我对部件进行编程后,我的代码使用随机数生成器来选择随机 PWM,并且它涵盖了所有可选的 PWM。

The pointer above to OpenCores has a file in the verilog folder called: rng.v

I have used it in a Spartan-3AN and it works great. My code used the random number generator to select a random PWM after I programmed the part and it covered all the selectable PWMs.

后来的我们 2024-07-23 14:54:15

我同意 LFSR 的观点。 我之前做过一个,是用来加密的。

I agree with the LFSR. I have made one before and it is used for encryption.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文