OpenCores
URL https://opencores.org/ocsvn/complex-gaussian-pseudo-random-number-generator/complex-gaussian-pseudo-random-number-generator/trunk

Subversion Repositories complex-gaussian-pseudo-random-number-generator

[/] [complex-gaussian-pseudo-random-number-generator/] [trunk/] [urng/] [MT_GET_TB.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 cowboyor
--/////////////////////////MT_GET TEST BENCH///////////////////////////////
2
--Purpose: test bench for MT_GET module
3
--Created by: Minzhen Ren
4
--Last Modified by: Minzhen Ren
5
--Last Modified Date: September 01, 2010
6
--Lately Updates: File was created
7
--////////////////////////////////////////////////////////////////////////
8
library IEEE;
9
  use IEEE.std_logic_1164.all;
10
  use IEEE.numeric_std.all;
11
  use IEEE.math_real.all;
12
library STD;
13
    use STD.textio.all;
14
 
15
entity MT_GET_TB is
16
end MT_GET_TB;
17
 
18
architecture TB of MT_GET_TB is
19
 
20
        --interface signals
21
        signal CLK       : std_logic;
22
        signal RESET : std_logic;
23
        signal PAUSE : std_logic;
24
        signal OUT_SIG : std_logic;
25
        signal SEED  : std_logic_vector( 31 downto 0 );
26
        signal RND_NUM_BIN : std_logic_vector( 31 downto 0 );
27
        signal RND_NUM_INT : integer;
28
        signal NUMS  : integer;
29
        --half of a period defined
30
        signal HALF_PERIOD : time := 10 ns;
31
        --FILE I/O
32
        file INFILE  : TEXT open READ_MODE is "commands.stim";
33
        file OUTFILE : TEXT open WRITE_MODE is "rnd_num.out";
34
        --components
35
        component MT_GET is
36
                generic(
37
                DATA_WIDTH : Natural := 32
38
                );
39
                port(
40
                        signal CLK     : in  std_logic;
41
                        signal RESET   : in  std_logic;
42
                        signal SEED_IN : in  std_logic_vector( DATA_WIDTH-1 downto 0 );
43
                        signal PAUSE   : in  std_logic;
44
                        signal OUT_SIG : out std_logic;
45
                        signal OUTPUT  : out std_logic_vector( DATA_WIDTH-1 downto 0 )
46
                );
47
        end component;
48
 
49
        function Slv_To_String(SLV: std_logic_vector(31 downto 0)) return string is
50
          variable RET: string(32 downto 1);
51
          variable ONEBIT : character;
52
        begin
53
          for I in SLV'range loop
54
                case SLV(I) is
55
                  when '1' => RET(I+1) := '1';
56
                  when '0' => RET(I+1) := '0';
57
                  when others => null;
58
                end case;
59
          end loop;
60
          return(RET);
61
        end function Slv_To_String;
62
 
63
        begin
64
        -- PAUSE <= '0';
65
        PAUSE_PROCESS : process
66
        begin
67
                PAUSE <= '0';
68
                wait for 50230 ns;
69
                PAUSE <= '1' ;
70
                wait for 80 ns;
71
                PAUSE <= '0';
72
                wait for 1 ms;
73
        end process;
74
 
75
        RND_NUM_INT <= to_integer(signed(RND_NUM_BIN));
76
 
77
        CLK_PROC : process
78
        begin
79
                CLK <= '0';
80
                wait for HALF_PERIOD;
81
                CLK <= '1';
82
                wait for HALF_PERIOD;
83
        end process;
84
 
85
        MT_GET_BLK : MT_GET
86
        port map(
87
                CLK => CLK,
88
                RESET => RESET,
89
                SEED_IN => SEED,
90
                PAUSE => PAUSE,
91
                OUT_SIG => OUT_SIG,
92
                OUTPUT => RND_NUM_BIN
93
        );
94
 
95
        TB_FLOW : process
96
 
97
                variable FILE_LINE_IN   : line; --INFILE LINE
98
                variable FILE_LINE_OUT  : line;
99
                variable TEMPINT        : integer;
100
                variable CMD            : string(5 downto 1);
101
 
102
        begin
103
 
104
                if (not(ENDFILE(INFILE))) then
105
 
106
                        READLINE(INFILE, FILE_LINE_IN);
107
                        READ(FILE_LINE_IN, CMD);
108
 
109
                        if ( CMD = "NUMS " ) then
110
                        -- Read the number of outputs
111
                                READ(FILE_LINE_IN, TEMPINT);
112
                                NUMS <= TEMPINT;
113
                                wait until RISING_EDGE(OUT_SIG);
114
                                for j in 1 to NUMS loop
115
                                        wait for HALF_PERIOD;
116
                                        wait for HALF_PERIOD;
117
                                        wait for HALF_PERIOD;
118
                                        write(FILE_LINE_OUT, RND_NUM_INT);
119
                                        writeline(OUTFILE, FILE_LINE_OUT);
120
                                        wait until FALLING_EDGE(OUT_SIG);
121
                                        wait until RISING_EDGE(OUT_SIG);
122
                                end loop;
123
                        elsif ( CMD = "RESET" ) then
124
                                RESET <= '1';
125
                                wait until FALLING_EDGE(CLK);
126
                                wait until FALLING_EDGE(CLK);
127
                                RESET <= '0';
128
                        elsif ( CMD = "SEED " ) then
129
                                READ(FILE_LINE_IN, TEMPINT);
130
                                SEED <= std_logic_vector(to_unsigned(TEMPINT, 32));
131
                        else
132
                                report("Command not recognized");
133
                        end if;
134
                else
135
                        assert FALSE report("Simulation Completed") severity FAILURE;
136
                end if;
137
        end process;
138
 
139
        -- END_PROCESS : process
140
        -- begin
141
                -- wait for 60000 ns;
142
                -- assert FALSE report("Simulation Completed") severity FAILURE;
143
        -- end process;
144
 
145
end TB;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.