Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 7th, 2012  |  syntax: None  |  size: 6.43 KB  |  hits: 12  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. -----------------------------------------------------------------------------------
  2. --                                                                               --
  3. --      Title        : Test Bench for Pseudo Random Number Generators Package    --
  4. --      Module Name  : TEST_BENCH                                                --
  5. --      Version      : 0.0.2                                                     --
  6. --      Created      : 2012/3/28                                                 --
  7. --      File Name    : test_bench.vhd                                            --
  8. --      Author       : Ichiro Kawazome <ichiro_k@ca2.so-net.ne.jp>               --
  9. --                                                                               --
  10. -----------------------------------------------------------------------------------
  11. library ieee;
  12. use     ieee.std_logic_1164.all;
  13. use     ieee.numeric_std.all;
  14. use     std.textio.all;
  15. use     work.MT19937AR.SEED_VECTOR;
  16. use     work.MT19937AR.PSEUDO_RANDOM_NUMBER_GENERATOR_TYPE;
  17. use     work.MT19937AR.NEW_PSEUDO_RANDOM_NUMBER_GENERATOR;
  18. use     work.MT19937AR.GENERATE_RANDOM_STD_LOGIC_VECTOR;
  19. use     work.MT19937AR.GENERATE_RANDOM_REAL2;
  20. entity  TEST_BENCH is
  21. end     TEST_BENCH;
  22. architecture MODEL of TEST_BENCH is
  23. begin
  24.     process
  25.         ---------------------------------------------------------------------------
  26.         -- unsigned to decimal string.
  27.         ---------------------------------------------------------------------------
  28.         function TO_DEC_STRING(arg:unsigned;len:integer;space:character) return STRING is
  29.             variable str   : STRING(len downto 1);
  30.             variable value : unsigned(arg'length-1 downto 0);
  31.         begin
  32.             value  := arg;
  33.             for i in str'right to str'left loop
  34.                 if (value > 0) then
  35.                     case (to_integer(value mod 10)) is
  36.                         when 0      => str(i) := '0';
  37.                         when 1      => str(i) := '1';
  38.                         when 2      => str(i) := '2';
  39.                         when 3      => str(i) := '3';
  40.                         when 4      => str(i) := '4';
  41.                         when 5      => str(i) := '5';
  42.                         when 6      => str(i) := '6';
  43.                         when 7      => str(i) := '7';
  44.                         when 8      => str(i) := '8';
  45.                         when 9      => str(i) := '9';
  46.                         when others => str(i) := 'X';
  47.                     end case;
  48.                 else
  49.                     if (i = str'right) then
  50.                         str(i) := '0';
  51.                     else
  52.                         str(i) := space;
  53.                     end if;
  54.                 end if;
  55.                 value := value / 10;
  56.             end loop;
  57.             return str;
  58.         end function;
  59.         ---------------------------------------------------------------------------
  60.         -- unsigned to decimal string
  61.         ---------------------------------------------------------------------------
  62.         function TO_DEC_STRING(arg:unsigned;len:integer) return STRING is
  63.         begin
  64.             return  TO_DEC_STRING(arg,len,' ');
  65.         end function;
  66.         ---------------------------------------------------------------------------
  67.         -- real number to decimal string.
  68.         ---------------------------------------------------------------------------
  69.         function TO_DEC_STRING(arg:real;len1,len2:integer) return STRING is
  70.             variable str   : STRING(len2-1 downto 0);
  71.             variable i,n,p : integer;
  72.         begin
  73.             i := integer(arg);
  74.             if    real(i) = arg then
  75.                 n := i;
  76.             elsif i > 0 and real(i) > arg then
  77.                 n := i-1;  
  78.             elsif i < 0 and real(i) < arg then
  79.                 n := i+1;
  80.             else  
  81.                 n := i;
  82.             end if;
  83.             p := integer((arg-real(n))*(10.0**len2));
  84.             return  TO_DEC_STRING(to_unsigned(n,len1-len2-1),len1-len2-1,' ') & "." &
  85.                     TO_DEC_STRING(to_unsigned(p,32),len2,'0');
  86.         end function;
  87.         ---------------------------------------------------------------------------
  88.         -- Seed Numbers for Pseudo Random Number Generator.
  89.         ---------------------------------------------------------------------------
  90.         variable seed      : SEED_VECTOR(0 to 3) := (0 => X"00000123",
  91.                                                      1 => X"00000234",
  92.                                                      2 => X"00000345",
  93.                                                      3 => X"00000456");
  94.         ---------------------------------------------------------------------------
  95.         -- Pseudo Random Number Generator Instance.
  96.         ---------------------------------------------------------------------------
  97.         variable prng      : PSEUDO_RANDOM_NUMBER_GENERATOR_TYPE := NEW_PSEUDO_RANDOM_NUMBER_GENERATOR(seed);
  98.         ---------------------------------------------------------------------------
  99.         -- Random number
  100.         ---------------------------------------------------------------------------
  101.         variable vec       : std_logic_vector(31 downto 0);
  102.         variable num       : real;
  103.         ---------------------------------------------------------------------------
  104.         -- for display
  105.         ---------------------------------------------------------------------------
  106.         constant TAG       : STRING(1 to 1) := " ";
  107.         constant SPACE     : STRING(1 to 1) := " ";
  108.         variable text_line : LINE;
  109.     begin
  110.         WRITE(text_line, TAG & "1000 outputs of genrand_int32()");
  111.         WRITELINE(OUTPUT, text_line);
  112.         for i in 0 to 999 loop
  113.             GENERATE_RANDOM_STD_LOGIC_VECTOR(prng,vec);
  114.             WRITE(text_line, TO_DEC_STRING(unsigned(vec),10));
  115.             WRITE(text_line, SPACE);
  116.             if (i mod 5 = 4) then
  117.                 WRITELINE(OUTPUT, text_line);
  118.             end if;
  119.         end loop;
  120.         WRITELINE(OUTPUT, text_line);
  121.  
  122.         WRITE(text_line, TAG & "1000 outputs of genrand_real2()");
  123.         WRITELINE(OUTPUT, text_line);
  124.         for i in 0 to 999 loop
  125.             GENERATE_RANDOM_REAL2(prng,num);
  126.             WRITE(text_line, TO_DEC_STRING(num,10,8));
  127.             WRITE(text_line, SPACE);
  128.             if (i mod 5 = 4) then
  129.                 WRITELINE(OUTPUT, text_line);
  130.             end if;
  131.         end loop;
  132.         WRITELINE(OUTPUT, text_line);
  133.  
  134.         assert(false) report TAG & " Run complete..." severity FAILURE;
  135.         wait;
  136.     end process;
  137. end MODEL;