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 80

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