OpenCores
URL https://opencores.org/ocsvn/funbase_ip_library/funbase_ip_library/trunk

Subversion Repositories funbase_ip_library

[/] [funbase_ip_library/] [trunk/] [TUT/] [ip.hwp.accelerator/] [dctqidct/] [1.0/] [hdl/] [idct/] [IDCT_core_tester.vhd] - Blame information for rev 145

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 lanttu
------------------------------------------------------------------------------
2
-- Author               : Timo Alho
3
-- e-mail               : timo.a.alho@tut.fi
4
-- Date                 : 28.06.2004 14:47:58
5
-- File                 : IDCT_core_tester.vhd
6
-- Design               : VHDL Entity IDCT_core_tester.beh
7
------------------------------------------------------------------------------
8
-- Description  :
9
------------------------------------------------------------------------------
10
LIBRARY ieee;
11
USE ieee.std_logic_1164.ALL;
12
USE ieee.std_logic_arith.ALL;
13
LIBRARY idct;
14
USE idct.IDCT_pkg.ALL;
15
LIBRARY STD;
16
USE STD.TEXTIO.ALL;
17
USE IEEE.STD_LOGIC_TEXTIO.ALL;
18
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
19
 
20
ENTITY IDCT_core_tester IS
21
  PORT(
22
    data_out         : IN  std_logic_vector (IDCT_resultw_co-1 DOWNTO 0);
23
    ready_for_rx     : IN  std_logic;
24
    wr_out           : IN  std_logic;
25
    clk              : OUT std_logic;
26
    data_in          : OUT std_logic_vector (IDCT_inputw_co-1 DOWNTO 0);
27
    next_block_ready : OUT std_logic;
28
    rst_n            : OUT std_logic;
29
    wr_new_data      : OUT std_logic
30
    );
31
 
32
-- Declarations
33
 
34
END IDCT_core_tester;
35
 
36
--
37
ARCHITECTURE beh OF IDCT_core_tester IS
38
  CONSTANT period : time := 50 ns;
39
 
40
  SIGNAL test_clk   : std_logic := '0';
41
  SIGNAL test_rst_n : std_logic := '0';
42
  SIGNAL counter    : integer   := 0;
43
 
44
  SIGNAL input_counter  : integer := 0;
45
  SIGNAL output_counter : integer := 8;
46
 
47
  SIGNAL wr_new_data_r      : std_logic;
48
  SIGNAL next_block_ready_r : std_logic := '1';
49
  SIGNAL data_in_r          : std_logic_vector (IDCT_inputw_co-1 DOWNTO 0);
50
 
51
  SIGNAL InputFinished     : std_logic := '0';
52
  SIGNAL LastOutputCounter : integer   := 0;
53
 
54
BEGIN
55
 
56
  --generate clock signal
57
  Clock : PROCESS
58
 
59
    VARIABLE clk_tmp : std_logic := '0';
60
  BEGIN
61
    WHILE (true) LOOP
62
      WAIT FOR PERIOD/2;
63
      clk_tmp                    := NOT (clk_tmp);
64
      test_clk <= clk_tmp;
65
    END LOOP;
66
  END PROCESS;
67
 
68
  --generate reset signal
69
  reset                     : PROCESS (test_clk)
70
    VARIABLE system_reseted : std_logic := '0';
71
  BEGIN  -- PROCESS reset
72
    IF test_clk'event AND test_clk = '1' THEN  -- rising clock edge
73
      IF (system_reseted = '0') THEN
74
        test_rst_n <= '0';
75
        system_reseted                  := '1';
76
      ELSE
77
        test_rst_n <= '1';
78
      END IF;
79
    END IF;
80
  END PROCESS reset;
81
 
82
 
83
  --feed input data!
84
  datain             : PROCESS (test_clk)
85
    FILE FileIn      : text;
86
    FILE FileIn_ctrl : text;
87
 
88
    VARIABLE files_open : std_logic := '0';
89
 
90
    -- Väliaikaismuutuja, johon luetaan kokonaisluku luetusta rivistä
91
    VARIABLE integerin : integer;
92
 
93
    -- Välimuuttuja, johon luetaan tekstirivi tiedostosta
94
    VARIABLE linein : line;
95
 
96
    --temporary index variable
97
    VARIABLE temp_data : signed(IDCT_inputw_co-1 DOWNTO 0);
98
 
99
  BEGIN  -- PROCESS datain
100
    IF (test_rst_n = '0') THEN
101
      --open files
102
      IF (files_open = '0') THEN
103
        File_open(Filein, "testdata/idct_test_input.txt", read_mode);
104
        File_open(FileIn_ctrl, "testdata/idct_input_ctrl.txt", read_mode);
105
        files_open := '1';
106
      END IF;
107
 
108
      -- execute the testing cycle in every test_clk cycle
109
    ELSIF (test_clk = '1' AND test_clk'event) THEN
110
      wr_new_data_r <= '0';
111
 
112
      IF (endfile(filein_ctrl)) THEN
113
        File_close(filein_ctrl);
114
        File_open(filein_ctrl, "idct_input_ctrl.txt", read_mode);
115
      END IF;
116
 
117
      IF (endfile(FileIn)) THEN
118
        --finished reading input data
119
        InputFinished <= '1';
120
      END IF;
121
 
122
      IF (input_counter /= 0) THEN
123
        --IDCT can receive data
124
        IF (NOT ENDFILE(filein)) THEN
125
          READLINE(filein, linein);
126
          READ(linein, integerin);
127
          temp_data := conv_signed(integerin, IDCT_inputw_co);
128
          data_in_r     <= conv_std_logic_vector(temp_data, IDCT_inputw_co);
129
          wr_new_data_r <= '1';
130
          input_counter <= input_counter - 1;
131
        END IF;
132
 
133
      ELSIF (ready_for_rx = '1') THEN
134
        input_counter <= 8;
135
      END IF;
136
    END IF;
137
  END PROCESS datain;
138
 
139
  wr_new_data <= wr_new_data_r;
140
  data_in     <= data_in_r;
141
 
142
  dataout               : PROCESS (test_clk)
143
    FILE FileOut        : text;
144
    FILE FileReference  : text;
145
    FILE FileOut_ctrl   : text;
146
    VARIABLE files_open : std_logic := '0';
147
 
148
    VARIABLE tmp       : integer;
149
    VARIABLE lineout   : line;
150
    VARIABLE integerin : integer;
151
 
152
    -- Välimuuttuja, johon luetaan tekstirivi tiedostosta
153
    VARIABLE linein : line;
154
 
155
  BEGIN  -- PROCESS dataout
156
    IF (test_rst_n = '0') THEN
157
      IF (files_open = '0') THEN
158
        files_open := '1';
159
        File_open(FileOut, "testdata/idct_test_output.txt", write_mode);
160
        File_open(FileReference, "testdata/idct_reference_output.txt", read_mode);
161
        File_open(FileOut_ctrl, "testdata/idct_output_ctrl.txt", read_mode);
162
      END IF;
163
 
164
 
165
    ELSIF (test_clk = '1' AND test_clk'event) THEN
166
 
167
      IF (endfile(fileout_ctrl)) THEN
168
        File_close(fileout_ctrl);
169
        File_open(fileout_ctrl, "testdata/idct_output_ctrl.txt", read_mode);
170
      END IF;
171
 
172
      ASSERT (NOT (LastOutputCounter = 64))
173
        REPORT "TEST PASSED : Peak error is no more than 1. Run matlab-script 'idct_analyze_vectors' if you want more accurate analysis."
174
        SEVERITY failure;
175
 
176
      IF (wr_out = '1') THEN
177
        IF (output_counter /= 0) THEN
178
          tmp := conv_integer(signed(data_out));
179
          WRITE(LineOut, tmp, left, 6);
180
          WRITELINE(FileOut, lineout);
181
 
182
          --compare output data with reference data
183
          readline(FileReference, linein);
184
          read(linein, integerin);
185
          ASSERT (ABS(tmp-integerin) < 2)
186
            REPORT "TEST FAILED : Peak error is more than 1"
187
            SEVERITY failure;
188
 
189
          --if this is last block
190
          IF (InputFinished = '1') THEN
191
            LastOutputCounter <= LastOutputCounter + 1;
192
          END IF;
193
        END IF;
194
 
195
        READLINE(fileout_ctrl, linein);
196
        READ(linein, integerin);
197
        IF (integerin = 1) THEN
198
          next_block_ready_r <= '1';
199
          output_counter     <= 8;
200
        ELSE
201
          IF (output_counter > 0) THEN
202
            output_counter   <= output_counter - 1;
203
          END IF;
204
          next_block_ready_r <= '0';
205
        END IF;
206
 
207
      ELSIF (next_block_ready_r = '0') THEN
208
        READLINE(fileout_ctrl, linein);
209
        READ(linein, integerin);
210
        IF (integerin = 1) THEN
211
          next_block_ready_r <= '1';
212
          output_counter     <= 8;
213
        ELSE
214
          IF (output_counter > 0) THEN
215
            output_counter   <= output_counter - 1;
216
          END IF;
217
          next_block_ready_r <= '0';
218
        END IF;
219
      END IF;
220
    END IF;
221
 
222
  END PROCESS dataout;
223
 
224
  next_block_ready <= next_block_ready_r;
225
  rst_n            <= test_rst_n;
226
  clk              <= test_clk;
227
 
228
END beh;
229
 

powered by: WebSVN 2.1.0

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