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

Subversion Repositories tdm

[/] [tdm/] [trunk/] [code/] [tdm_cont/] [tb/] [tdm_cont_tb.vhd] - Blame information for rev 8

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 khatib
-------------------------------------------------------------------------------
2
-- Title      : TDM controller test bench
3
-- Project    : TDM controller
4
-------------------------------------------------------------------------------
5
-- File       : tdm_cont_tb.vhd
6
-- Author     : Jamil Khatib  <khatib@ieee.org>
7
-- Organization:  OpenCores.org
8
-- Created    : 2001/05/09
9
-- Last update:2001/05/18
10
-- Platform   : 
11
-- Simulators  : NC-sim/linux, Modelsim XE/windows98
12
-- Synthesizers: Leonardo
13
-- Target      : 
14
-- Dependency  : ieee.std_logic_1164, ieee.std_logic_unsigned
15
--               tdm.components_pkg
16
-------------------------------------------------------------------------------
17
-- Description:  tdm controller test bench
18
-------------------------------------------------------------------------------
19
-- Copyright (c) 2001  Jamil Khatib
20
-- 
21
-- This VHDL design file is an open design; you can redistribute it and/or
22
-- modify it and/or implement it after contacting the author
23
-- You can check the draft license at
24
-- http://www.opencores.org/OIPC/license.shtml
25
-------------------------------------------------------------------------------
26
-- Revisions  :
27
-- Revision Number :   1
28
-- Version         :   0.1
29
-- Date            :  2001/05/09
30
-- Modifier        :  Jamil Khatib  <khatib@ieee.org>
31
-- Desccription    :  Created
32
-- ToOptimize      :
33
-- Known Bugs      : 
34
-------------------------------------------------------------------------------
35
-- $Log: not supported by cvs2svn $
36
-- Revision 1.2  2001/05/18 16:56:16  jamil
37
-- Serial Data added
38
--
39
-- Revision 1.1  2001/05/13 21:13:54  jamil
40
-- Initial Release
41
--
42
-------------------------------------------------------------------------------
43
LIBRARY ieee;
44
USE ieee.std_logic_1164.ALL;
45
USE ieee.std_logic_unsigned.ALL;
46
 
47
LIBRARY TDM;
48
USE TDM.components_pkg.ALL;
49
 
50
-------------------------------------------------------------------------------
51
 
52
ENTITY tdm_cont_tb IS
53
 
54
END tdm_cont_tb;
55
 
56
-------------------------------------------------------------------------------
57
 
58
ARCHITECTURE tdm_cont_beh OF tdm_cont_tb IS
59
 
60
 
61
  SIGNAL rst_n        : STD_LOGIC := '0';
62
  SIGNAL C2           : STD_LOGIC := '0';
63
  SIGNAL DSTi         : STD_LOGIC;
64
  SIGNAL DSTo         : STD_LOGIC;
65
  SIGNAL F0_n         : STD_LOGIC;
66
  SIGNAL F0od_n       : STD_LOGIC;
67
  SIGNAL CLK_I        : STD_LOGIC := '0';
68
  SIGNAL RST_I        : STD_LOGIC;
69
  SIGNAL NoChannels   : STD_LOGIC_VECTOR(4 DOWNTO 0);
70
  SIGNAL DropChannels : STD_LOGIC_VECTOR(4 DOWNTO 0);
71
  SIGNAL RxD          : STD_LOGIC_VECTOR(7 DOWNTO 0);
72
  SIGNAL RxValidData  : STD_LOGIC;
73
  SIGNAL FramErr      : STD_LOGIC;
74
  SIGNAL RxRead       : STD_LOGIC;
75
  SIGNAL RxRdy        : STD_LOGIC;
76
  SIGNAL TxErr        : STD_LOGIC;
77
  SIGNAL TxD          : STD_LOGIC_VECTOR(7 DOWNTO 0);
78
  SIGNAL TxValidData  : STD_LOGIC;
79
  SIGNAL TxWrite      : STD_LOGIC;
80
  SIGNAL TxRdy        : STD_LOGIC;
81
 
82
  SIGNAL EnableSerialIF : STD_LOGIC := '0';    -- Enable Serial Interface
83
 
84
  SIGNAL Tx_en0 : STD_LOGIC;            -- Tx enable channel 0
85
  SIGNAL Tx_en1 : STD_LOGIC;            -- Tx enable channel 1
86
  SIGNAL Tx_en2 : STD_LOGIC;            -- Tx enable channel 2
87
 
88
  SIGNAL Rx_en0 : STD_LOGIC;            -- Rx enable channel 0
89
  SIGNAL Rx_en1 : STD_LOGIC;            -- Rx enable channel 1
90
  SIGNAL Rx_en2 : STD_LOGIC;            -- Rx enable channel 2
91
 
92
  SIGNAL SerDo : STD_LOGIC;             -- serial Data out
93
  SIGNAL SerDi : STD_LOGIC := '0';              -- Serial Data in
94
 
95
 
96
    TYPE SERIAL_typ IS ARRAY (0 TO 1023) OF STD_LOGIC;  -- Serial Data array
97
 
98
  SIGNAL RxData : SERIAL_typ;           -- Rx Serial Data
99
BEGIN  -- tdm_cont_beh
100
 
101
  NoChannels   <= "00101";
102
  DropChannels <= "00011";
103
 
104
  CLK_I <= NOT CLK_I AFTER 20 NS;
105
  C2    <= NOT C2    AFTER 244 NS;
106
  rst_n <= '0',
107
           '1'       AFTER 730 NS;
108
 
109
 
110
-------------------------------------------------------------------------------
111
  -- purpose: Initialization
112
  -- type   : combinational
113
  -- inputs : rst_n
114
  -- outputs: 
115
  INIT               : PROCESS (rst_n)
116
    VARIABLE counter : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";  -- Internal Counter
117
  BEGIN  -- PROCESS INIT
118
 
119
    IF (rst_n = '0') THEN
120
 
121
      RxData(0) <= '1';
122
      RxData(1) <= '1';
123
      RxData(2) <= '1';
124
      RxData(3) <= '1';
125
      RxData(4) <= '1';
126
      RxData(5) <= '1';
127
      RxData(6) <= '1';
128
      RxData(7) <= '1';
129
 
130
      RxData(8)  <= '1';
131
      RxData(9)  <= '1';
132
      RxData(10) <= '1';
133
      RxData(11) <= '1';
134
      RxData(12) <= '1';
135
      RxData(13) <= '1';
136
      RxData(14) <= '1';
137
      RxData(15) <= '1';
138
 
139
      RxData(16) <= '1';
140
      RxData(17) <= '1';
141
      RxData(18) <= '1';
142
      RxData(19) <= '1';
143
      RxData(20) <= '1';
144
      RxData(21) <= '1';
145
      RxData(22) <= '1';
146
      RxData(23) <= '1';
147
 
148
      -- Idle
149
      RxData(24) <= '0';
150
      RxData(25) <= '1';
151
      RxData(26) <= '1';
152
      RxData(27) <= '1';
153
      RxData(28) <= '1';
154
      RxData(29) <= '1';
155
      RxData(30) <= '1';
156
      RxData(31) <= '0';
157
      -- Opening Flag
158
 
159
      -- Data pattern
160
      FOR i IN 0 TO 59 LOOP
161
        RxData(32+8*i+0) <= Counter(0);
162
        RxData(32+8*i+1) <= Counter(1);
163
        RxData(32+8*i+2) <= Counter(2);
164
        RxData(32+8*i+3) <= Counter(3);
165
        RxData(32+8*i+4) <= Counter(4);
166
        RxData(32+8*i+5) <= Counter(5);
167
        RxData(32+8*i+6) <= Counter(6);
168
        RxData(32+8*i+7) <= Counter(7);
169
 
170
        Counter := Counter +1;
171
      END LOOP;  -- i
172
 
173
    END IF;
174
  END PROCESS INIT;
175
-------------------------------------------------------------------------------
176
 
177
  Frame_gen : PROCESS
178
 
179
  BEGIN  -- process Frame_gen
180
    F0_n <= '1';
181
    WAIT UNTIL rst_n = '1';
182
    WAIT UNTIL C2 = '0';
183
 
184
    WHILE TRUE LOOP
185
 
186
      F0_n <= '0';
187
      WAIT UNTIL C2 = '1';
188
      WAIT UNTIL C2 = '0';
189
      F0_n <= '1';
190
 
191
      FOR i IN 0 TO 254 LOOP
192
        WAIT UNTIL C2 = '1';
193
        WAIT UNTIL C2 = '0';
194
 
195
      END LOOP;  -- i 
196
    END LOOP;
197
 
198
  END PROCESS Frame_gen;
199
 
200
-------------------------------------------------------------------------------
201
  -- purpose: Rx Data generator
202
  -- type   : combinational
203
  -- inputs : C2, rst_n
204
  -- outputs: 
205
  Rx_gen       : PROCESS
206
    VARIABLE i : INTEGER := 0;
207
  BEGIN  -- PROCESS Rx_gen
208
    DSTi                 <= '1';
209
 
210
    WAIT UNTIL rst_n = '1';
211
    WHILE (TRUE) LOOP
212
 
213
      WAIT UNTIL F0_n = '0';
214
 
215
      FOR counter IN 0 TO 255 LOOP
216
 
217
        DSTi <= RxData(i);              --(counter+i*8);
218
 
219
        WAIT UNTIL C2 = '1';
220
 
221
        i := i +1;
222
 
223
      END LOOP;  -- counter
224
 
225
    END LOOP;  -- while
226
 
227
  END PROCESS Rx_gen;
228
-------------------------------------------------------------------------------  
229
 
230
  read_backend : PROCESS
231
 
232
  BEGIN  -- PROCESS HDLC_read
233
    RxRead <= '0';
234
 
235
    WHILE (TRUE) LOOP
236
      WAIT UNTIL Rxrdy = '1';
237
      WAIT UNTIL CLK_I = '1';
238
      WAIT UNTIL CLK_I = '0';
239
      RxRead <= '1';
240
      WAIT UNTIL Rxrdy = '0';
241
      WAIT UNTIL CLK_I = '0';
242
      RxRead <= '0';
243
 
244
    END LOOP;
245
 
246
  END PROCESS read_backend;
247
-------------------------------------------------------------------------------
248
  -- purpose: Tx Data generation
249
  -- type   : combinational
250
  -- inputs : 
251
  -- outputs: 
252
  Tx_gen             : PROCESS
253
    VARIABLE counter : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";  -- Interal counter
254
  BEGIN  -- process Tx_gen
255
 
256
    TxWrite <= '0';
257
 
258
    WHILE TRUE LOOP
259
      WAIT UNTIL TxRdy = '1';
260
      WAIT UNTIL CLK_I = '1';
261
      WAIT UNTIL CLK_I = '0';
262
      TxD     <= counter;
263
      TxWrite <= '1';
264
      counter := counter + 1;
265
      WAIT UNTIL TxRdy = '0';
266
      WAIT UNTIL CLK_I = '0';
267
      TxWrite <= '0';
268
    END LOOP;
269
 
270
  END PROCESS Tx_gen;
271
-------------------------------------------------------------------------------
272
  TxValidData <= '0',
273
                 '1' AFTER 20000 NS,
274
                 '0' AFTER 144000 NS;
275
-------------------------------------------------------------------------------
276
 
277
  DUT: tdm_cont_ent
278
    PORT MAP (
279
      rst_n          => rst_n,
280
      C2             => C2,
281
      DSTi           => DSTi,
282
      DSTo           => DSTo,
283
      F0_n           => F0_n,
284
      F0od_n         => F0od_n,
285
      CLK_I          => CLK_I,
286
      NoChannels     => NoChannels,
287
      DropChannels   => DropChannels,
288
      RxD            => RxD,
289
      RxValidData    => RxValidData,
290
      FramErr        => FramErr,
291
      RxRead         => RxRead,
292
      RxRdy          => RxRdy,
293
      TxErr          => TxErr,
294
      TxD            => TxD,
295
      TxValidData    => TxValidData,
296
      TxWrite        => TxWrite,
297
      TxRdy          => TxRdy,
298
      EnableSerialIF => EnableSerialIF,
299
      Tx_en0         => Tx_en0,
300
      Tx_en1         => Tx_en1,
301
      Tx_en2         => Tx_en2,
302
      Rx_en0         => Rx_en0,
303
      Rx_en1         => Rx_en1,
304
      Rx_en2         => Rx_en2,
305
      SerDo          => SerDo,
306
      SerDi          => SerDi);
307
 
308
END tdm_cont_beh;
309
 
310
-------------------------------------------------------------------------------

powered by: WebSVN 2.1.0

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