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

Subversion Repositories versatile_mem_ctrl

[/] [versatile_mem_ctrl/] [trunk/] [bench/] [tb.v] - Blame information for rev 29

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

Line No. Rev Author Line
1 11 mikaeljf
`include "tb_defines.v"
2 9 unneback
`timescale 1ns/1ns
3
module versatile_mem_ctrl_tb
4
  (
5
   output OK
6
   );
7
 
8 29 mikaeljf
   // number of wb clock domains
9
   parameter nr_of_wb_clk_domains = 1;
10
   // number of wb ports in each wb clock domain
11
   parameter nr_of_wb_ports_clk0  = 3;
12
   parameter nr_of_wb_ports_clk1  = 0;
13
   parameter nr_of_wb_ports_clk2  = 0;
14
   parameter nr_of_wb_ports_clk3  = 0;
15
 
16 9 unneback
   reg    sdram_clk, wb_clk, wb_rst;
17
 
18
   wire [31:0] wb0_dat_i;
19
   wire [3:0]  wb0_sel_i;
20
   wire [31:0] wb0_adr_i;
21
   wire [2:0]  wb0_cti_i;
22
   wire [1:0]  wb0_bte_i;
23
   wire        wb0_cyc_i;
24
   wire        wb0_stb_i;
25
   wire [31:0] wb0_dat_o;
26
   wire        wb0_ack_o;
27
 
28
   wire [31:0] wb1_dat_i;
29
   wire [3:0]  wb1_sel_i;
30
   wire [31:0] wb1_adr_i;
31
   wire [2:0]  wb1_cti_i;
32
   wire [1:0]  wb1_bte_i;
33
   wire        wb1_cyc_i;
34
   wire        wb1_stb_i;
35
   wire [31:0] wb1_dat_o;
36
   wire        wb1_ack_o;
37
 
38
   wire [31:0] wb4_dat_i;
39
   wire [3:0]  wb4_sel_i;
40
   wire [31:0] wb4_adr_i;
41
   wire [2:0]  wb4_cti_i;
42
   wire [1:0]  wb4_bte_i;
43
   wire        wb4_cyc_i;
44
   wire        wb4_stb_i;
45
   wire [31:0] wb4_dat_o;
46
   wire        wb4_ack_o;
47
 
48
   wire [1:0]  ba, bad;
49
   wire [12:0] a, ad;
50
   wire [15:0] dq_i;
51
   wire [15:0] dq_o;
52
   wire [15:0] dq_io;
53 11 mikaeljf
   wire [1:0]  dqs, dqs_n, dqs_i, dqs_o, dqs_n_i, dqs_n_o, dqs_io, dqs_n_io;
54
   wire [1:0]  dqm, dqmd, dm_rdqs;
55
   wire        dq_oe, dqs_oe;
56 9 unneback
   wire        cs_n, cs_nd, ras, rasd, cas, casd, we, wed, cke, cked;
57 14 mikaeljf
   wire        ck_fb_i, ck_fb_o;
58 11 mikaeljf
 
59 29 mikaeljf
   // 
60
   wire [36*nr_of_wb_ports_clk0-1:0] wb_dat_i_v;
61
   wire [36*nr_of_wb_ports_clk0-1:0] wb_adr_i_v;
62
   wire [31:0]                       wb_dat_o_v;
63
   wire [0:nr_of_wb_ports_clk0-1]    wb_cyc_i_v;
64
   wire [0:nr_of_wb_ports_clk0-1]    wb_stb_i_v;
65
   wire [0:nr_of_wb_ports_clk0-1]    wb_ack_o_v;
66
   // 
67
   assign wb_dat_i_v = {4'h0,wb4_dat_i,4'h0,wb1_dat_i,3'h0,wb0_dat_i};
68
   assign wb_adr_i_v = {4'h0,wb4_adr_i,4'h0,wb1_adr_i,3'h0,wb0_adr_i};
69
   assign wb_cyc_i_v = {wb4_cyc_i,wb1_cyc_i,wb0_cyc_i};
70
   assign wb_stb_i_v = {wb4_stb_i,wb1_stb_i,wb0_stb_i};
71
   assign wb_ack_o_v = {};
72
 
73 15 mikaeljf
`ifdef SDR_16          // SDR SDRAM
74 9 unneback
   wb0 wb0i
75
     (
76
      .adr(wb0_adr_i),
77
      .bte(wb0_bte_i),
78
      .cti(wb0_cti_i),
79
      .cyc(wb0_cyc_i),
80
      .dat(wb0_dat_i),
81
      .sel(wb0_sel_i),
82
      .stb(wb0_stb_i),
83
      .we (wb0_we_i),
84
      .ack(wb0_ack_o),
85
      .clk(wb_clk),
86
      .dat_i(wb0_dat_o),
87
      .reset(wb_rst)
88
      );
89
   wb1 wb1i
90
     (
91
      .adr(wb1_adr_i),
92
      .bte(wb1_bte_i),
93
      .cti(wb1_cti_i),
94
      .cyc(wb1_cyc_i),
95
      .dat(wb1_dat_i),
96
      .sel(wb1_sel_i),
97
      .stb(wb1_stb_i),
98
      .we (wb1_we_i),
99
      .ack(wb1_ack_o),
100
      .clk(wb_clk),
101
      .dat_i(wb1_dat_o),
102
      .reset(wb_rst)
103
      );
104
   wb4 wb4i
105
     (
106
      .adr(wb4_adr_i),
107
      .bte(wb4_bte_i),
108
      .cti(wb4_cti_i),
109
      .cyc(wb4_cyc_i),
110
      .dat(wb4_dat_i),
111
      .sel(wb4_sel_i),
112
      .stb(wb4_stb_i),
113
      .we (wb4_we_i),
114
      .ack(wb4_ack_o),
115
      .clk(wb_clk),
116
      .dat_i(wb4_dat_o),
117
      .reset(wb_rst)
118
      );
119 11 mikaeljf
`endif
120 9 unneback
 
121 15 mikaeljf
`ifdef DDR_16          // DDR2 SDRAM
122 11 mikaeljf
   wb0_ddr wb0i
123
     (
124
      .adr(wb0_adr_i),
125
      .bte(wb0_bte_i),
126
      .cti(wb0_cti_i),
127
      .cyc(wb0_cyc_i),
128
      .dat(wb0_dat_i),
129
      .sel(wb0_sel_i),
130
      .stb(wb0_stb_i),
131
      .we (wb0_we_i),
132
      .ack(wb0_ack_o),
133
      .clk(wb_clk),
134
      .dat_i(wb0_dat_o),
135
      .reset(wb_rst)
136
      );
137
   wb1_ddr wb1i
138
     (
139
      .adr(wb1_adr_i),
140
      .bte(wb1_bte_i),
141
      .cti(wb1_cti_i),
142
      .cyc(wb1_cyc_i),
143
      .dat(wb1_dat_i),
144
      .sel(wb1_sel_i),
145
      .stb(wb1_stb_i),
146
      .we (wb1_we_i),
147
      .ack(wb1_ack_o),
148
      .clk(wb_clk),
149
      .dat_i(wb1_dat_o),
150
      .reset(wb_rst)
151
      );
152
   wb4_ddr wb4i
153
     (
154
      .adr(wb4_adr_i),
155
      .bte(wb4_bte_i),
156
      .cti(wb4_cti_i),
157
      .cyc(wb4_cyc_i),
158
      .dat(wb4_dat_i),
159
      .sel(wb4_sel_i),
160
      .stb(wb4_stb_i),
161
      .we (wb4_we_i),
162
      .ack(wb4_ack_o),
163
      .clk(wb_clk),
164
      .dat_i(wb4_dat_o),
165
      .reset(wb_rst)
166
      );
167
`endif
168
 
169 29 mikaeljf
  versatile_mem_ctrl_top dut (
170
    // wb clk0
171
    .wb_dat_i_0(wb_dat_i_v),
172
    .wb_dat_o_0(wb_dat_o_v),
173
    .wb_adr_i_0(wb_adr_i_v),
174
    //.wb_sel_i_0(),     
175
    //.wb_cti_i_0(),     
176
    //.wb_bte_i_0(),     
177
    //.wb_we_i_0(),
178
    .wb_cyc_i_0(wb_cyc_i_v),
179
    .wb_stb_i_0(wb_stb_i_v),
180
    .wb_ack_o_0(wb_ack_o_v),
181
    // wb clk1
182
/*    .wb_dat_i_1(),
183
    .wb_dat_o_1(),
184
    .wb_adr_i_1(),
185
    .wb_sel_i_1(),
186
    .wb_cti_i_1(),
187
    .wb_bte_i_1(),
188
    .wb_we_i_1(),
189
    .wb_cyc_i_1(),
190
    .wb_stb_i_1(),
191
    .wb_ack_o_1(),   */
192
    // wb clk2 
193
/*    .wb_dat_i_2(),
194
    .wb_dat_o_2(),
195
    .wb_adr_i_2(),
196
    .wb_sel_i_2(),
197
    .wb_cti_i_2(),
198
    .wb_bte_i_2(),
199
    .wb_we_i_2(),
200
    .wb_cyc_i_2(),
201
    .wb_stb_i_2(),
202
    .wb_ack_o_2(),   */
203
    // wb clk3
204
/*    .wb_dat_i_3(),
205
    .wb_dat_o_3(),
206
    .wb_adr_i_3(),
207
    .wb_sel_i_3(),
208
    .wb_cti_i_3(),
209
    .wb_bte_i_3(),
210
    .wb_we_i_3(),
211
    .wb_cyc_i_3(),
212
    .wb_stb_i_3(),
213
    .wb_ack_o_3(),  */
214
    // SDR SDRAM 16
215
   `ifdef SDR_16
216
    .ba_pad_o(ba),
217
    .a_pad_o(a),
218
    .cs_n_pad_o(cs_n),
219
    .ras_pad_o(ras),
220
    .cas_pad_o(cas),
221
    .we_pad_o(we),
222
    .dq_o(dq_o),
223
    .dqm_pad_o(dqm),
224
    .dq_i(dq_i),
225
    .dq_oe(dq_oe),
226
    .cke_pad_o(cke),
227
    `endif
228
    `ifdef DDR_16
229
    // DDR2 SDRAM 16
230
    .ck_pad_o(ck),
231
    .ck_n_pad_o(ck_n),
232
    .cke_pad_o(cke),
233
    .ck_fb_pad_o(ck_fb_o),
234
    .ck_fb_pad_i(ck_fb_i),
235
    .cs_n_pad_o(cs_n),
236
    .ras_pad_o(ras),
237
    .cas_pad_o(cas),
238
    .we_pad_o(we),
239
    .dm_rdqs_pad_io(dm_rdqs),
240
    .ba_pad_o(ba),
241
    .addr_pad_o(a),
242
    .dq_pad_io(dq_io),
243
    .dqs_pad_io(dqs_io),
244
    .dqs_oe(dqs_oe),
245
    .dqs_n_pad_io(dqs_n_io),
246
    .rdqs_n_pad_i(),
247
    .odt_pad_o(),
248
    `endif
249
    // misc     
250
    .wb_clk(wb_clk),
251
    .wb_rst(wb_rst),
252
    .sdram_clk(sdram_clk)
253
    );
254 9 unneback
 
255 13 mikaeljf
`ifdef SDR_16
256 9 unneback
   assign #1 dq_io = dq_oe ? dq_o : {16{1'bz}};
257
   assign #1 dq_i  = dq_io;
258
   assign #1 dqmd = dqm;
259 11 mikaeljf
   assign #1 dqs_io = dqs_oe ? dqs_o : {2{1'bz}};
260
   assign #1 dqs_i  = dqs_io;
261
   assign #1 dqs_n_io = dqs_oe ? dqs_n_o : {2{1'bz}};
262
   assign #1 dqs_n_i  = dqs_n_io;
263 13 mikaeljf
`endif
264 9 unneback
 
265 13 mikaeljf
`ifdef DDR_16
266
   assign #1 dqmd = dqm;
267 15 mikaeljf
   assign    ck_fb_i = ck_fb_o;
268 13 mikaeljf
`endif
269
 
270 9 unneback
   assign #1 ad = a;
271
   assign #1 bad = ba;
272
   assign #1 cked = cke;
273
   assign #1 cs_nd = cs_n;
274
   assign #1 rasd = ras;
275
   assign #1 casd = cas;
276
   assign #1 wed = we;
277
 
278 15 mikaeljf
`ifdef SDR_16          // SDR SDRAM Simulation model
279 9 unneback
mt48lc16m16a2 sdram
280
  (
281
   .Dq(dq_io),
282
   .Addr(ad),
283
   .Ba(bad),
284
   .Clk(sdram_clk),
285
   .Cke(cked),
286
   .Cs_n(cs_nd),
287
   .Ras_n(rasd),
288
   .Cas_n(casd),
289
   .We_n(wed),
290
   .Dqm(dqmd)
291
   );
292 11 mikaeljf
`endif
293 15 mikaeljf
`ifdef DDR_16          // DDR2 SDRAM Simulation model
294 11 mikaeljf
ddr2 ddr2_sdram
295
  (
296
   .ck(ck),
297
   .ck_n(ck_n),
298
   .cke(cke),
299
   .cs_n(cs_n),
300
   .ras_n(ras),
301
   .cas_n(cas),
302
   .we_n(we),
303
   .dm_rdqs(dm_rdqs),
304
   .ba(ba),
305
   .addr(a),
306
   .dq(dq_io),
307
   .dqs(dqs_io),
308
   .dqs_n(dqs_n_io),
309
   .rdqs_n(),
310
   .odt()
311
   );
312
`endif
313 9 unneback
 
314
   initial
315
     begin
316
        #0 wb_rst = 1'b1;
317
        #200 wb_rst = 1'b1;
318 15 mikaeljf
        #200000 wb_rst = 1'b0;
319 9 unneback
     end
320
 
321
   initial
322
     begin
323
        #0 wb_clk = 1'b0;
324
        forever
325
          #20 wb_clk = !wb_clk;   // 25MHz
326
     end
327
 
328
   initial
329
     begin
330
        #0 sdram_clk = 1'b0;
331
        forever
332
          #4 sdram_clk = !sdram_clk;   // 125MHz
333
     end
334
 
335
endmodule // versatile_mem_ctrl_tb

powered by: WebSVN 2.1.0

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