Генерация случайных чисел на Spartan-3E - PullRequest
11 голосов
/ 16 апреля 2009

Мне нужно сгенерировать псевдослучайные числа для моего генетического алгоритма на FPGA Spartan-3E, и я хочу реализовать его в verilog: не могли бы вы дать мне какие-нибудь указания на это?

Ответы [ 6 ]

16 голосов
/ 17 мая 2009

Конечно, генератор случайных чисел Адама не синтезируется! Вы должны явно создать 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;
9 голосов
/ 29 октября 2009

У вас уже есть несколько хороших ответов, но я просто укажу на каноническое руководство по LFSR в FPGA:

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

Это немного специфично для Xilinx (что нормально для вашей FPGA :), но принципы могут быть переданы другим.

3 голосов
/ 24 июня 2009

Существует онлайн-инструмент, который может генерировать код Verilog или VHDL для генератора псевдослучайных чисел. Это на OutputLogic.com

2 голосов
/ 04 июля 2009

Я согласен с LFSR. Я сделал один раньше, и он используется для шифрования.

2 голосов
/ 26 мая 2009

Указатель выше на OpenCores содержит файл в папке verilog с именем: rng.v

Я использовал его в Spartan-3AN, и он прекрасно работает. Мой код использовал генератор случайных чисел для выбора случайного ШИМ после того, как я запрограммировал деталь, и он охватил все выбираемые ШИМ.

2 голосов
/ 16 апреля 2009

Как правило, вы будете использовать IEEE.math_real равномерную функцию

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

Но сделайте небольшое исследование в отношении генераторов псевдослучайных чисел (PRNG), и вы найдете много простых вариантов LFSR , которые очень похожи на генераторы 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

...