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
Đ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:
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;
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.
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
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.
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
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.
- 1. Trình tạo số ngẫu nhiên phân phối ngẫu nhiên
- 2. Tạo số ngẫu nhiên lớn
- 3. Tạo số ngẫu nhiên CUDA
- 4. số ngẫu nhiên không quá ngẫu nhiên
- 5. Số ngẫu nhiên hoặc số dương Javascript ngẫu nhiên
- 6. Số ngẫu nhiên dựa trên xác suất
- 7. Tạo số ngẫu nhiên đồng thời
- 8. Làm cách nào để tạo số ngẫu nhiên trên iPhone?
- 9. tạo ngẫu nhiên số nguyên 64 bit
- 10. Thuật toán để tạo số ngẫu nhiên
- 11. Cách tạo số ngẫu nhiên lớn C
- 12. Tạo một dãy các số ngẫu nhiên
- 13. Tạo cùng một chuỗi số ngẫu nhiên
- 14. c - trình tạo số ngẫu nhiên
- 15. Tạo số ngẫu nhiên không đồng nhất
- 16. tạo số ngẫu nhiên ngắn trong java?
- 17. Tạo số ngẫu nhiên trong C
- 18. Tạo số ngẫu nhiên lognormal trong MATLAB?
- 19. Cách tạo số ngẫu nhiên khác nhau?
- 20. Tạo số ngẫu nhiên 2^30
- 21. Java Tạo số ngẫu nhiên {-1,0,1}
- 22. tạo số ngẫu nhiên bằng MYSQL
- 23. Trình tạo số ngẫu nhiên tạo số nguyên cho Java
- 24. Số nguyên ngẫu nhiên
- 25. Tạo chuỗi ngẫu nhiên dựa trên Regex?
- 26. Số ngẫu nhiên Javascript?
- 27. Tạo chuỗi ngẫu nhiên
- 28. Cách tạo 5 số ngẫu nhiên với tổng số 100
- 29. số C# ngẫu nhiên không là "ngẫu nhiên"
- 30. Tạo một bộ tạo số giả ngẫu nhiên trong C#
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