2009-04-16 39 views
11

Tôi cần tạo các số giả ngẫu nhiên cho thuật toán di truyền của mình trên FPGA Spartan-3E và tôi muốn triển khai nó trong verilog: bạn có thể cho tôi bất kỳ gợi ý nào về điều này không?Tạo số ngẫu nhiên trên Spartan-3E

Trả lời

2

Điển hình bạn muốn sử dụng chức năng IEEE.math_real thống nhất

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

Nhưng làm một chút một nghiên cứu về giả số ngẫu nhiên máy phát điện (PRNGs) và bạn sẽ tìm thấy nhiều biến thể mà rất đơn giản LFSR 's - điều mà trông khá giống với máy phát CRC.

Dưới đây là một vài nguồn nếu bạn muốn cuộn khởi đầu của riêng bạn từ hiện có, PRNGs làm việc:

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

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

Dưới đây là một mã máy phát điện CRC VHDL:

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

+1

OP muốn verilog - nhưng đề xuất của bạn để xem xét LFSRs là âm thanh. Chỉ vì lợi ích của riêng tôi, là thủ tục UNIFORM có thể tổng hợp được không? Nó tổng hợp cái gì? – Marty

16

Tất nhiên máy phát ngẫu nhiên của Adam không được tổng hợp! Bạn phải tạo một cách rõ ràng LFSR.

Ví dụ sau có thể hữu ích. Nó là một 8-bit tối đa 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; 
2

Con trỏ ở trên để OpenCores có một tập tin trong thư mục Verilog gọi: rng.v

Tôi đã sử dụng nó trong một Spartan-3AN và nó hoạt động tuyệt vời. Mã của tôi đã sử dụng trình tạo số ngẫu nhiên để chọn một PWM ngẫu nhiên sau khi tôi lập trình phần này và nó bao phủ tất cả các PWM có thể lựa chọn.

2

Có một công cụ trực tuyến có thể tạo mã Verilog hoặc VHDL cho trình tạo số giả ngẫu nhiên. Đó là trên OutputLogic.com

2

Tôi đồng ý với LFSR. Tôi đã thực hiện một trước và nó được sử dụng để mã hóa.

+2

Tôi nghĩ rằng điều quan trọng cần lưu ý ở đây là LFSRs rất hữu ích cho việc tạo số ngẫu nhiên, nhưng chúng không thích hợp để sử dụng trong các chương trình mã hóa thực. – wjl

9

Bạn đã có một số câu trả lời tốt, nhưng tôi sẽ chỉ chỉ ra những hướng dẫn kinh điển để LFSRs trong FPGAs là ở đây:

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

Đó là một chút Xilinx cụ thể ở những nơi (đó là OK cho FPGA của bạn :) nhưng các nguyên tắc được chuyển nhượng cho người khác.