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

Subversion Repositories pci

[/] [pci/] [tags/] [rel_7/] [apps/] [test/] [rtl/] [verilog/] [test.v] - Blame information for rev 154

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 93 mihad
// synopsys translate_off
2
`include "timescale.v"
3
// synopsys translate_on
4
 
5
module test
6
(
7
    pci_clk_i,
8
    clk_i,
9
    rst_i,
10
 
11
    wbm_cyc_o,
12
    wbm_stb_o,
13
    wbm_cab_o,
14
    wbm_we_o,
15
    wbm_adr_o,
16
    wbm_sel_o,
17
    wbm_dat_o,
18
    wbm_dat_i,
19
    wbm_ack_i,
20
    wbm_rty_i,
21
    wbm_err_i,
22
 
23
    wbs_cyc_i,
24
    wbs_stb_i,
25
    wbs_cab_i,
26
    wbs_we_i,
27
    wbs_adr_i,
28
    wbs_sel_i,
29
    wbs_dat_i,
30
    wbs_dat_o,
31
    wbs_ack_o,
32
    wbs_rty_o,
33
    wbs_err_o,
34
 
35
    // pci trdy, irdy and irdy enable inputs used to count number of transfers on pci bus
36
    pci_irdy_reg_i,
37
    pci_irdy_en_reg_i,
38
    pci_trdy_reg_i,
39
    pci_ad_reg_i
40
);
41
 
42
input           pci_clk_i,
43
                clk_i,
44
                rst_i ;
45
 
46
output          wbm_cyc_o,
47
                wbm_stb_o,
48
                wbm_cab_o,
49
                wbm_we_o ;
50
 
51
output  [31:0]  wbm_adr_o ;
52
output  [3:0]   wbm_sel_o ;
53
assign          wbm_sel_o = 4'hF ;
54
output  [31:0]  wbm_dat_o ;
55
input   [31:0]  wbm_dat_i ;
56
input           wbm_ack_i,
57
                wbm_rty_i,
58
                wbm_err_i ;
59
 
60
input           wbs_cyc_i,
61
                wbs_stb_i,
62
                wbs_cab_i,
63
                wbs_we_i ;
64
 
65
input   [31:0]  wbs_adr_i ;
66
input   [3:0]   wbs_sel_i ;
67
input   [31:0]  wbs_dat_i ;
68
output  [31:0]  wbs_dat_o ;
69
output          wbs_ack_o,
70
                wbs_rty_o,
71
                wbs_err_o ;
72
 
73
input pci_irdy_reg_i,
74
      pci_irdy_en_reg_i,
75
      pci_trdy_reg_i ;
76
 
77
input [31:0] pci_ad_reg_i ;
78
 
79
wire sel_registers =  wbs_adr_i[12] ;
80
wire sel_rams      = ~wbs_adr_i[12] ;
81
 
82
wire wbs_write = wbs_cyc_i & wbs_stb_i & wbs_we_i ;
83
 
84
wire wbs_ram0_255_we    = wbs_write & sel_rams & (wbs_adr_i[11:10] == 2'b00) ;
85
wire wbs_ram256_511_we  = wbs_write & sel_rams & (wbs_adr_i[11:10] == 2'b01) ;
86
wire wbs_ram512_767_we  = wbs_write & sel_rams & (wbs_adr_i[11:10] == 3'b10) ;
87
wire wbs_ram768_1023_we = wbs_write & sel_rams & (wbs_adr_i[11:10] == 3'b11) ;
88
 
89
reg  sel_master_transaction_size,
90
     sel_master_transaction_count,
91
     sel_master_opcode,
92
     sel_master_base,
93
     sel_target_burst_transaction_count,
94
     sel_target_test_size,
95
     sel_target_test_start_adr,
96
     sel_target_test_start_dat,
97
     sel_target_test_error_detected,
98
     sel_master_num_of_wb_transfers,
99
     sel_master_num_of_pci_transfers,
100
     sel_master_test_start_dat,
101
     sel_master_test_size,
102
     sel_master_dat_err_detected ;
103
 
104
wire [31:0] wbs_ram0_255_o ;
105
wire [31:0] wbs_ram256_511_o ;
106
wire [31:0] wbs_ram512_767_o ;
107
wire [31:0] wbs_ram768_1023_o ;
108
 
109
wire wbm_write = wbm_cyc_o & wbm_stb_o &  wbm_we_o ;
110
wire wbm_read  = wbm_cyc_o & wbm_stb_o & ~wbm_we_o ;
111
 
112
wire wbm_ram0_255_we    = wbm_ack_i & wbm_read & (wbm_adr_o[11:10] == 2'b00) ;
113
wire wbm_ram256_511_we  = wbm_ack_i & wbm_read & (wbm_adr_o[11:10] == 2'b01) ;
114
wire wbm_ram512_767_we  = wbm_ack_i & wbm_read & (wbm_adr_o[11:10] == 2'b10) ;
115
wire wbm_ram768_1023_we = wbm_ack_i & wbm_read & (wbm_adr_o[11:10] == 2'b11) ;
116
 
117
wire [31:0] wbm_ram0_255_o ;
118
wire [31:0] wbm_ram256_511_o ;
119
wire [31:0] wbm_ram512_767_o ;
120
wire [31:0] wbm_ram768_1023_o ;
121
 
122
reg [31:0] wbm_dat_o ;
123
 
124
always@(wbm_adr_o or wbm_ram0_255_o or wbm_ram256_511_o or wbm_ram512_767_o or wbm_ram768_1023_o)
125
begin
126
    case (wbm_adr_o[11:10])
127
    2'b00:
128
        begin
129
            wbm_dat_o = wbm_ram0_255_o ;
130
        end
131
    2'b01:
132
        begin
133
            wbm_dat_o = wbm_ram256_511_o ;
134
        end
135
    2'b10:
136
        begin
137
            wbm_dat_o = wbm_ram512_767_o ;
138
        end
139
    2'b11:
140
        begin
141
            wbm_dat_o = wbm_ram768_1023_o ;
142
        end
143
    endcase
144
end
145
 
146
reg [10:0]  master_transaction_size ;
147
reg [10:0]  master_transaction_count ;
148
reg         master_opcode ;
149
reg [31:0]  master_base ;
150
reg [31:0]  master_base_next ;
151
reg [10:0]  target_test_size ;
152
reg [31:0]  target_test_start_adr ;
153
reg [31:0]  target_test_expect_adr ;
154
reg [31:0]  target_test_start_dat ;
155
reg [31:0]  target_test_expect_dat ;
156
reg         target_test_adr_error_detected,
157
            target_test_dat_error_detected ;
158
reg [31:0]  master_num_of_wb_transfers,
159
            master_num_of_pci_transfers ;
160
reg [31:0]  master_test_start_dat ;
161
reg [31:0]  pci_clk_master_test_expect_dat ;
162
reg [20:0]  master_test_size ;
163
reg [20:0]  pci_clk_master_test_size ;
164
reg         pci_clk_master_test_done,
165
            wb_clk_master_test_done_sync,
166
            wb_clk_master_test_done,
167
            wb_clk_master_test_start,
168
            pci_clk_master_test_start_sync,
169
            pci_clk_master_test_start,
170
            pci_clk_master_test_started,
171
            wb_clk_master_test_started_sync,
172
            wb_clk_master_test_started,
173
            master_dat_err_detected ;
174
 
175
always@(posedge pci_clk_i or posedge rst_i)
176
begin
177
    if (rst_i)
178
    begin
179
        pci_clk_master_test_expect_dat <= 0 ;
180
        pci_clk_master_test_size       <= 0 ;
181
        pci_clk_master_test_done       <= 1 ;
182
        pci_clk_master_test_start_sync <= 0 ;
183
        pci_clk_master_test_start      <= 0 ;
184
        pci_clk_master_test_started    <= 0 ;
185
        master_dat_err_detected        <= 0 ;
186
    end
187
    else
188
    begin
189
        // sync flop always samples the data
190
        pci_clk_master_test_start_sync <= wb_clk_master_test_start ;
191
        if (pci_clk_master_test_size == 0)
192
        begin
193
            // load test start_flop only when test size is zero
194
            pci_clk_master_test_start   <= pci_clk_master_test_start_sync ;
195
            pci_clk_master_test_started <= 0 ;
196
            pci_clk_master_test_done    <= 1 ;
197
            if (pci_clk_master_test_start)
198
            begin
199
                pci_clk_master_test_size       <= master_test_size ;
200
                pci_clk_master_test_expect_dat <= master_test_start_dat ;
201
 
202
                // error detected bit is cleared when new test starts
203
                master_dat_err_detected <= 0 ;
204
            end
205
        end
206
        else
207
        begin
208
            pci_clk_master_test_done    <= 0 ;
209
            pci_clk_master_test_start   <= 0 ;
210
            pci_clk_master_test_started <= 1 ;
211
            if (~(pci_irdy_reg_i | ~pci_irdy_en_reg_i | pci_trdy_reg_i))
212
            begin
213
                pci_clk_master_test_size <= pci_clk_master_test_size - 1'b1 ;
214
 
215
                if (pci_ad_reg_i != pci_clk_master_test_expect_dat)
216
                    master_dat_err_detected <= 1'b1 ;
217
 
218
                pci_clk_master_test_expect_dat <= {pci_clk_master_test_expect_dat[30:0], pci_clk_master_test_expect_dat[31]} ;
219
            end
220
        end
221
    end
222
end
223
 
224
always@(posedge clk_i or posedge rst_i)
225
begin
226
    if (rst_i)
227
    begin
228
        wb_clk_master_test_done_sync    <= 1'b1 ;
229
        wb_clk_master_test_done         <= 1'b1 ;
230
        wb_clk_master_test_started_sync <= 1'b0 ;
231
        wb_clk_master_test_started      <= 1'b0 ;
232
    end
233
    else
234
    begin
235
        wb_clk_master_test_done_sync    <= pci_clk_master_test_done ;
236
        if (wb_clk_master_test_start)
237
            wb_clk_master_test_done <= 1'b0 ;
238
        else
239
            wb_clk_master_test_done <= wb_clk_master_test_done_sync ;
240
 
241
        wb_clk_master_test_started_sync <= pci_clk_master_test_started ;
242
        wb_clk_master_test_started      <= wb_clk_master_test_started_sync ;
243
    end
244
end
245
 
246
assign wbm_we_o = master_opcode ;
247
 
248
reg [10:0] master_current_transaction_size ;
249
 
250
reg [10:0] target_burst_transaction_count ;
251
reg        wbs_cyc_i_previous ;
252
 
253
reg clr_master_num_of_pci_transfers ;
254
reg clr_master_num_of_pci_transfers_sync ;
255
reg wb_clk_clr_master_num_of_pci_transfers ;
256
 
257
always@(posedge pci_clk_i or posedge rst_i)
258
begin
259
    if (rst_i)
260
    begin
261
        master_num_of_pci_transfers <= 0 ;
262
    end
263
    else if (clr_master_num_of_pci_transfers)
264
    begin
265
        master_num_of_pci_transfers <= 0 ;
266
    end
267
    else if (~(pci_irdy_reg_i | ~pci_irdy_en_reg_i | pci_trdy_reg_i))
268
    begin
269
        master_num_of_pci_transfers <= master_num_of_pci_transfers + 1'b1 ;
270
    end
271
 
272
    if (rst_i)
273
    begin
274
        clr_master_num_of_pci_transfers <= 1'b1 ;
275
        clr_master_num_of_pci_transfers_sync <= 1'b1 ;
276
    end
277
    else
278
    begin
279
        clr_master_num_of_pci_transfers <= clr_master_num_of_pci_transfers_sync ;
280
        clr_master_num_of_pci_transfers_sync <= wb_clk_clr_master_num_of_pci_transfers ;
281
    end
282
end
283
 
284
always@(posedge clk_i or posedge rst_i)
285
begin
286
    if (rst_i)
287
    begin
288
        master_transaction_size                 <= 0 ;
289
        master_transaction_count                <= 0 ;
290
        master_opcode                           <= 0 ;
291
        master_base                             <= 0 ;
292
        master_base_next                        <= 4 ;
293
        target_burst_transaction_count          <= 0 ;
294
        wbs_cyc_i_previous                      <= 0 ;
295
        target_test_size                        <= 0 ;
296
        target_test_start_adr                   <= 0 ;
297
        target_test_start_dat                   <= 0 ;
298
        target_test_adr_error_detected          <= 0 ;
299
        target_test_dat_error_detected          <= 0 ;
300
        target_test_expect_adr                  <= 0 ;
301
        target_test_expect_dat                  <= 0 ;
302
        master_num_of_wb_transfers              <= 0 ;
303
        wb_clk_clr_master_num_of_pci_transfers  <= 1'b1 ;
304
        master_test_size                        <= 0 ;
305
        master_test_start_dat                   <= 0 ;
306
                wb_clk_master_test_start                <= 0 ;
307
    end
308
    else
309
    begin
310
        if (sel_master_transaction_size & wbs_write & sel_registers)
311
        // write new value to transaction size register
312
            master_transaction_size <= wbs_dat_i[10:0] ;
313
 
314
        if (sel_master_transaction_count & wbs_write & sel_registers)
315
        // write new value to transaction count register
316
            master_transaction_count <= wbs_dat_i[10:0] ;
317
        else if (wbm_cyc_o & wbm_stb_o & wbm_ack_i & (master_current_transaction_size == 11'h1))
318
        // decrement the transaction count when ack is received and transaction size is 1
319
            master_transaction_count <= master_transaction_count - 1'b1 ;
320
 
321
        if (sel_master_opcode & wbs_write & sel_registers)
322
        // master opcode write
323
            master_opcode <= wbs_dat_i[0] ;
324
 
325
        if (sel_master_base & wbs_write & sel_registers)
326
        // master base address write
327
            master_base <= {wbs_dat_i[31:2], 2'b00} ;
328
 
329
        if (sel_target_burst_transaction_count & wbs_write & sel_registers)
330
            target_burst_transaction_count <= 0 ;
331
        else if (wbs_cyc_i & ~wbs_cyc_i_previous & wbs_cab_i)
332
            target_burst_transaction_count <= target_burst_transaction_count + 1 ;
333
 
334
        if (sel_target_test_size & wbs_write & sel_registers)
335
            target_test_size <= wbs_dat_i[10:0] ;
336
        else if ((target_test_size != 0) & wbs_cyc_i & wbs_stb_i & wbs_we_i & wbs_ack_o & ~sel_registers)
337
        begin
338
            target_test_size <= target_test_size - 1'b1 ;
339
        end
340
 
341
        if (sel_target_test_start_adr & wbs_write & sel_registers)
342
            target_test_start_adr <= wbs_dat_i ;
343
 
344
        if (sel_target_test_start_dat & wbs_write & sel_registers)
345
            target_test_start_dat <= wbs_dat_i ;
346
 
347
        if (sel_target_test_error_detected & wbs_write & sel_registers)
348
        begin
349
            target_test_adr_error_detected <= 1'b0 ;
350
            target_test_dat_error_detected <= 1'b0 ;
351
        end
352
        else if ((target_test_size != 0) & wbs_cyc_i & wbs_stb_i & wbs_we_i & wbs_ack_o & ~sel_registers)
353
        begin
354
            target_test_adr_error_detected <= (target_test_expect_adr != wbs_adr_i) | target_test_adr_error_detected ;
355
            target_test_dat_error_detected <= (target_test_expect_dat != wbs_dat_i) | target_test_dat_error_detected ;
356
        end
357
 
358
        if (target_test_size == 0)
359
        begin
360
            target_test_expect_adr <= target_test_start_adr ;
361
            target_test_expect_dat <= target_test_start_dat ;
362
        end
363
        else if (wbs_cyc_i & wbs_stb_i & wbs_we_i & wbs_ack_o & ~sel_registers)
364
        begin
365
            target_test_expect_adr <= target_test_expect_adr + 'd4 ;
366
            target_test_expect_dat <= {target_test_expect_dat[30:0], target_test_expect_dat[31]} ;
367
        end
368
 
369
        if (sel_master_num_of_wb_transfers & wbs_write & sel_registers)
370
        begin
371
            master_num_of_wb_transfers <= 0 ;
372
            wb_clk_clr_master_num_of_pci_transfers <= 1'b1 ;
373
        end
374
        else if (wbm_cyc_o & wbm_stb_o & wbm_ack_i)
375
        begin
376
            wb_clk_clr_master_num_of_pci_transfers <= 1'b0 ;
377
            master_num_of_wb_transfers <= master_num_of_wb_transfers + 1'b1 ;
378
        end
379
 
380
        if (wb_clk_master_test_done & wbs_write & sel_master_test_size & sel_registers & ~wb_clk_master_test_start)
381
        begin
382
            master_test_size         <= wbs_dat_i[20:0] ;
383
            wb_clk_master_test_start <= 1'b1 ;
384
        end
385
        else
386
        begin
387
            if (wb_clk_master_test_started & !wb_clk_master_test_done)
388
                wb_clk_master_test_start <= 1'b0 ;
389
        end
390
 
391
        if (sel_master_test_start_dat & wbs_write & sel_registers)
392
            master_test_start_dat <= wbs_dat_i ;
393
 
394
        master_base_next <= master_base + 4 ;
395
 
396
        wbs_cyc_i_previous <= wbs_cyc_i ;
397
    end
398
end
399
 
400
reg [31:0] register_output ;
401
reg [31:0] ram_output ;
402
 
403
always@
404
(
405
    wbs_adr_i or
406
    master_transaction_size or
407
    master_transaction_count or
408
    master_opcode or
409
    master_base or
410
    target_burst_transaction_count or
411
    target_test_size or
412
    target_test_start_adr or
413
    target_test_start_dat or
414
    target_test_adr_error_detected or
415
    target_test_dat_error_detected or
416
    master_num_of_wb_transfers or
417
    master_num_of_pci_transfers or
418
    master_test_size or
419
    master_test_start_dat or
420
    master_dat_err_detected
421
)
422
begin
423
    sel_master_transaction_size        = 1'b0 ;
424
    sel_master_transaction_count       = 1'b0 ;
425
    sel_master_opcode                  = 1'b0 ;
426
    sel_master_base                    = 1'b0 ;
427
    sel_target_burst_transaction_count = 1'b0 ;
428
    sel_target_test_size               = 1'b0 ;
429
    sel_target_test_start_adr          = 1'b0 ;
430
    sel_target_test_start_dat          = 1'b0 ;
431
    sel_target_test_error_detected     = 1'b0 ;
432
    sel_master_num_of_wb_transfers     = 1'b0 ;
433
    sel_master_test_size               = 1'b0 ;
434
    sel_master_test_start_dat          = 1'b0 ;
435
    sel_master_dat_err_detected        = 1'b0 ;
436
    register_output                    = 0 ;
437
 
438
    case (wbs_adr_i[5:2])
439
        4'b0000:
440
        begin
441
            sel_master_transaction_size = 1'b1 ;
442
            register_output             = {21'h0, master_transaction_size} ;
443
        end
444
        4'b0001:
445
        begin
446
            sel_master_transaction_count = 1'b1 ;
447
            register_output              = {21'h0, master_transaction_count} ;
448
        end
449
        4'b0010:
450
        begin
451
            sel_master_opcode = 1'b1 ;
452
            register_output   = {31'h0, master_opcode} ;
453
        end
454
        4'b0011:
455
        begin
456
            sel_master_base = 1'b1 ;
457
            register_output = master_base ;
458
        end
459
        4'b0100:
460
        begin
461
            sel_target_burst_transaction_count = 1'b1 ;
462
            register_output = target_burst_transaction_count ;
463
        end
464
        4'b0101:
465
        begin
466
            sel_target_test_size = 1'b1 ;
467
            register_output = {20'h0, target_test_size} ;
468
        end
469
        4'b0110:
470
        begin
471
            sel_target_test_start_adr = 1'b1 ;
472
            register_output = target_test_start_adr ;
473
        end
474
        4'b0111:
475
        begin
476
            sel_target_test_start_dat = 1'b1 ;
477
            register_output = target_test_start_dat ;
478
        end
479
        4'b1000:
480
        begin
481
            sel_target_test_error_detected = 1'b1 ;
482
            register_output = {30'h0, target_test_adr_error_detected, target_test_dat_error_detected} ;
483
        end
484
        4'b1001:
485
        begin
486
            sel_master_num_of_wb_transfers = 1'b1 ;
487
            register_output = master_num_of_wb_transfers ;
488
        end
489
        4'b1010:
490
        begin
491
            sel_master_num_of_pci_transfers = 1'b1 ;
492
            register_output = master_num_of_pci_transfers ;
493
        end
494
        4'b1011:
495
        begin
496
            sel_master_test_size = 1'b1 ;
497
            register_output      = {11'h0, master_test_size} ;
498
        end
499
        4'b1100:
500
        begin
501
            sel_master_test_start_dat = 1'b1 ;
502
            register_output           = master_test_start_dat ;
503
        end
504
        4'b1101:
505
        begin
506
            sel_master_dat_err_detected = 1'b1 ;
507
            register_output             = {31'h0, master_dat_err_detected} ;
508
        end
509
    endcase
510
end
511
 
512
always@(wbs_adr_i or wbs_ram0_255_o or wbs_ram256_511_o or wbs_ram512_767_o or wbs_ram768_1023_o)
513
begin
514
    case (wbs_adr_i[11:10])
515
        2'b00:ram_output = wbs_ram0_255_o ;
516
        2'b01:ram_output = wbs_ram256_511_o ;
517
        2'b10:ram_output = wbs_ram512_767_o ;
518
        2'b11:ram_output = wbs_ram768_1023_o ;
519
    endcase
520
end
521
 
522
assign wbs_dat_o = sel_registers ? register_output : ram_output ;
523
 
524
reg delayed_ack_for_reads ;
525
 
526
always@(posedge clk_i or posedge rst_i)
527
begin
528
    if (rst_i)
529
        delayed_ack_for_reads <= 1'b0 ;
530
    else if (delayed_ack_for_reads)
531
        delayed_ack_for_reads <= 1'b0 ;
532
    else
533
        delayed_ack_for_reads <= wbs_cyc_i & wbs_stb_i & (~wbs_we_i) ;
534
end
535
 
536
assign wbs_ack_o = wbs_we_i ? (wbs_cyc_i & wbs_stb_i) : delayed_ack_for_reads ;
537
 
538
assign wbs_err_o = 1'b0 ;
539
assign wbs_rty_o = 1'b0 ;
540
 
541
reg wbm_cyc_o, wbm_cab_o, wbm_stb_o;
542
reg [31:0]  wbm_adr_o ;
543
reg [31:0]  wbm_next_adr_o ;
544
 
545
wire wbm_end_cycle   = wbm_cyc_o & wbm_stb_o & wbm_ack_i & (master_current_transaction_size == 11'h1) ;
546
wire wbm_start_cycle = (master_transaction_size != 11'h0) & (master_transaction_count != 11'h0) & ~wbm_cyc_o ;
547
 
548
always@(posedge clk_i or posedge rst_i)
549
begin
550
    if (rst_i)
551
    begin
552
        wbm_cyc_o                       <= 1'b0 ;
553
        wbm_cab_o                       <= 1'b0 ;
554
        wbm_stb_o                       <= 1'b0 ;
555
        wbm_adr_o                       <= 32'h0 ;
556
        master_current_transaction_size <= 11'h0 ;
557
        wbm_next_adr_o                  <= 32'h4 ;
558
    end
559
    else
560
    begin
561
        if (master_transaction_count == 11'h0)
562
        begin
563
            wbm_adr_o      <= master_base ;
564
            wbm_next_adr_o <= master_base_next ;
565
        end
566
        else if (wbm_cyc_o & wbm_stb_o & wbm_ack_i)
567
        begin
568
            wbm_adr_o            <= wbm_next_adr_o ;
569
            wbm_next_adr_o[31:2] <= wbm_next_adr_o[31:2] + 1'b1 ;
570
        end
571
 
572
        if (wbm_start_cycle)
573
        begin
574
            wbm_cyc_o                       <= 1'b1 ;
575
            wbm_cab_o                       <= (master_transaction_size != 11'h1) ;
576
            wbm_stb_o                       <= 1'b1 ;
577
            master_current_transaction_size <= master_transaction_size ;
578
        end
579
        else if (wbm_cyc_o)
580
        begin
581
            if (wbm_end_cycle)
582
            begin
583
                wbm_cyc_o                       <= 1'b0 ;
584
                wbm_stb_o                       <= 1'b0 ;
585
                wbm_cab_o                       <= 1'b0 ;
586
            end
587
            else
588
            begin
589
                if (wbm_stb_o & wbm_ack_i)
590
                begin
591
                    master_current_transaction_size <= master_current_transaction_size - 1'b1 ;
592
                end
593
            end
594
        end
595
    end
596
end
597
 
598
wire [7:0] master_ram_adr = (wbm_we_o & wbm_ack_i) ? wbm_next_adr_o[9:2] : wbm_adr_o[9:2] ;
599
 
600
RAMB4_S16_S16 ramb4_s16_s16_00
601
(
602
    .CLKA(clk_i),
603
    .RSTA(rst_i),
604
    .ADDRA(wbs_adr_i[9:2]),
605
    .DIA(wbs_dat_i[31:16]),
606
    .ENA(1'b1),
607
    .WEA(wbs_ram0_255_we),
608
    .DOA(wbs_ram0_255_o[31:16]),
609
 
610
    .CLKB(clk_i),
611
    .RSTB(rst_i),
612
    .ADDRB(master_ram_adr),
613
    .DIB(wbm_dat_i[31:16]),
614
    .ENB(1'b1),
615
    .WEB(wbm_ram0_255_we),
616
    .DOB(wbm_ram0_255_o[31:16])
617
);
618
 
619
RAMB4_S16_S16 ramb4_s16_s16_01
620
(
621
    .CLKA(clk_i),
622
    .RSTA(rst_i),
623
    .ADDRA(wbs_adr_i[9:2]),
624
    .DIA(wbs_dat_i[15:0]),
625
    .ENA(1'b1),
626
    .WEA(wbs_ram0_255_we),
627
    .DOA(wbs_ram0_255_o[15:0]),
628
 
629
    .CLKB(clk_i),
630
    .RSTB(rst_i),
631
    .ADDRB(master_ram_adr),
632
    .DIB(wbm_dat_i[15:0]),
633
    .ENB(1'b1),
634
    .WEB(wbm_ram0_255_we),
635
    .DOB(wbm_ram0_255_o[15:0])
636
);
637
 
638
RAMB4_S16_S16 ramb4_s16_s16_10
639
(
640
    .CLKA(clk_i),
641
    .RSTA(rst_i),
642
    .ADDRA(wbs_adr_i[9:2]),
643
    .DIA(wbs_dat_i[31:16]),
644
    .ENA(1'b1),
645
    .WEA(wbs_ram256_511_we),
646
    .DOA(wbs_ram256_511_o[31:16]),
647
 
648
    .CLKB(clk_i),
649
    .RSTB(rst_i),
650
    .ADDRB(master_ram_adr),
651
    .DIB(wbm_dat_i[31:16]),
652
    .ENB(1'b1),
653
    .WEB(wbm_ram256_511_we),
654
    .DOB(wbm_ram256_511_o[31:16])
655
);
656
 
657
RAMB4_S16_S16 ramb4_s16_s16_11
658
(
659
    .CLKA(clk_i),
660
    .RSTA(rst_i),
661
    .ADDRA(wbs_adr_i[9:2]),
662
    .DIA(wbs_dat_i[15:0]),
663
    .ENA(1'b1),
664
    .WEA(wbs_ram256_511_we),
665
    .DOA(wbs_ram256_511_o[15:0]),
666
 
667
    .CLKB(clk_i),
668
    .RSTB(rst_i),
669
    .ADDRB(master_ram_adr),
670
    .DIB(wbm_dat_i[15:0]),
671
    .ENB(1'b1),
672
    .WEB(wbm_ram256_511_we),
673
    .DOB(wbm_ram256_511_o[15:0])
674
);
675
 
676
RAMB4_S16_S16 ramb4_s16_s16_20
677
(
678
    .CLKA(clk_i),
679
    .RSTA(rst_i),
680
    .ADDRA(wbs_adr_i[9:2]),
681
    .DIA(wbs_dat_i[31:16]),
682
    .ENA(1'b1),
683
    .WEA(wbs_ram512_767_we),
684
    .DOA(wbs_ram512_767_o[31:16]),
685
 
686
    .CLKB(clk_i),
687
    .RSTB(rst_i),
688
    .ADDRB(master_ram_adr),
689
    .DIB(wbm_dat_i[31:16]),
690
    .ENB(1'b1),
691
    .WEB(wbm_ram512_767_we),
692
    .DOB(wbm_ram512_767_o[31:16])
693
);
694
 
695
RAMB4_S16_S16 ramb4_s16_s16_21
696
(
697
    .CLKA(clk_i),
698
    .RSTA(rst_i),
699
    .ADDRA(wbs_adr_i[9:2]),
700
    .DIA(wbs_dat_i[15:0]),
701
    .ENA(1'b1),
702
    .WEA(wbs_ram512_767_we),
703
    .DOA(wbs_ram512_767_o[15:0]),
704
 
705
    .CLKB(clk_i),
706
    .RSTB(rst_i),
707
    .ADDRB(master_ram_adr),
708
    .DIB(wbm_dat_i[15:0]),
709
    .ENB(1'b1),
710
    .WEB(wbm_ram512_767_we),
711
    .DOB(wbm_ram512_767_o[15:0])
712
);
713
 
714
RAMB4_S16_S16 ramb4_s16_s16_30
715
(
716
    .CLKA(clk_i),
717
    .RSTA(rst_i),
718
    .ADDRA(wbs_adr_i[9:2]),
719
    .DIA(wbs_dat_i[31:16]),
720
    .ENA(1'b1),
721
    .WEA(wbs_ram768_1023_we),
722
    .DOA(wbs_ram768_1023_o[31:16]),
723
 
724
    .CLKB(clk_i),
725
    .RSTB(rst_i),
726
    .ADDRB(master_ram_adr),
727
    .DIB(wbm_dat_i[31:16]),
728
    .ENB(1'b1),
729
    .WEB(wbm_ram768_1023_we),
730
    .DOB(wbm_ram768_1023_o[31:16])
731
);
732
 
733
RAMB4_S16_S16 ramb4_s16_s16_31
734
(
735
    .CLKA(clk_i),
736
    .RSTA(rst_i),
737
    .ADDRA(wbs_adr_i[9:2]),
738
    .DIA(wbs_dat_i[15:0]),
739
    .ENA(1'b1),
740
    .WEA(wbs_ram768_1023_we),
741
    .DOA(wbs_ram768_1023_o[15:0]),
742
 
743
    .CLKB(clk_i),
744
    .RSTB(rst_i),
745
    .ADDRB(master_ram_adr),
746
    .DIB(wbm_dat_i[15:0]),
747
    .ENB(1'b1),
748
    .WEB(wbm_ram768_1023_we),
749
    .DOB(wbm_ram768_1023_o[15:0])
750
);
751
 
752
endmodule // test

powered by: WebSVN 2.1.0

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