|
|
|
library ieee;
|
|
|
|
use ieee.std_logic_1164.all;
|
|
|
|
use ieee.numeric_std.all;
|
|
|
|
|
|
|
|
library work;
|
|
|
|
use work.glibc_random_helpers.all;
|
|
|
|
|
|
|
|
package glibc_random is
|
|
|
|
function pseudorand(a: integer) return std_ulogic_vector;
|
|
|
|
function pseudorand1 return std_ulogic;
|
|
|
|
end package glibc_random;
|
|
|
|
|
|
|
|
package body glibc_random is
|
|
|
|
function pseudorand(a: integer) return std_ulogic_vector is
|
|
|
|
variable tmp1, tmp2, tmp3, tmp4: std_ulogic_vector(31 downto 0);
|
|
|
|
variable ret: std_ulogic_vector(63 downto 0);
|
|
|
|
begin
|
|
|
|
tmp1 := std_ulogic_vector(to_unsigned(random, 32));
|
|
|
|
tmp2 := std_ulogic_vector(to_unsigned(random, 32));
|
|
|
|
if a <= 32 then
|
|
|
|
ret := tmp1 & tmp2;
|
|
|
|
else
|
|
|
|
tmp3 := std_ulogic_vector(to_unsigned(random, 32));
|
|
|
|
tmp4 := std_ulogic_vector(to_unsigned(random, 32));
|
|
|
|
|
|
|
|
ret := tmp1(15 downto 0) & tmp2(15 downto 0) & tmp3(15 downto 0) & tmp4(15 downto 0);
|
|
|
|
end if;
|
|
|
|
|
|
|
|
return ret((a-1) downto 0);
|
|
|
|
end;
|
|
|
|
|
|
|
|
function pseudorand1 return std_ulogic is
|
|
|
|
variable tmp: std_ulogic_vector(31 downto 0);
|
|
|
|
begin
|
|
|
|
tmp := std_ulogic_vector(to_unsigned(random, 32));
|
|
|
|
return tmp(0);
|
|
|
|
end;
|
|
|
|
end package body glibc_random;
|