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 99

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

Line No. Rev Author Line
1 99 unneback
//`include "tb_defines.v"
2 9 unneback
`timescale 1ns/1ns
3
module versatile_mem_ctrl_tb
4
  (
5
   output OK
6
   );
7
 
8 99 unneback
`ifdef NR_OF_WBM
9
        parameter nr_of_wbm = `NR_OF_WBM;
10
`else
11
        parameter nr_of_wbm = 1;
12
`endif
13 9 unneback
 
14 99 unneback
`ifdef SDRAM_CLK_PERIOD
15
        parameter sdram_clk_period = `SDRAM_CLK_PERIOD;
16
`else
17
        parameter sdram_clk_period = 8;
18
`endif
19 94 unneback
 
20 99 unneback
`ifdef WB_CLK_PERIODS
21
        parameter [1:nr_of_wbm] wb_clk_periods = {`WB_CLK_PERIODS};
22
`else
23
        parameter [1:nr_of_wbm] wb_clk_periods = (20);
24
`endif
25
        parameter wb_clk_period = 20;
26
 
27
   wire [31:0] wbm_a_dat_o [1:nr_of_wbm];
28
   wire [3:0]  wbm_a_sel_o [1:nr_of_wbm];
29
   wire [31:0] wbm_a_adr_o [1:nr_of_wbm];
30
   wire [2:0]  wbm_a_cti_o [1:nr_of_wbm];
31
   wire [1:0]  wbm_a_bte_o [1:nr_of_wbm];
32
   wire        wbm_a_we_o  [1:nr_of_wbm];
33
   wire        wbm_a_cyc_o [1:nr_of_wbm];
34
   wire        wbm_a_stb_o [1:nr_of_wbm];
35
   wire [31:0] wbm_a_dat_i [1:nr_of_wbm];
36
   wire        wbm_a_ack_i [1:nr_of_wbm];
37
   reg         wbm_a_clk   [1:nr_of_wbm];
38
   reg         wbm_a_rst   [1:nr_of_wbm];
39
 
40
   wire [31:0] wbm_b_dat_o [1:nr_of_wbm];
41
   wire [3:0]  wbm_b_sel_o [1:nr_of_wbm];
42
   wire [31:2] wbm_b_adr_o [1:nr_of_wbm];
43
   wire [2:0]  wbm_b_cti_o [1:nr_of_wbm];
44
   wire [1:0]  wbm_b_bte_o [1:nr_of_wbm];
45
   wire        wbm_b_we_o  [1:nr_of_wbm];
46
   wire        wbm_b_cyc_o [1:nr_of_wbm];
47
   wire        wbm_b_stb_o [1:nr_of_wbm];
48
   wire [31:0] wbm_b_dat_i [1:nr_of_wbm];
49
   wire        wbm_b_ack_i [1:nr_of_wbm];
50
 
51 94 unneback
   wire [31:0] wb_sdram_dat_i;
52
   wire [3:0]  wb_sdram_sel_i;
53 99 unneback
   wire [31:2] wb_sdram_adr_i;
54 94 unneback
   wire [2:0]  wb_sdram_cti_i;
55
   wire [1:0]  wb_sdram_bte_i;
56 99 unneback
   wire        wb_sdram_we_i;
57 94 unneback
   wire        wb_sdram_cyc_i;
58
   wire        wb_sdram_stb_i;
59
   wire [31:0] wb_sdram_dat_o;
60
   wire        wb_sdram_ack_o;
61 99 unneback
   reg         wb_sdram_clk;
62
   reg         wb_sdram_rst;
63
 
64
        wire [1:nr_of_wbm] wbm_OK;
65
 
66
        genvar i;
67
 
68
`define DUT sdr_sdram_16_ctrl
69
`define SDR 16
70
`ifdef SDR
71
        wire [1:0]  ba, ba_pad;
72
        wire [12:0] a, a_pad;
73
        wire [`SDR-1:0] dq_i, dq_o, dq_pad;
74
        wire        dq_oe;
75
        wire [1:0]  dqm, dqm_pad;
76
        wire        cke, cke_pad, cs_n, cs_n_pad, ras, ras_pad, cas, cas_pad, we, we_pad;
77
 
78
        assign #1 {ba_pad,a_pad} = {ba,a};
79
        assign #1 {ras_pad, cas_pad, we_pad} = {ras,cas,we};
80
        assign #1 dqm_pad = dqm;
81
        assign #1 cke_pad = cke;
82
        assign cs_n_pad = cs_n;
83
 
84
        mt48lc16m16a2 mem(
85
                .Dq(dq_pad),
86
                .Addr(a_pad),
87
                .Ba(ba_pad),
88
                .Clk(wb_sdram_clk),
89
                .Cke(cke_pad),
90
                .Cs_n(cs_n_pad),
91
                .Ras_n(ras_pad),
92
                .Cas_n(cas_pad),
93
                .We_n(we_pad),
94
                .Dqm(dqm_pad));
95
 
96
                assign #1 dq_pad = (dq_oe) ? dq_o : {`SDR{1'bz}};
97
                assign #1 dq_i = dq_pad;
98
 
99
        `DUT DUT(
100
        // wisbone i/f
101
        .dat_i(wb_sdram_dat_i),
102
        .adr_i({wb_sdram_adr_i[24:2],1'b0}),
103
        .sel_i(wb_sdram_sel_i),
104
        .cti_i(wb_sdram_cti_i),
105
        .bte_i(wb_sdram_bte_i),
106
        .we_i (wb_sdram_we_i),
107
        .cyc_i(wb_sdram_cyc_i),
108
        .stb_i(wb_sdram_stb_i),
109
        .dat_o(wb_sdram_dat_o),
110
        .ack_o(wb_sdram_ack_o),
111
        // SDR SDRAM
112
        .ba(ba),
113
        .a(a),
114
        .cmd({ras, cas, we}),
115
        .cke(cke),
116
        .cs_n(cs_n),
117
        .dqm(dqm),
118
        .dq_i(dq_i),
119
        .dq_o(dq_o),
120
        .dq_oe(dq_oe),
121
        // system
122
        .clk(wb_sdram_clk), .rst(wb_sdram_rst));
123
 
124
`endif
125 9 unneback
 
126 99 unneback
// wishbone master(s)
127
generate
128
        for (i=1; i <= nr_of_wbm; i=i+1) begin: wb_master
129
 
130
                wbm wbmi(
131
                .adr_o(wbm_a_adr_o[i]),
132
                .bte_o(wbm_a_bte_o[i]),
133
                .cti_o(wbm_a_cti_o[i]),
134
                .dat_o(wbm_a_dat_o[i]),
135
                .sel_o(wbm_a_sel_o[i]),
136
                .we_o (wbm_a_we_o[i]),
137
                .cyc_o(wbm_a_cyc_o[i]),
138
                .stb_o(wbm_a_stb_o[i]),
139
                .dat_i(wbm_a_dat_i[i]),
140
                .ack_i(wbm_a_ack_i[i]),
141
                .clk(wbm_a_clk[i]),
142
                .reset(wbm_a_rst[i]),
143
                .OK(wbm_OK[i])
144
);
145 11 mikaeljf
 
146 99 unneback
        wb3wb3_bridge wbwb_bridgei (
147
        // wishbone slave side
148
        .wbs_dat_i(wbm_a_dat_o[i]),
149
        .wbs_adr_i(wbm_a_adr_o[i][31:2]),
150
        .wbs_sel_i(wbm_a_sel_o[i]),
151
        .wbs_bte_i(wbm_a_bte_o[i]),
152
        .wbs_cti_i(wbm_a_cti_o[i]),
153
        .wbs_we_i (wbm_a_we_o[i]),
154
        .wbs_cyc_i(wbm_a_cyc_o[i]),
155
        .wbs_stb_i(wbm_a_stb_o[i]),
156
        .wbs_dat_o(wbm_a_dat_i[i]),
157
        .wbs_ack_o(wbm_a_ack_i[i]),
158
        .wbs_clk(wbm_a_clk[i]),
159
        .wbs_rst(wbm_a_rst[i]),
160
        // wishbone master side
161
        .wbm_dat_o(wbm_b_dat_o[i]),
162
        .wbm_adr_o(wbm_b_adr_o[i]),
163
        .wbm_sel_o(wbm_b_sel_o[i]),
164
        .wbm_bte_o(wbm_b_bte_o[i]),
165
        .wbm_cti_o(wbm_b_cti_o[i]),
166
        .wbm_we_o (wbm_b_we_o[i]),
167
        .wbm_cyc_o(wbm_b_cyc_o[i]),
168
        .wbm_stb_o(wbm_b_stb_o[i]),
169
        .wbm_dat_i(wbm_b_dat_i[i]),
170
        .wbm_ack_i(wbm_b_ack_i[i]),
171
        .wbm_clk(wb_sdram_clk),
172
        .wbm_rst(wb_sdram_rst));
173
 
174
    end
175
endgenerate
176 9 unneback
 
177 99 unneback
`define SINGLE_WB
178
`ifdef SINGLE_WB
179
        assign wb_sdram_dat_i=wbm_b_dat_o[1];
180
        assign wb_sdram_sel_i=wbm_b_sel_o[1];
181
        assign wb_sdram_adr_i=wbm_b_adr_o[1];
182
        assign wb_sdram_we_i =wbm_b_we_o[1];
183
        assign wb_sdram_bte_i=wbm_b_bte_o[1];
184
        assign wb_sdram_cti_i=wbm_b_cti_o[1];
185
        assign wb_sdram_cyc_i=wbm_b_cyc_o[1];
186
        assign wb_sdram_stb_i=wbm_b_stb_o[1];
187
        assign wbm_b_dat_i[1]=wb_sdram_dat_o;
188
        assign wbm_b_ack_i[1]=wb_sdram_ack_o;
189 11 mikaeljf
`endif
190
 
191 99 unneback
        assign OK = &wbm_OK;
192
 
193 33 unneback
 
194 99 unneback
generate
195
        for (i=1; i <= nr_of_wbm; i=i+1) begin: wb_reset
196 33 unneback
 
197 99 unneback
                // Wishbone reset
198
                initial
199
        begin
200
                #0      wbm_a_rst[i] = 1'b1;
201
                #200    wbm_a_rst[i] = 1'b0;
202
        end
203 33 unneback
 
204 99 unneback
                // Wishbone clock
205
                initial
206
        begin
207
                #0 wbm_a_clk[i] = 1'b0;
208
                forever
209
                        #(wb_clk_period/2) wbm_a_clk[i] = !wbm_a_clk[i];
210
        end
211 9 unneback
 
212 33 unneback
 
213 9 unneback
     end
214 99 unneback
endgenerate
215 80 mikaeljf
 
216
   // SDRAM reset
217
   initial
218
     begin
219 99 unneback
        #0      wb_sdram_rst = 1'b1;
220
        #200    wb_sdram_rst = 1'b0;
221 80 mikaeljf
     end
222 9 unneback
 
223 80 mikaeljf
   // SDRAM clock
224 9 unneback
   initial
225
     begin
226 99 unneback
        #0 wb_sdram_clk = 1'b0;
227 9 unneback
        forever
228 99 unneback
          #(sdram_clk_period/2) wb_sdram_clk = !wb_sdram_clk;
229 9 unneback
     end
230
 
231
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.