Aam*_*mir 16
当然亚当的随机发生器不可合成!您必须显式创建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;
Run Code Online (Sandbox Code Playgroud)
你已经有了一些很好的答案,但我只想指出FPGA中LFSR的规范指南在这里:
http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
它有点Xilinx特定的地方(对你的FPGA来说没问题)但是这些原则可以转让给其他人.
通常您会使用IEEE.math_real统一函数
use IEEE.math_real.all;
procedure UNIFORM (variable Seed1,Seed2:inout integer; variable X:out real);
Run Code Online (Sandbox Code Playgroud)
但是,对伪随机数生成器 (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 代码生成器:
http://www.easics.be/webtools/crctool