俄.这个很简单拉,弄一个数学公式,有小数,除不尽,然后循环,当然啦,你需要加有个强制位数转换的代码(也简单).
下面是小版我给你找的一个别人写的代码,你参考下.如果你装了ISE的话,可以在METLAB中用XILINX的模块搭,而且有强制转换的模块.然后生成VHDL加到你工程里去.
procedure RANDOM (variable Seed: inout integer; variable X: out real) is
----------------------------------------------------------------------
-- Random Number generator from:
-- The Art of Computer Systems Performance Analysis, R.Jain 1991 (p443)
-- x(n) := 7^5x(n-1) mod (2^31 - 1)
-- This has period 2^31 - 2, and it works with odd or even seeds
-- This code does not overflow for 32 bit integers.
----------------------------------------------------------------------
constant a : integer := 16807; -- multiplier 7**5
constant m : integer := 2147483647;-- modulus 2**31 - 1
constant q : integer := 127773; -- m DIV a
constant r : integer := 2836; -- m MOD a
constant m_real : real := real(M);
variable seed_div_q : integer;
variable seed_mod_q : integer;
variable new_seed : integer;
begin
seed_div_q := seed / q; -- truncating integer division
seed_mod_q := seed MOD q; -- modulus
new_seed := a * seed_mod_q - r * seed_div_q;
if (new_seed > 0) then
seed := new_seed;
else
seed := new_seed + m;
end if;
X := real(seed) / m_real;
end RANDOM;
代码转载于:http://www.edaboard.com/thread16789.html
|