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

Subversion Repositories tdm_switch

[/] [tdm_switch/] [web_uploads/] [testbench_top.v] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 root
`timescale 1 ns / 1 ns
2
 
3
module testbench();
4
 
5
// DATE:     Mon May 19 20:22:16 2003 
6
// TITLE:    
7
// MODULE:   TDM_Switch
8
// DESIGN:   TDM_Switch
9
// FILENAME: TDM_Switch
10
// PROJECT:  tdm_switch
11
// VERSION:  Version
12
 
13
 
14
// Inputs
15
    reg CLKIN;
16
    reg reset;
17
    reg R_W;
18
    reg EN;
19
    reg ram_clk;
20
    reg [8:0] ADDR;
21
    reg [8:0] DIN;
22
 
23
    wire [7:0] tdm_in;
24
 
25
 
26
// Outputs
27
    wire [7:0] tdm_out;
28
    wire CLKOUT;
29
    wire FS_SIG;
30
    wire [8:0] DOUT;
31
 
32
 
33
// Bidirs
34
 
35
 
36
reg     [7:0] frame_reg;
37
reg     [7:0] slot_load_reg;
38
wire    slot_load;
39
wire    [4:0] time_slot;
40
 
41
 
42
reg     [7:0] bit_counter;
43
reg     [4:0] timeslot_counter;
44
 
45
reg     [7:0] stream_0_mem_in [31:0];
46
reg     [7:0] stream_1_mem_in [31:0];
47
reg     [7:0] stream_2_mem_in [31:0];
48
reg     [7:0] stream_3_mem_in [31:0];
49
reg     [7:0] stream_4_mem_in [31:0];
50
reg     [7:0] stream_5_mem_in [31:0];
51
reg     [7:0] stream_6_mem_in [31:0];
52
reg     [7:0] stream_7_mem_in [31:0];
53
 
54
reg     [15:0] MEMORY [0:263];
55
 
56
reg     [7:0] stream_0_shift_reg_in;
57
reg     [7:0] stream_1_shift_reg_in;
58
reg     [7:0] stream_2_shift_reg_in;
59
reg     [7:0] stream_3_shift_reg_in;
60
reg     [7:0] stream_4_shift_reg_in;
61
reg     [7:0] stream_5_shift_reg_in;
62
reg     [7:0] stream_6_shift_reg_in;
63
reg     [7:0] stream_7_shift_reg_in;
64
 
65
reg     [7:0] stream_0_shift_reg_out;
66
reg     [7:0] stream_1_shift_reg_out;
67
reg     [7:0] stream_2_shift_reg_out;
68
reg     [7:0] stream_3_shift_reg_out;
69
reg     [7:0] stream_4_shift_reg_out;
70
reg     [7:0] stream_5_shift_reg_out;
71
reg     [7:0] stream_6_shift_reg_out;
72
reg     [7:0] stream_7_shift_reg_out;
73
 
74
 
75
reg     [4:0] display_en;
76
 
77
wire    in_stream_0, out_stream_0;
78
wire    in_stream_1, out_stream_1;
79
wire    in_stream_2, out_stream_2;
80
wire    in_stream_3, out_stream_3;
81
wire    in_stream_4, out_stream_4;
82
wire    in_stream_5, out_stream_5;
83
wire    in_stream_6, out_stream_6;
84
wire    in_stream_7, out_stream_7;
85
 
86
wire    [15:0] DATA_IN;
87
 
88
// Instantiate the UUT
89
 
90
tdm_switch_top    UUT (
91
                       .clk_in(CLKIN),
92
                       .clk_out(CLKOUT),
93
                       .frame_sync(FS_SIG),
94
                       .rx_stream(tdm_in),
95
                       .tx_stream(tdm_out),
96
                       .reset(reset),
97
                       .mpi_clk(ram_clk),
98
                       .mpi_cs(EN),
99
                       .mpi_rw(R_W),
100
                       .mpi_addr(ADDR[8:0]),
101
                       .mpi_data_in(DIN),
102
                       .mpi_data_out(DOUT)
103
                      );
104
 
105
// Initialize Inputs
106
//    `ifdef auto_init
107
 
108
        initial begin
109
            CLKIN = 0;
110
            reset = 0;
111
            R_W = 0;
112
            EN = 0;
113
            ram_clk = 0;
114
            ADDR = 0;
115
            DIN = 0;
116
            display_en = 0;
117
           #2000 reset = 1;
118
        end
119
 
120
//    `endif
121
 
122
 
123
//=====================================================================
124
initial
125
    begin
126
      $readmemh ("stream_0.dat", stream_0_mem_in);
127
      $readmemh ("stream_1.dat", stream_1_mem_in);
128
      $readmemh ("stream_2.dat", stream_2_mem_in);
129
      $readmemh ("stream_3.dat", stream_3_mem_in);
130
      $readmemh ("stream_4.dat", stream_4_mem_in);
131
      $readmemh ("stream_5.dat", stream_5_mem_in);
132
      $readmemh ("stream_6.dat", stream_6_mem_in);
133
      $readmemh ("stream_7.dat", stream_7_mem_in);
134
 
135
         $readmemh ("map.dat", MEMORY);
136
    end
137
 
138
//=====================================================================
139
always #122 CLKIN = ~CLKIN;
140
 
141
always #100 ram_clk = ~ram_clk;
142
 
143
assign  DATA_IN = MEMORY [ADDR];
144
 
145
always @ (DATA_IN)
146
   DIN = DATA_IN [8:0];
147
 
148
always @ (negedge ram_clk or negedge reset)
149
    if (!reset)
150
       ADDR = 0;
151
          else
152
                 if (ADDR == 9'h107)
153
                    ADDR = ADDR;
154
                  else
155
                    ADDR = ADDR + 1;
156
 
157
always @ (ADDR)
158
    EN = (ADDR < 9'h108);
159
 
160
initial #1000000 $stop;
161
 
162
 
163
always @ (posedge CLKOUT)
164
    if (FS_SIG)
165
        frame_reg <= 0;
166
     else
167
        frame_reg <= frame_reg + 1;
168
//=====================================================================
169
 
170
always @ (posedge CLKOUT)
171
    if (FS_SIG)
172
        bit_counter <= 0;
173
     else
174
        bit_counter <= bit_counter + 1;
175
 
176
always @ (bit_counter)
177
      timeslot_counter <= (bit_counter + 1) >> 3;
178
 
179
 
180
always @ (negedge CLKOUT)
181
    case (frame_reg)
182
      8'hFF : slot_load_reg <= 8'h80;
183
      default : slot_load_reg[7:0] <= {slot_load_reg[0], slot_load_reg[7:1]};
184
    endcase
185
 
186
assign  slot_load = slot_load_reg[7];
187
 
188
always @ (posedge CLKOUT)
189
    if (slot_load)
190
      begin
191
        stream_0_shift_reg_in <= stream_0_mem_in [timeslot_counter];
192
        stream_1_shift_reg_in <= stream_1_mem_in [timeslot_counter];
193
        stream_2_shift_reg_in <= stream_2_mem_in [timeslot_counter];
194
        stream_3_shift_reg_in <= stream_3_mem_in [timeslot_counter];
195
        stream_4_shift_reg_in <= stream_4_mem_in [timeslot_counter];
196
        stream_5_shift_reg_in <= stream_5_mem_in [timeslot_counter];
197
        stream_6_shift_reg_in <= stream_6_mem_in [timeslot_counter];
198
        stream_7_shift_reg_in <= stream_7_mem_in [timeslot_counter];
199
      end
200
     else
201
      begin
202
        stream_0_shift_reg_in <= stream_0_shift_reg_in >> 1;
203
        stream_1_shift_reg_in <= stream_1_shift_reg_in >> 1;
204
        stream_2_shift_reg_in <= stream_2_shift_reg_in >> 1;
205
        stream_3_shift_reg_in <= stream_3_shift_reg_in >> 1;
206
        stream_4_shift_reg_in <= stream_4_shift_reg_in >> 1;
207
        stream_5_shift_reg_in <= stream_5_shift_reg_in >> 1;
208
        stream_6_shift_reg_in <= stream_6_shift_reg_in >> 1;
209
        stream_7_shift_reg_in <= stream_7_shift_reg_in >> 1;
210
      end
211
 
212
assign  in_stream_0 = stream_0_shift_reg_in[0];
213
assign  in_stream_1 = stream_1_shift_reg_in[0];
214
assign  in_stream_2 = stream_2_shift_reg_in[0];
215
assign  in_stream_3 = stream_3_shift_reg_in[0];
216
assign  in_stream_4 = stream_4_shift_reg_in[0];
217
assign  in_stream_5 = stream_5_shift_reg_in[0];
218
assign  in_stream_6 = stream_6_shift_reg_in[0];
219
assign  in_stream_7 = stream_7_shift_reg_in[0];
220
 
221
assign  out_stream_0 = tdm_out[0];
222
assign  out_stream_1 = tdm_out[1];
223
assign  out_stream_2 = tdm_out[2];
224
assign  out_stream_3 = tdm_out[3];
225
assign  out_stream_4 = tdm_out[4];
226
assign  out_stream_5 = tdm_out[5];
227
assign  out_stream_6 = tdm_out[6];
228
assign  out_stream_7 = tdm_out[7];
229
 
230
assign  tdm_in[0] = in_stream_0;
231
assign  tdm_in[1] = in_stream_1;
232
assign  tdm_in[2] = in_stream_2;
233
assign  tdm_in[3] = in_stream_3;
234
assign  tdm_in[4] = in_stream_4;
235
assign  tdm_in[5] = in_stream_5;
236
assign  tdm_in[6] = in_stream_6;
237
assign  tdm_in[7] = in_stream_7;
238
 
239
 
240
always @ (negedge CLKOUT)
241
      begin
242
        stream_0_shift_reg_out <= {out_stream_0, stream_0_shift_reg_out[7:1]};
243
        stream_1_shift_reg_out <= {out_stream_1, stream_1_shift_reg_out[7:1]};
244
        stream_2_shift_reg_out <= {out_stream_2, stream_2_shift_reg_out[7:1]};
245
        stream_3_shift_reg_out <= {out_stream_3, stream_3_shift_reg_out[7:1]};
246
        stream_4_shift_reg_out <= {out_stream_4, stream_4_shift_reg_out[7:1]};
247
        stream_5_shift_reg_out <= {out_stream_5, stream_5_shift_reg_out[7:1]};
248
        stream_6_shift_reg_out <= {out_stream_6, stream_6_shift_reg_out[7:1]};
249
        stream_7_shift_reg_out <= {out_stream_7, stream_7_shift_reg_out[7:1]};
250
      end
251
 
252
assign time_slot = timeslot_counter-1;
253
 
254
always @ (negedge FS_SIG)
255
        display_en = display_en + 1;
256
 
257
/*
258
always @ (posedge CLKOUT)
259
   if (FS_SIG)
260
     display_en = display_en + 1;
261
    else
262
     display_en = display_en;
263
*/
264
integer SimFile;
265
 
266
initial  SimFile = $fopen("sim_result.dat");
267
 
268
initial
269
   begin
270
      $display ("||=======================================================================================================||");
271
      $display ("||***************************** SWITCHING **************** RESULTAT *************************************||");
272
      $display ("||=======================================================================================================||");
273
      $display ("|| Time Slot  # || STREAM_0 | STREAM_1 | STREAM_2 | STREAM_3 | STREAM_4 | STREAM_5 | STREAM_6 | STREAM_7 ||");
274
      $display ("||==============||==========|==========|==========|==========|==========|==========|==========|==========||");
275
 
276
      $fdisplay (SimFile, "||=======================================================================================================||");
277
      $fdisplay (SimFile, "||***************************** SWITCHING **************** RESULTAT *************************************||");
278
      $fdisplay (SimFile, "||=======================================================================================================||");
279
      $fdisplay (SimFile, "|| Time Slot  # || STREAM_0 | STREAM_1 | STREAM_2 | STREAM_3 | STREAM_4 | STREAM_5 | STREAM_6 | STREAM_7 ||");
280
      $fdisplay (SimFile, "||==============||==========|==========|==========|==========|==========|==========|==========|==========||");
281
   end
282
 
283
always @ (posedge CLKOUT)
284
  if (display_en > 4)
285
    if (slot_load)
286
      begin
287
        $display ("|| Time Slot %d ||    %h    |    %h    |    %h    |    %h    |    %h    |    %h    |   %h     |    %h    ||  ", time_slot,
288
                                                        stream_0_shift_reg_out,
289
                                                        stream_1_shift_reg_out,
290
                                                        stream_2_shift_reg_out,
291
                                                        stream_3_shift_reg_out,
292
                                                        stream_4_shift_reg_out,
293
                                                        stream_5_shift_reg_out,
294
                                                        stream_6_shift_reg_out,
295
                                                        stream_7_shift_reg_out);
296
       $display ("||=======================================================================================================||");
297
 
298
 
299
       $fdisplay (SimFile, "|| Time Slot %d ||    %h    |    %h    |    %h    |    %h    |    %h    |    %h    |   %h     |    %h    ||  ", time_slot,
300
                                                        stream_0_shift_reg_out,
301
                                                        stream_1_shift_reg_out,
302
                                                        stream_2_shift_reg_out,
303
                                                        stream_3_shift_reg_out,
304
                                                        stream_4_shift_reg_out,
305
                                                        stream_5_shift_reg_out,
306
                                                        stream_6_shift_reg_out,
307
                                                        stream_7_shift_reg_out);
308
       $fdisplay (SimFile, "||=======================================================================================================||");
309
      end
310
 
311
endmodule
312
 

powered by: WebSVN 2.1.0

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