Мне нужно генерировать псевдослучайные числа для моего генетического алгоритма на FPGA Spartan-3E, и я хочу реализовать его в verilog: не могли бы вы дать мне какие-либо указатели на это?
Генерация случайных чисел на Spartan-3E
Ответ 1
Обычно вы используете 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:
Ответ 2
Конечно, случайный генератор от Адама не синтезируется! Вы должны явно создать 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;
Ответ 3
У вас уже есть хорошие ответы, но я просто укажу, что каноническое руководство для LFSR в FPGA находится здесь:
http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
Это немного Xilinx, специфичный в местах (это нормально для вашей FPGA:), но принципы могут быть переданы другим.
Ответ 4
Указатель выше на OpenCores имеет файл в папке verilog, называемый rng.v
Я использовал его в Spartan-3AN, и он отлично работает. Мой код использовал генератор случайных чисел для выбора случайной ШИМ после того, как я запрограммировал эту часть, и она охватывала все выбираемые ШИМ.
Ответ 5
Существует онлайн-инструмент, который может генерировать Verilog или VHDL-код для генератора псевдослучайных чисел. Это на OutputLogic.com
Ответ 6
Я согласен с LFSR. Я сделал один раньше, и он используется для шифрования.