스파르탄 -3E에서 임의의 숫자 생성
문제
스파르탄 -3E FPGA에서 유전자 알고리즘에 대한 의사 랜덤 숫자를 생성해야하며 Verilog에서 구현하고 싶습니다. 이것에 대한 포인터를 줄 수 있습니까?
해결책
일반적으로 당신은 사용합니다 IEEE.MATH_REAL 균일 한 기능
use IEEE.math_real.all;
procedure UNIFORM (variable Seed1,Seed2:inout integer; variable X:out real);
그러나 의사 랜덤 번호 생성기 (PRNG)에 대한 연구를 조금만 보면 간단한 많은 변형을 찾을 수 있습니다. LFSRS- CRC 생성기와 매우 유사하게 보입니다.
기존의 작업 PRNG에서 시작하여 자신의 출발을하려는 경우 몇 가지 리소스가 있습니다.
http://www.opencores.org/?do=project&wo=systemc_rng
http://verificationguild.com/modules.php?name=downloads&d_op=viewdownload&cid=3
CRC VHDL 코드 생성기는 다음과 같습니다.
다른 팁
물론 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;
당신은 이미 좋은 답을 얻었지만 FPGA의 LFSR에 대한 표준 가이드를 지적하겠습니다.
http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
그것은 장소에서 약간 xilinx에 특화되어 있습니다 (FPGA에 적합합니다 :) 원칙은 다른 사람에게 전송할 수 있습니다.
의사 랜덤 번호 생성기에 대한 Verilog 또는 VHDL 코드를 생성 할 수있는 온라인 도구가 있습니다. 켜졌 어 outputlogic.com
LFSR에 동의합니다. 나는 전에 하나를 만들었고 암호화에 사용됩니다.
OpenCores에 대한 위의 포인터에는 Verilog 폴더에 파일이 있습니다. rng.v
나는 그것을 스파르탄 -3AN에서 사용했고 그것은 훌륭하게 작동합니다. 내 코드는 무작위 번호 생성기를 사용하여 부품을 프로그래밍 한 후 임의의 PWM을 선택하고 선택 가능한 모든 PWM을 다루었습니다.