OpenCores
URL https://opencores.org/ocsvn/lzrw1-compressor-core/lzrw1-compressor-core/trunk

Subversion Repositories lzrw1-compressor-core

[/] [lzrw1-compressor-core/] [trunk/] [hw/] [testbench/] [CompressorTopTb.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 habicht
--/**************************************************************************************************************
2
--*
3
--*    L Z R W 1   E N C O D E R   C O R E
4
--*
5
--*  A high throughput loss less data compression core.
6
--* 
7
--* Copyright 2012-2013   Lukas Schrittwieser (LS)
8
--*
9
--*    This program is free software: you can redistribute it and/or modify
10
--*    it under the terms of the GNU General Public License as published by
11
--*    the Free Software Foundation, either version 2 of the License, or
12
--*    (at your option) any later version.
13
--*
14
--*    This program is distributed in the hope that it will be useful,
15
--*    but WITHOUT ANY WARRANTY; without even the implied warranty of
16
--*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
--*    GNU General Public License for more details.
18
--*
19
--*    You should have received a copy of the GNU General Public License
20
--*    along with this program; if not, write to the Free Software
21
--*    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
22
--*    Or see <http://www.gnu.org/licenses/>
23
--*
24
--***************************************************************************************************************
25
--*
26
--* Change Log:
27
--*
28
--* Version 1.0 - 2012/10/16 - LS
29
--*   started file
30
--*
31
--* Version 1.0 - 2013/04/05 - LS
32
--*   release
33
--*
34
--***************************************************************************************************************
35
--*
36
--* Naming convention:  http://dz.ee.ethz.ch/en/information/hdl-help/vhdl-naming-conventions.html
37
--*
38
--***************************************************************************************************************
39
--*
40
--* Simple testebench for manual signal inspection of the Wishbone interfaces
41
--* and the DMA unit of CompressorTop.vhd
42
--*
43
--***************************************************************************************************************
44
library ieee;
45
use ieee.std_logic_1164.all;
46
 
47
 
48
entity CompressorTop_tb is
49
 
50
end CompressorTop_tb;
51
 
52
 
53
architecture TB of CompressorTop_tb is
54
 
55
  component CompressorTop
56
    port (
57
      ClkxCI   : in  std_logic;
58
      RstxRI   : in  std_logic;
59
      SlCycxSI : in  std_logic;
60
      SlStbxSI : in  std_logic;
61
      SlWexSI  : in  std_logic;
62
      SlSelxDI : in  std_logic_vector(3 downto 0);
63
      SlAdrxDI : in  std_logic_vector(4 downto 2);
64
      SlDatxDI : in  std_logic_vector(31 downto 0);
65
      SlDatxDO : out std_logic_vector(31 downto 0);
66
      SlAckxSO : out std_logic;
67
      SlErrxSO : out std_logic;
68
      IntxSO   : out std_logic;
69
      MaCycxSO : out std_logic;
70
      MaStbxSO : out std_logic;
71
      MaWexSO  : out std_logic;
72
      MaSelxDO : out std_logic_vector(3 downto 0);
73
      MaAdrxDO : out std_logic_vector(31 downto 0);
74
      MaDatxDO : out std_logic_vector(31 downto 0);
75
      MaDatxDI : in  std_logic_vector(31 downto 0);
76
      MaAckxSI : in  std_logic;
77
      MaErrxSI : in  std_logic);
78
  end component;
79
 
80
  constant PERIOD : time := 25 ns;
81
 
82
 
83
  signal ClkxCI   : std_logic                     := '0';
84
  signal RstxRI   : std_logic                     := '1';
85
  signal SlCycxSI : std_logic                     := '0';
86
  signal SlStbxSI : std_logic                     := '0';
87
  signal SlWexSI  : std_logic                     := '0';
88
  signal SlSelxDI : std_logic_vector(3 downto 0)  := "0000";
89
  signal SlAdrxDI : std_logic_vector(4 downto 2)  := (others => '0');
90
  signal SlDatxDI : std_logic_vector(31 downto 0) := (others => '0');
91
  signal SlDatxDO : std_logic_vector(31 downto 0) := (others => '0');
92
  signal SlAckxSO : std_logic;
93
  signal SlErrxSO : std_logic;
94
  signal IntxSO   : std_logic;
95
  signal MaCycxSO : std_logic;
96
  signal MaStbxSO : std_logic;
97
  signal MaWexSO  : std_logic;
98
  signal MaSelxDO : std_logic_vector(3 downto 0)  := (others => '0');
99
  signal MaAdrxDO : std_logic_vector(31 downto 0) := (others => '0');
100
  signal MaDatxDO : std_logic_vector(31 downto 0) := (others => '0');
101
  signal MaDatxDI : std_logic_vector(31 downto 0) := (others => '0');
102
  signal MaAckxSI : std_logic                     := '0';
103
  signal MaErrxSI : std_logic                     := '0';
104
 
105
begin
106
 
107
  ClkxCI <= not ClkxCI after PERIOD/2;
108
 
109
  process
110
  begin
111
    RstxRI <= '1';
112
    wait until ClkxCI'event and ClkxCI = '1';
113
    RstxRI <= '0';
114
    wait until ClkxCI'event and ClkxCI = '1';
115
 
116
    -- reset core
117
    wait until ClkxCI'event and ClkxCI = '1';
118
    SlCycxSI <= '1';
119
    SlStbxSI <= '1';
120
    SlAdrxDI <= "111";
121
    SlWexSI  <= '1';
122
    SlSelxDI <= "1111";
123
    SlDatxDI <= x"00000001";
124
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
125
    SlCycxSI <= '0';
126
    SlStbxSI <= '0';
127
    SlAdrxDI <= "000";
128
    SlWexSI  <= '0';
129
    SlDatxDI <= x"00000000";
130
 
131
    -- set inc dest addr flag and IE for in fifo full and for core done
132
    wait until ClkxCI'event and ClkxCI = '1';
133
    SlCycxSI <= '1';
134
    SlStbxSI <= '1';
135
    SlAdrxDI <= "001";
136
    SlWexSI  <= '1';
137
    SlDatxDI <= x"00020100";
138
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
139
    SlCycxSI <= '0';
140
    SlStbxSI <= '0';
141
    SlAdrxDI <= "000";
142
    SlWexSI  <= '0';
143
    SlDatxDI <= x"00000000";
144
 
145
    -- read flags
146
    wait until ClkxCI'event and ClkxCI = '1';
147
    SlCycxSI <= '1';
148
    SlStbxSI <= '1';
149
    SlAdrxDI <= "001";
150
    SlWexSI  <= '0';
151
    SlDatxDI <= x"00000000";
152
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
153
    SlCycxSI <= '0';
154
    SlStbxSI <= '0';
155
    SlAdrxDI <= "000";
156
 
157
 
158
    -- setup dma destination
159
    wait until ClkxCI'event and ClkxCI = '1';
160
    SlCycxSI <= '1';
161
    SlStbxSI <= '1';
162
    SlAdrxDI <= "100";
163
    SlWexSI  <= '1';
164
    SlDatxDI <= x"12345670";
165
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
166
    SlCycxSI <= '0';
167
    SlStbxSI <= '0';
168
    SlAdrxDI <= "000";
169
    SlWexSI  <= '0';
170
    SlDatxDI <= x"00000000";
171
 
172
    -- setup dma length
173
    wait until ClkxCI'event and ClkxCI = '1';
174
    SlCycxSI <= '1';
175
    SlStbxSI <= '1';
176
    SlAdrxDI <= "101";
177
    SlWexSI  <= '1';
178
    SlDatxDI <= x"00000030";
179
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
180
    SlCycxSI <= '0';
181
    SlStbxSI <= '0';
182
    SlAdrxDI <= "000";
183
    SlWexSI  <= '0';
184
    SlDatxDI <= x"00000000";
185
 
186
    -- read dma destination
187
    wait until ClkxCI'event and ClkxCI = '1';
188
    SlCycxSI <= '1';
189
    SlStbxSI <= '1';
190
    SlAdrxDI <= "100";
191
    SlWexSI  <= '0';
192
    SlDatxDI <= x"00000000";
193
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
194
    SlCycxSI <= '0';
195
    SlStbxSI <= '0';
196
    SlAdrxDI <= "000";
197
    SlWexSI  <= '0';
198
    SlDatxDI <= x"00000000";
199
 
200
    -- setup in fifo thresholds
201
    wait until ClkxCI'event and ClkxCI = '1';
202
    SlCycxSI <= '1';
203
    SlStbxSI <= '1';
204
    SlAdrxDI <= "010";
205
    SlWexSI  <= '1';
206
    SlDatxDI <= x"000f0004";
207
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
208
    SlCycxSI <= '0';
209
    SlStbxSI <= '0';
210
    SlAdrxDI <= "000";
211
    SlWexSI  <= '0';
212
    SlDatxDI <= x"00000000";
213
 
214
 
215
    -- write data
216
    wait until ClkxCI'event and ClkxCI = '1';
217
    SlCycxSI <= '1';
218
    SlStbxSI <= '1';
219
    SlAdrxDI <= "000";
220
    SlWexSI  <= '1';
221
    SlDatxDI <= x"03020100";
222
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
223
    SlCycxSI <= '0';
224
    SlStbxSI <= '0';
225
    SlAdrxDI <= "000";
226
    SlWexSI  <= '0';
227
    SlDatxDI <= x"00000000";
228
 
229
    -- write data
230
    wait until ClkxCI'event and ClkxCI = '1';
231
    SlCycxSI <= '1';
232
    SlStbxSI <= '1';
233
    SlAdrxDI <= "000";
234
    SlWexSI  <= '1';
235
    SlDatxDI <= x"07060504";
236
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
237
    SlCycxSI <= '0';
238
    SlStbxSI <= '0';
239
    SlAdrxDI <= "000";
240
    SlWexSI  <= '0';
241
    SlDatxDI <= x"00000000";
242
 
243
    -- write data
244
    wait until ClkxCI'event and ClkxCI = '1';
245
    SlCycxSI <= '1';
246
    SlStbxSI <= '1';
247
    SlAdrxDI <= "000";
248
    SlWexSI  <= '1';
249
    SlDatxDI <= x"0b0a0908";
250
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
251
    SlCycxSI <= '0';
252
    SlStbxSI <= '0';
253
    SlAdrxDI <= "000";
254
    SlWexSI  <= '0';
255
    SlDatxDI <= x"00000000";
256
 
257
    -- write data
258
    wait until ClkxCI'event and ClkxCI = '1';
259
    SlCycxSI <= '1';
260
    SlStbxSI <= '1';
261
    SlAdrxDI <= "000";
262
    SlWexSI  <= '1';
263
    SlDatxDI <= x"0f0e0d0c";
264
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
265
    SlCycxSI <= '0';
266
    SlStbxSI <= '0';
267
    SlAdrxDI <= "000";
268
    SlWexSI  <= '0';
269
    SlDatxDI <= x"00000000";
270
 
271
    -- write data
272
    wait until ClkxCI'event and ClkxCI = '1';
273
    SlCycxSI <= '1';
274
    SlStbxSI <= '1';
275
    SlAdrxDI <= "000";
276
    SlWexSI  <= '1';
277
    SlDatxDI <= x"05030201";
278
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
279
    SlCycxSI <= '0';
280
    SlStbxSI <= '0';
281
    SlAdrxDI <= "000";
282
    SlWexSI  <= '0';
283
    SlDatxDI <= x"00000000";
284
 
285
    wait until ClkxCI'event and ClkxCI = '1';
286
    SlCycxSI <= '1';
287
    SlStbxSI <= '1';
288
    SlAdrxDI <= "000";
289
    SlWexSI  <= '1';
290
    SlDatxDI <= x"0b0a0706";
291
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
292
    SlCycxSI <= '0';
293
    SlStbxSI <= '0';
294
    SlAdrxDI <= "000";
295
    SlWexSI  <= '0';
296
    SlDatxDI <= x"00000000";
297
 
298
    -- write data
299
    wait until ClkxCI'event and ClkxCI = '1';
300
    SlCycxSI <= '1';
301
    SlStbxSI <= '1';
302
    SlAdrxDI <= "000";
303
    SlWexSI  <= '1';
304
    SlDatxDI <= x"1413120c";
305
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
306
    SlCycxSI <= '0';
307
    SlStbxSI <= '0';
308
    SlAdrxDI <= "000";
309
    SlWexSI  <= '0';
310
    SlDatxDI <= x"00000000";
311
 
312
    -- write data
313
    wait until ClkxCI'event and ClkxCI = '1';
314
    SlCycxSI <= '1';
315
    SlStbxSI <= '1';
316
    SlAdrxDI <= "000";
317
    SlWexSI  <= '1';
318
    SlDatxDI <= x"08070605";
319
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
320
    SlCycxSI <= '0';
321
    SlStbxSI <= '0';
322
    SlAdrxDI <= "000";
323
    SlWexSI  <= '0';
324
    SlDatxDI <= x"00000000";
325
 
326
    --wait for PERIOD*2*20;
327
 
328
    -- enable done interrupt
329
--    wait until ClkxCI'event and ClkxCI = '1';
330
--    SlCycxSI <= '1';
331
--    SlStbxSI <= '1';
332
--    SlAdrxDI <= "001";
333
--    SlWexSI  <= '1';
334
--    SlDatxDI <= x"00200102";
335
--    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
336
--    SlCycxSI <= '0';
337
--    SlStbxSI <= '0';
338
--    SlAdrxDI <= "000";
339
--    SlWexSI  <= '0';
340
--    SlDatxDI <= x"00000000";
341
 
342
    -- flush core
343
    wait until ClkxCI'event and ClkxCI = '1';
344
    SlCycxSI <= '1';
345
    SlStbxSI <= '1';
346
    SlAdrxDI <= "111";
347
    SlWexSI  <= '1';
348
    SlDatxDI <= x"00000002";
349
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
350
    SlCycxSI <= '0';
351
    SlStbxSI <= '0';
352
    SlAdrxDI <= "000";
353
    SlWexSI  <= '0';
354
    SlDatxDI <= x"00000000";
355
 
356
    wait for PERIOD*200;
357
 
358
    -- read flags
359
    wait until ClkxCI'event and ClkxCI = '1';
360
    SlCycxSI <= '1';
361
    SlStbxSI <= '1';
362
    SlAdrxDI <= "001";
363
    SlWexSI  <= '0';
364
    SlDatxDI <= x"00000000";
365
    wait until ClkxCI'event and ClkxCI = '1' and SlAckxSO = '1';
366
    SlCycxSI <= '0';
367
    SlStbxSI <= '0';
368
    SlAdrxDI <= "000";
369
 
370
 
371
 
372
 
373
    wait;
374
  end process;
375
 
376
  MaAckxSI <= MaCycxSO and MaStbxSO;
377
  --MaErrxSI <= MaCycxSO and MaStbxSO;
378
 
379
  DUT : CompressorTop
380
    port map (
381
      ClkxCI   => ClkxCI,
382
      RstxRI   => RstxRI,
383
      SlCycxSI => SlCycxSI,
384
      SlStbxSI => SlStbxSI,
385
      SlWexSI  => SlWexSI,
386
      SlSelxDI => SlSelxDI,
387
      SlAdrxDI => SlAdrxDI,
388
      SlDatxDI => SlDatxDI,
389
      SlDatxDO => SlDatxDO,
390
      SlAckxSO => SlAckxSO,
391
      SlErrxSO => SlErrxSO,
392
      IntxSO   => IntxSO,
393
      MaCycxSO => MaCycxSO,
394
      MaStbxSO => MaStbxSO,
395
      MaWexSO  => MaWexSO,
396
      MaSelxDO => MaSelxDO,
397
      MaAdrxDO => MaAdrxDO,
398
      MaDatxDO => MaDatxDO,
399
      MaDatxDI => MaDatxDI,
400
      MaAckxSI => MaAckxSI,
401
      MaErrxSI => MaErrxSI);
402
 
403
 
404
end TB;
405
 
406
 

powered by: WebSVN 2.1.0

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