2009-04-16 1 views

ответ

2

Обычно вы бы использовать IEEE.math_real однородную функцию

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

Но сделать крошечную исследование на псевдо-генераторы случайных чисел (PRNGs), и вы найдете множество вариантов, которые являются простыми LFSR «s - который выглядят очень похожими на генераторы CRC.

Вот несколько ресурсов, если вы хотите, чтобы свернуть свой собственный начиная от существующих, работающих PRNGs:

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

+1

OP хотел verilog - но ваше предложение посмотреть на LFSR звучит. Как раз для моих собственных интересов, является ли процедура UNIFORM синтезируемой? Что он синтезирует? – Marty

16

Конечно, случайный генератор от Адама не синтезируется! Вы должны явно создать LFSR.

Следующий пример может помочь. Это 8-битный максимальный ЛРСОС

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; 
2

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

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

2

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

2

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

+2

Я думаю, что здесь важно отметить, что LFSR полезны для генерации псевдослучайных чисел, но они не подходят для использования в реальных схемах шифрования. – wjl

9

Вы уже получили некоторые хорошие ответы, но я просто указать каноническое руководство по ЛРСОСУ в ПВМ здесь:

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

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