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

Subversion Repositories genesys_ddr2

[/] [genesys_ddr2/] [trunk/] [bench/] [wishbone_mock.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 oana.bonca
`timescale 1ns / 1ps
2
 
3
module wishbone_master_mock #(
4
    parameter APPDATA_WIDTH           = 128  )
5
        (
6
    input clk, rst,
7
 
8
         output         reg                                                                     cyc_wb,
9
         output reg                                                             stb_wb,
10
         output reg [30:0]                                                       address_wb,
11
         output reg [(APPDATA_WIDTH/8)-1:0]      sel_wb, //write mask     
12
         output reg [APPDATA_WIDTH-1:0]             wr_data_wb, // write data
13
         output reg                                                             we_wb,
14
         output         reg [2:0]                                                        cti_wb,
15
         output  reg [1:0]                                                       bte_wb,
16
         //to wishbone from memory interface
17
         input                                                                          ack_mem, err_mem, rty_mem,
18
         input  [APPDATA_WIDTH-1:0]                      rd_data_mem,
19
         output [3:0]                                                            state
20
         );
21
 
22
 
23
    localparam WB_IDLE  = 4'b0000;
24
    localparam WR_CYC0  = 4'b0001;
25
    localparam WR_CYCI  = 4'b0010;
26
    localparam RD_REQ           = 4'b0011;
27
    localparam RD_WAIT_RSP= 4'b0100;
28
    localparam RD_RSP0          = 4'b0101;
29
    localparam RD_RSP1          = 4'b0110;
30
    localparam WR_CYCI_1                = 4'b0111;
31
    localparam STALL1           = 4'b1000;
32
         localparam STALL2              = 4'b1001;
33
 
34
 
35
 
36
    reg [3:0] st_reg, st_nxt;
37
         reg [1:0] cnt_reg, cnt_nxt;
38
         reg [7:0] adr_cnt_reg, adr_cnt_nxt;
39
         reg [4:0] op_cnt_reg, op_cnt_nxt;
40
    //reg [1:0] cnt_reg, cnt_nxt;
41
    //reg [APPDATA_WIDTH-1:0]           wr_data_reg, wr_data_nxt;
42
    //reg [(APPDATA_WIDTH/8)-1:0]        wr_mask_reg, wr_mask_nxt;
43
 
44
  assign state = st_reg;
45
 
46
  always
47
                @(posedge clk, posedge rst)
48
         begin
49
                if(rst)
50
                        begin
51
                                //wr_data_reg <= 0; 
52
              st_reg <= 0; //st_reg;
53
                        cnt_reg <= 0;
54
                        adr_cnt_reg <= 0;
55
                        op_cnt_reg <= 0;
56
                        end
57
                else
58
                        begin
59
                                //wr_data_reg <= wr_data_nxt;
60
              st_reg <= st_nxt;
61
                        cnt_reg <= cnt_nxt;
62
                        adr_cnt_reg <= adr_cnt_nxt;
63
                        op_cnt_reg <= op_cnt_nxt;
64
                        end
65
         end
66
 
67
  //***************************************************************************
68
  // State Machine for mimicking responses from memory to mem_wb_if for wb bus
69
  //***************************************************************************
70
  always @*
71
  begin
72
        //for memory WR operations
73
        //wr_data_nxt = wr_data_reg;
74
        st_nxt = st_reg;
75
        sel_wb = 0;
76
        cyc_wb = 1'b0;
77
        stb_wb = 1'b0;
78
        we_wb = 1'bx;
79
        wr_data_wb = 0;
80
        cnt_nxt = cnt_reg;
81
        cti_wb = 3'b010;
82
        bte_wb = 2'b00;
83
        adr_cnt_nxt = adr_cnt_reg;
84
        op_cnt_nxt = op_cnt_reg;
85
        address_wb [30] = 1;
86
 
87
        case (st_reg)
88
                WB_IDLE:
89
                        begin
90
                                  //start with WR command
91
                                        st_nxt = WR_CYC0;
92
                                        cyc_wb = 1'b0;
93
                                        stb_wb = 1'b0;
94
                                        we_wb = 1'b0;
95
                                        address_wb = 8'h00;
96
                                        cti_wb = 3'b111;
97
                                        adr_cnt_nxt = 0;
98
                                        //adr_cnt_nxt = adr_cnt_reg + 32;
99
                                        wr_data_wb = 128'hBABEBABEBABEBABEBABEBABEBABEBABE;
100
                                        sel_wb = 16'hFFFFFFFF;
101
 
102
                        end
103
                WR_CYC0:
104
                                begin
105
                                  cyc_wb = 1'b1;
106
                                        stb_wb = 1'b1;
107
                                        address_wb = adr_cnt_reg;
108
                                        address_wb [30] = 1;
109
                                        we_wb = 1'b1;
110
                                        sel_wb = 16'hFFFFFFFF;
111
                                   wr_data_wb = 128'hBABEBABEBABEBABEBABEBABEBABEBABE;
112
                                        cti_wb = 3'b010;
113
                                        bte_wb = 2'b00;
114
                                        st_nxt = WR_CYCI;
115
                                end
116
                WR_CYCI:
117
                                begin
118
                                  cyc_wb = 1'b1;
119
                                        stb_wb = 1'b1;
120
                                        address_wb = adr_cnt_reg;
121
                                        address_wb [30] = 1;
122
                                        we_wb = 1'b1;
123
                                        cti_wb = 3'b010;
124
                                        bte_wb = 2'b00;
125
                                        sel_wb = 16'hFFFFFFFF;
126
                                        //wait for ack
127
                                        if (ack_mem)
128
                                        begin
129
                                           st_nxt = WR_CYCI_1;
130
                                                //wr_data_wb = 128'hADADADADADADADADADADADADADADADAD;
131
                                                wr_data_wb = 128'hBABEBABEBABEBABEBABEBABEBABEBABE;
132
                                        end
133
                                        else
134
                                        begin
135
                                          st_nxt = WR_CYCI;
136
                                          wr_data_wb = 128'hBABEBABEBABEBABEBABEBABEBABEBABE;
137
                                        end
138
                                end
139
                WR_CYCI_1:
140
                     begin
141
                                        cyc_wb = 1'b1;
142
                                        stb_wb = 1'b1;
143
                                        we_wb  = 1'b1;
144
                                        address_wb = adr_cnt_reg;
145
                                        address_wb [30] = 1;
146
                                        we_wb = 1'b1;
147
                                        wr_data_wb = 128'hADADADADADADADADADADADADADADADAD;
148
                                        sel_wb = 16'hFFFFFFFF;
149
                                        cti_wb = 3'b010;
150
                                        bte_wb = 2'b00;
151
                                        //wait for ack
152
                                        if (!ack_mem)
153
                                        begin
154
                                           st_nxt = WR_CYCI_1;
155
                                        end
156
                                        else
157
                                        begin
158
                                          st_nxt = 8;
159
                                          cyc_wb = 1'b1;
160
                                          stb_wb = 1'b1;
161
                                          we_wb  = 1'b1;
162
                                          cti_wb = 3'b010;
163
                                          op_cnt_nxt = 0;
164
                                        end
165
                                end
166
                8:
167
                    begin
168
                      if (op_cnt_reg == 0)
169
                                begin
170
                                        st_nxt = RD_REQ;
171
                                        op_cnt_nxt = 0;
172
                                        adr_cnt_nxt = 0;
173
                                        //adr_cnt_nxt[30] = 1;
174
                                end
175
                                else
176
                                begin
177
                                        st_nxt = 8;
178
                                        op_cnt_nxt = op_cnt_reg + 1;
179
                                        //adr_cnt_nxt = adr_cnt_reg + 32;
180
                                end
181
                      cyc_wb = 1'b0;
182
                                stb_wb = 1'b0;
183
                                we_wb  = 1'b0;
184
                                cti_wb = 3'b111;
185
                    end
186
                RD_REQ:
187
                                begin
188
                                        cyc_wb = 1'b1;
189
                                        stb_wb = 1'b1;
190
                                        we_wb  = 1'b0;
191
                                        address_wb = adr_cnt_reg;
192
                                        address_wb [30] = 1;
193
                                        cti_wb = 3'b010;
194
                                        bte_wb = 2'b00;
195
                                        st_nxt = RD_WAIT_RSP;
196
                                end
197
                RD_WAIT_RSP:
198
                                begin
199
                                  cyc_wb = 1'b1;
200
                                        stb_wb = 1'b1;
201
                                        we_wb  = 1'b0;
202
                                        address_wb = adr_cnt_reg;
203
                                        address_wb [30] = 1;
204
                                        cti_wb = 3'b010;
205
                                        bte_wb = 2'b00;
206
                                        cnt_nxt = 2;
207
                                        if (err_mem)
208
                                                st_nxt = WB_IDLE;
209
                                        else
210
                                        begin
211
                                                if (ack_mem)
212
                                                        st_nxt = RD_RSP0;
213
                                                else
214
                                                  st_nxt = RD_WAIT_RSP;
215
                                        end
216
                                end
217
                RD_RSP0:
218
                                begin
219
                                  cyc_wb = 1'b1;
220
                                        stb_wb = 1'b1;
221
                                        we_wb  = 1'b0;
222
                                        address_wb = adr_cnt_reg;
223
                                        address_wb [30] = 1;
224
                                        cti_wb = 3'b010;
225
                                        bte_wb = 2'b00;
226
                                        cnt_nxt = cnt_reg -1;
227
                                        if (ack_mem && (cnt_reg != 0))
228
                                         begin
229
                                           st_nxt = RD_RSP1;
230
                                           //$display ("RD response available from mem ... \n");
231
                                         end
232
                                        else
233
                                          st_nxt = RD_RSP0;
234
                                end
235
                 RD_RSP1:
236
                                begin
237
                                        cyc_wb = 1'b1;
238
                                        stb_wb = 1'b1;
239
                                        we_wb  = 1'b0;
240
                                        address_wb = adr_cnt_reg;
241
                                        address_wb [30] = 1;
242
                                        cti_wb = 3'b010;
243
                                        bte_wb = 2'b00;
244
                                        //$display ("Data bus word: %h \n", rd_data_mem);
245
                                        cnt_nxt = cnt_reg - 1;
246
                                        if (ack_mem && (cnt_reg != 0))
247
                                          st_nxt = RD_RSP1;
248
                                         else
249
                                         begin
250
                                           //latch data
251
                                                st_nxt = 9;
252
                                                cyc_wb = 1'b0;
253
                                                stb_wb = 1'b0;
254
                                                we_wb  = 1'b0;
255
                                                cti_wb = 3'b010;
256
                                           //$display ("Data bus word 2: %h", rd_data_mem);
257
                                         end
258
                                end
259
                        10:
260
                                begin
261
                                        st_nxt = 9;
262
                                        op_cnt_nxt = 0;
263
                                        cyc_wb = 1'b0;
264
                                        stb_wb = 1'b0;
265
                                        we_wb = 1'b0;
266
                                        //adr_cnt_nxt = adr_cnt_reg + 16;
267
                                        cti_wb = 3'b111;
268
                                end
269
                        9:
270
                    begin
271
                      if (op_cnt_reg == 0)
272
                                begin
273
                                        st_nxt = WB_IDLE;//RD_REQ;
274
                                        op_cnt_nxt = 0;
275
                                        adr_cnt_nxt = 0;
276
                                        //adr_cnt_nxt[30] = 1;
277
                                end
278
                                else
279
                                begin
280
                                        st_nxt = 9;
281
                                        op_cnt_nxt = op_cnt_reg + 1;
282
                                        //adr_cnt_nxt = adr_cnt_reg + 32;
283
                                end
284
                      cyc_wb = 1'b0;
285
                                stb_wb = 1'b0;
286
                                we_wb  = 1'b0;
287
                                cti_wb = 3'b111;
288
                    end
289
                endcase
290
  end
291
 
292
endmodule

powered by: WebSVN 2.1.0

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