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

Subversion Repositories pci

[/] [pci/] [tags/] [rel_3/] [rtl/] [verilog/] [wb_slave_unit.v] - Blame information for rev 6

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

Line No. Rev Author Line
1 2 mihad
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  File name "wb_slave_unit.v"                                 ////
4
////                                                              ////
5
////  This file is part of the "PCI bridge" project               ////
6
////  http://www.opencores.org/cores/pci/                         ////
7
////                                                              ////
8
////  Author(s):                                                  ////
9
////      - Miha Dolenc (mihad@opencores.org)                     ////
10
////                                                              ////
11
////  All additional information is avaliable in the README       ////
12
////  file.                                                       ////
13
////                                                              ////
14
////                                                              ////
15
//////////////////////////////////////////////////////////////////////
16
////                                                              ////
17
//// Copyright (C) 2001 Miha Dolenc, mihad@opencores.org          ////
18
////                                                              ////
19
//// This source file may be used and distributed without         ////
20
//// restriction provided that this copyright statement is not    ////
21
//// removed from the file and that any derivative work contains  ////
22
//// the original copyright notice and the associated disclaimer. ////
23
////                                                              ////
24
//// This source file is free software; you can redistribute it   ////
25
//// and/or modify it under the terms of the GNU Lesser General   ////
26
//// Public License as published by the Free Software Foundation; ////
27
//// either version 2.1 of the License, or (at your option) any   ////
28
//// later version.                                               ////
29
////                                                              ////
30
//// This source is distributed in the hope that it will be       ////
31
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
32
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
33
//// PURPOSE.  See the GNU Lesser General Public License for more ////
34
//// details.                                                     ////
35
////                                                              ////
36
//// You should have received a copy of the GNU Lesser General    ////
37
//// Public License along with this source; if not, download it   ////
38
//// from http://www.opencores.org/lgpl.shtml                     ////
39
////                                                              ////
40
//////////////////////////////////////////////////////////////////////
41
//
42
// CVS Revision History
43
//
44
// $Log: not supported by cvs2svn $
45 6 mihad
// Revision 1.1.1.1  2001/10/02 15:33:46  mihad
46
// New project directory structure
47 2 mihad
//
48 6 mihad
//
49 2 mihad
 
50
// Module instantiates and connects other modules lower in hierarcy
51
// Wishbone slave unit consists of modules that together form datapath
52
// between external WISHBONE masters and external PCI targets
53
`include "constants.v"
54 6 mihad
`include "timescale.v"
55 2 mihad
module WB_SLAVE_UNIT
56
(
57
    reset_in,
58
    wb_clock_in,
59
    pci_clock_in,
60
    ADDR_I,
61
    SDATA_I,
62
    SDATA_O,
63
    CYC_I,
64
    STB_I,
65
    WE_I,
66
    SEL_I,
67
    ACK_O,
68
    RTY_O,
69
    ERR_O,
70
    CAB_I,
71
    wbu_map_in,
72
    wbu_pref_en_in,
73
    wbu_mrl_en_in,
74
    wbu_pci_drcomp_pending_in,
75
    wbu_conf_data_in,
76
    wbu_pciw_empty_in,
77
    wbu_bar0_in,
78
    wbu_bar1_in,
79
    wbu_bar2_in,
80
    wbu_bar3_in,
81
    wbu_bar4_in,
82
    wbu_bar5_in,
83
    wbu_am0_in,
84
    wbu_am1_in,
85
    wbu_am2_in,
86
    wbu_am3_in,
87
    wbu_am4_in,
88
    wbu_am5_in,
89
    wbu_ta0_in,
90
    wbu_ta1_in,
91
    wbu_ta2_in,
92
    wbu_ta3_in,
93
    wbu_ta4_in,
94
    wbu_ta5_in,
95
    wbu_at_en_in,
96
    wbu_ccyc_addr_in ,
97
    wbu_master_enable_in,
98
    wbu_cache_line_size_in,
99
    wbu_pciif_gnt_in,
100
    wbu_pciif_frame_in,
101
    wbu_pciif_irdy_in,
102
    wbu_pciif_trdy_in,
103
    wbu_pciif_trdy_reg_in,
104
    wbu_pciif_stop_in,
105
    wbu_pciif_stop_reg_in,
106
    wbu_pciif_devsel_in,
107
    wbu_pciif_devsel_reg_in,
108
    wbu_pciif_ad_reg_in,
109
    wbu_pciif_req_out,
110
    wbu_pciif_frame_out,
111
    wbu_pciif_frame_en_out,
112
    wbu_pciif_frame_en_in,
113
    wbu_pciif_frame_out_in,
114
    wbu_pciif_frame_load_out,
115
    wbu_pciif_irdy_out,
116
    wbu_pciif_irdy_en_out,
117
    wbu_pciif_ad_out,
118
    wbu_pciif_ad_en_out,
119
    wbu_pciif_cbe_out,
120
    wbu_pciif_cbe_en_out,
121
    wbu_err_addr_out,
122
    wbu_err_bc_out,
123
    wbu_err_signal_out,
124
    wbu_err_source_out,
125
    wbu_err_rty_exp_out,
126
    wbu_err_pending_in,
127
    wbu_tabort_rec_out,
128
    wbu_mabort_rec_out,
129
    wbu_conf_offset_out,
130
    wbu_conf_renable_out,
131
    wbu_conf_wenable_out,
132
    wbu_conf_be_out,
133
    wbu_conf_data_out,
134
    wbu_del_read_comp_pending_out,
135
    wbu_wbw_fifo_empty_out,
136
    wbu_latency_tim_val_in,
137
    wbu_pciif_load_next_out
138
);
139
 
140
input reset_in,
141
      wb_clock_in,
142
      pci_clock_in ;
143
 
144
input   [31:0]  ADDR_I   ;
145
input   [31:0]  SDATA_I  ;
146
output  [31:0]  SDATA_O  ;
147
input           CYC_I    ;
148
input           STB_I    ;
149
input           WE_I     ;
150
input   [3:0]   SEL_I    ;
151
output          ACK_O    ;
152
output          RTY_O    ;
153
output          ERR_O    ;
154
input           CAB_I    ;
155
 
156
input   [5:0]   wbu_map_in ;
157
input   [5:0]   wbu_pref_en_in ;
158
input   [5:0]   wbu_mrl_en_in ;
159
 
160
input           wbu_pci_drcomp_pending_in ;
161
 
162
input   [31:0]  wbu_conf_data_in ;
163
 
164
input           wbu_pciw_empty_in ;
165
 
166
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar0_in ;
167
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar1_in ;
168
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar2_in ;
169
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar3_in ;
170
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar4_in ;
171
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar5_in ;
172
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am0_in ;
173
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am1_in ;
174
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am2_in ;
175
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am3_in ;
176
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am4_in ;
177
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am5_in ;
178
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta0_in ;
179
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta1_in ;
180
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta2_in ;
181
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta3_in ;
182
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta4_in ;
183
input   [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta5_in ;
184
input   [5:0]                               wbu_at_en_in ;
185
 
186
input   [23:0]  wbu_ccyc_addr_in ;
187
 
188
input           wbu_master_enable_in ;
189
 
190
input   [7:0]   wbu_cache_line_size_in ;
191
 
192
input           wbu_pciif_gnt_in ;
193
input           wbu_pciif_frame_in ;
194
input           wbu_pciif_frame_en_in ;
195
input           wbu_pciif_irdy_in ;
196
input           wbu_pciif_trdy_in;
197
input           wbu_pciif_trdy_reg_in;
198
input           wbu_pciif_stop_in ;
199
input           wbu_pciif_stop_reg_in ;
200
input           wbu_pciif_devsel_in ;
201
input           wbu_pciif_devsel_reg_in ;
202
input [31:0]    wbu_pciif_ad_reg_in ;
203
 
204
output          wbu_pciif_req_out ;
205
output          wbu_pciif_frame_out ;
206
output          wbu_pciif_frame_en_out ;
207
input           wbu_pciif_frame_out_in ;
208
output          wbu_pciif_frame_load_out ;
209
output          wbu_pciif_irdy_out ;
210
output          wbu_pciif_irdy_en_out ;
211
output  [31:0]  wbu_pciif_ad_out ;
212
output          wbu_pciif_ad_en_out ;
213
output  [3:0]   wbu_pciif_cbe_out ;
214
output          wbu_pciif_cbe_en_out ;
215
 
216
output  [31:0]  wbu_err_addr_out ;
217
output  [3:0]   wbu_err_bc_out ;
218
output          wbu_err_signal_out ;
219
output          wbu_err_source_out ;
220
output          wbu_err_rty_exp_out ;
221
input           wbu_err_pending_in ;
222
output          wbu_tabort_rec_out ;
223
output          wbu_mabort_rec_out ;
224
 
225
output  [11:0]  wbu_conf_offset_out ;
226
output          wbu_conf_renable_out ;
227
output          wbu_conf_wenable_out ;
228
output  [3:0]   wbu_conf_be_out ;
229
output  [31:0]  wbu_conf_data_out ;
230
 
231
output          wbu_del_read_comp_pending_out ;
232
output          wbu_wbw_fifo_empty_out ;
233
 
234
input   [7:0]   wbu_latency_tim_val_in ;
235
 
236
output          wbu_pciif_load_next_out ;
237
 
238
// pci master interface outputs
239
wire [31:0] pcim_if_address_out ;
240
wire [3:0]  pcim_if_bc_out ;
241
wire [31:0] pcim_if_data_out ;
242
wire [3:0]  pcim_if_be_out ;
243
wire        pcim_if_req_out ;
244
wire        pcim_if_rdy_out ;
245
wire        pcim_if_last_out ;
246
wire        pcim_if_wbw_renable_out ;
247
wire        pcim_if_wbr_wenable_out ;
248
wire [31:0] pcim_if_wbr_data_out ;
249
wire [3:0]  pcim_if_wbr_be_out ;
250
wire [3:0]  pcim_if_wbr_control_out ;
251
wire        pcim_if_del_complete_out ;
252
wire        pcim_if_del_error_out ;
253
wire        pcim_if_del_rty_exp_out ;
254
wire [31:0] pcim_if_err_addr_out ;
255
wire [3:0]  pcim_if_err_bc_out ;
256
wire        pcim_if_err_signal_out ;
257
wire        pcim_if_err_source_out ;
258
wire        pcim_if_err_rty_exp_out ;
259
wire        pcim_if_tabort_out ;
260
wire        pcim_if_mabort_out ;
261
wire [31:0] pcim_if_next_data_out ;
262
wire [3:0]  pcim_if_next_be_out ;
263
wire        pcim_if_next_last_out ;
264
 
265
 
266
 
267
wire        pcim_sm_req_out ;
268
wire        pcim_sm_frame_out ;
269
wire        pcim_sm_frame_en_out ;
270
wire        pcim_sm_irdy_out ;
271
wire        pcim_sm_irdy_en_out ;
272
wire [31:0] pcim_sm_ad_out ;
273
wire        pcim_sm_ad_en_out ;
274
wire [3:0]  pcim_sm_cbe_out ;
275
wire        pcim_sm_cbe_en_out ;
276
wire        pcim_sm_load_next_out ;
277
 
278
wire        pcim_sm_wait_out ;
279
wire        pcim_sm_wtransfer_out ;
280
wire        pcim_sm_rtransfer_out ;
281
wire        pcim_sm_retry_out ;
282
wire        pcim_sm_werror_out ;
283
wire        pcim_sm_rerror_out ;
284
wire        pcim_sm_first_out ;
285
wire        pcim_sm_mabort_out ;
286
wire        pcim_sm_frame_load_out ;
287
 
288
assign wbu_pciif_frame_load_out = pcim_sm_frame_load_out ;
289
 
290
assign wbu_err_addr_out     =   pcim_if_err_addr_out ;
291
assign wbu_err_bc_out       =   pcim_if_err_bc_out ;
292
assign wbu_err_signal_out   =   pcim_if_err_signal_out ;
293
assign wbu_err_source_out   =   pcim_if_err_source_out ;
294
assign wbu_err_rty_exp_out  =   pcim_if_err_rty_exp_out ;
295
assign wbu_tabort_rec_out   =   pcim_if_tabort_out ;
296
assign wbu_mabort_rec_out   =   pcim_if_mabort_out ;
297
 
298
// pci master state machine outputs
299
// pci interface signals
300
assign  wbu_pciif_req_out          =           pcim_sm_req_out ;
301
assign  wbu_pciif_frame_out        =           pcim_sm_frame_out ;
302
assign  wbu_pciif_frame_en_out     =           pcim_sm_frame_en_out ;
303
assign  wbu_pciif_irdy_out         =           pcim_sm_irdy_out ;
304
assign  wbu_pciif_irdy_en_out      =           pcim_sm_irdy_en_out ;
305
assign  wbu_pciif_ad_out           =           pcim_sm_ad_out ;
306
assign  wbu_pciif_ad_en_out        =           pcim_sm_ad_en_out ;
307
assign  wbu_pciif_cbe_out          =           pcim_sm_cbe_out ;
308
assign  wbu_pciif_cbe_en_out       =           pcim_sm_cbe_en_out ;
309
assign  wbu_pciif_load_next_out    =           pcim_sm_load_next_out ;
310
 
311
// signals to internal of the core
312
wire [31:0] pcim_sm_data_out ;
313
 
314
// wishbone slave state machine outputs
315
wire [3:0]  wbs_sm_del_bc_out ;
316
wire        wbs_sm_del_req_out ;
317
wire        wbs_sm_del_done_out ;
318
wire        wbs_sm_del_burst_out ;
319
wire        wbs_sm_del_write_out ;
320
wire [11:0] wbs_sm_conf_offset_out ;
321
wire        wbs_sm_conf_renable_out ;
322
wire        wbs_sm_conf_wenable_out ;
323
wire [3:0]  wbs_sm_conf_be_out ;
324
wire [31:0] wbs_sm_conf_data_out ;
325
wire [31:0] wbs_sm_data_out ;
326
wire [3:0]  wbs_sm_cbe_out ;
327
wire        wbs_sm_wbw_wenable_out ;
328
wire [3:0]  wbs_sm_wbw_control_out ;
329
wire        wbs_sm_wbr_renable_out ;
330
wire        wbs_sm_wbr_flush_out ;
331
wire        wbs_sm_del_in_progress_out ;
332
wire [31:0] wbs_sm_sdata_out ;
333
wire        wbs_sm_ack_out ;
334
wire        wbs_sm_rty_out ;
335
wire        wbs_sm_err_out ;
336
 
337
assign wbu_conf_offset_out  = wbs_sm_conf_offset_out ;
338
assign wbu_conf_renable_out = wbs_sm_conf_renable_out ;
339
assign wbu_conf_wenable_out = wbs_sm_conf_wenable_out ;
340
assign wbu_conf_be_out      = ~wbs_sm_conf_be_out ;
341
assign wbu_conf_data_out    = wbs_sm_conf_data_out ;
342
 
343
assign SDATA_O = wbs_sm_sdata_out ;
344
assign ACK_O   = wbs_sm_ack_out ;
345
assign RTY_O   = wbs_sm_rty_out ;
346
assign ERR_O   = wbs_sm_err_out ;
347
 
348
 
349
// wbw_wbr fifo outputs
350
 
351
// wbw_fifo_outputs:
352
wire [31:0] fifos_wbw_addr_data_out ;
353
wire [3:0]  fifos_wbw_cbe_out ;
354
wire [3:0]  fifos_wbw_control_out ;
355
wire        fifos_wbw_almost_full_out ;
356
wire        fifos_wbw_full_out ;
357
wire        fifos_wbw_empty_out ;
358
wire        fifos_wbw_transaction_ready_out ;
359
 
360
assign wbu_wbw_fifo_empty_out = fifos_wbw_empty_out ;
361
 
362
// wbr_fifo_outputs
363
wire [31:0] fifos_wbr_data_out ;
364
wire [3:0]  fifos_wbr_be_out ;
365
wire [3:0]  fifos_wbr_control_out ;
366
wire        fifos_wbr_empty_out ;
367
 
368
// address multiplexer outputs
369
wire [5:0]  amux_hit_out ;
370
wire [31:0] amux_address_out ;
371
 
372
// delayed transaction logic outputs
373
wire [31:0] del_sync_addr_out ;
374
wire [3:0]  del_sync_be_out ;
375
wire        del_sync_we_out ;
376
wire        del_sync_comp_req_pending_out ;
377
wire        del_sync_comp_comp_pending_out ;
378
wire        del_sync_req_req_pending_out ;
379
wire        del_sync_req_comp_pending_out ;
380
wire [3:0]  del_sync_bc_out ;
381
wire        del_sync_status_out ;
382
wire        del_sync_comp_flush_out ;
383
wire        del_sync_burst_out ;
384
 
385
assign wbu_del_read_comp_pending_out = del_sync_comp_comp_pending_out ;
386
 
387
// delayed write storage output 
388
wire [31:0] del_write_data_out ;
389
 
390
// config. cycle address decoder output
391
wire [31:0] ccyc_addr_out ;
392
 
393
 
394
// WISHBONE slave interface inputs            
395
wire [4:0]  wbs_sm_hit_in                   =       amux_hit_out[5:1] ;
396
wire        wbs_sm_conf_hit_in              =       amux_hit_out[0]   ;
397
wire [4:0]  wbs_sm_map_in                   =       wbu_map_in[5:1]        ;
398
wire [4:0]  wbs_sm_pref_en_in               =       wbu_pref_en_in[5:1]    ;
399
wire [4:0]  wbs_sm_mrl_en_in                =       wbu_mrl_en_in[5:1]     ;
400
wire [31:0] wbs_sm_addr_in                  =       amux_address_out ;
401
wire [3:0]  wbs_sm_del_bc_in                =       del_sync_bc_out  ;
402
wire        wbs_sm_del_req_pending_in       =       del_sync_req_req_pending_out ;
403
wire        wbs_sm_wb_del_comp_pending_in   =       del_sync_req_comp_pending_out ;
404
wire        wbs_sm_pci_drcomp_pending_in    =       wbu_pci_drcomp_pending_in ;
405
wire        wbs_sm_del_write_in             =       del_sync_we_out ;
406
wire        wbs_sm_del_error_in             =       del_sync_status_out ;
407
wire [31:0] wbs_sm_del_addr_in              =       del_sync_addr_out ;
408
wire [3:0]  wbs_sm_del_be_in                =       del_sync_be_out ;
409
wire [31:0] wbs_sm_conf_data_in             =       wbu_conf_data_in ;
410
wire        wbs_sm_wbw_almost_full_in       =       fifos_wbw_almost_full_out ;
411
wire        wbs_sm_wbw_full_in              =       fifos_wbw_full_out ;
412
wire [3:0]  wbs_sm_wbr_be_in                =       fifos_wbr_be_out ;
413
wire [31:0] wbs_sm_wbr_data_in              =       fifos_wbr_data_out ;
414
wire [3:0]  wbs_sm_wbr_control_in           =       fifos_wbr_control_out ;
415
wire        wbs_sm_wbr_empty_in             =       fifos_wbr_empty_out ;
416
wire        wbs_sm_pciw_empty_in            =       wbu_pciw_empty_in ;
417
wire        wbs_sm_lock_in                  =       ~wbu_master_enable_in || wbu_err_pending_in ;
418
wire        wbs_sm_cyc_in                   =       CYC_I ;
419
wire        wbs_sm_stb_in                   =       STB_I ;
420
wire        wbs_sm_we_in                    =       WE_I  ;
421
wire [3:0]  wbs_sm_sel_in                   =       SEL_I ;
422
wire [31:0] wbs_sm_sdata_in                 =       SDATA_I ;
423
wire        wbs_sm_cab_in                   =       CAB_I ;
424
wire [31:0] wbs_sm_ccyc_addr_in             =       ccyc_addr_out ;
425
 
426
// WISHBONE slave interface instantiation
427
WB_SLAVE wishbone_slave(
428
                        .wb_clock_in              (wb_clock_in) ,
429
                        .reset_in                 (reset_in) ,
430
                        .wb_hit_in                (wbs_sm_hit_in) ,
431
                        .wb_conf_hit_in           (wbs_sm_conf_hit_in) ,
432
                        .wb_map_in                (wbs_sm_map_in) ,
433
                        .wb_pref_en_in            (wbs_sm_pref_en_in) ,
434
                        .wb_mrl_en_in             (wbs_sm_mrl_en_in) ,
435
                        .wb_addr_in               (wbs_sm_addr_in),
436
                        .del_bc_in                (wbs_sm_del_bc_in),
437
                        .wb_del_req_pending_in    (wbs_sm_del_req_pending_in),
438
                        .wb_del_comp_pending_in   (wbs_sm_wb_del_comp_pending_in),
439
                        .pci_drcomp_pending_in    (wbs_sm_pci_drcomp_pending_in),
440
                        .del_bc_out               (wbs_sm_del_bc_out),
441
                        .del_req_out              (wbs_sm_del_req_out),
442
                        .del_done_out             (wbs_sm_del_done_out),
443
                        .del_burst_out            (wbs_sm_del_burst_out),
444
                        .del_write_out            (wbs_sm_del_write_out),
445
                        .del_write_in             (wbs_sm_del_write_in),
446
                        .del_error_in             (wbs_sm_del_error_in),
447
                        .wb_del_addr_in           (wbs_sm_del_addr_in),
448
                        .wb_del_be_in             (wbs_sm_del_be_in),
449
                        .wb_conf_offset_out       (wbs_sm_conf_offset_out),
450
                        .wb_conf_renable_out      (wbs_sm_conf_renable_out),
451
                        .wb_conf_wenable_out      (wbs_sm_conf_wenable_out),
452
                        .wb_conf_be_out           (wbs_sm_conf_be_out),
453
                        .wb_conf_data_in          (wbs_sm_conf_data_in),
454
                        .wb_conf_data_out         (wbs_sm_conf_data_out),
455
                        .wb_data_out              (wbs_sm_data_out),
456
                        .wb_cbe_out               (wbs_sm_cbe_out),
457
                        .wbw_fifo_wenable_out     (wbs_sm_wbw_wenable_out),
458
                        .wbw_fifo_control_out     (wbs_sm_wbw_control_out),
459
                        .wbw_fifo_almost_full_in  (wbs_sm_wbw_almost_full_in),
460
                        .wbw_fifo_full_in         (wbs_sm_wbw_full_in),
461
                        .wbr_fifo_renable_out     (wbs_sm_wbr_renable_out),
462
                        .wbr_fifo_be_in           (wbs_sm_wbr_be_in),
463
                        .wbr_fifo_data_in         (wbs_sm_wbr_data_in),
464
                        .wbr_fifo_control_in      (wbs_sm_wbr_control_in),
465
                        .wbr_fifo_flush_out       (wbs_sm_wbr_flush_out),
466
                        .wbr_fifo_empty_in        (wbs_sm_wbr_empty_in),
467
                        .pciw_fifo_empty_in       (wbs_sm_pciw_empty_in),
468
                        .wbs_lock_in              (wbs_sm_lock_in),
469
                        .del_in_progress_out      (wbs_sm_del_in_progress_out),
470
                        .ccyc_addr_in             (wbs_sm_ccyc_addr_in),
471
                        .CYC_I                    (wbs_sm_cyc_in),
472
                        .STB_I                    (wbs_sm_stb_in),
473
                        .WE_I                     (wbs_sm_we_in),
474
                        .SEL_I                    (wbs_sm_sel_in),
475
                        .SDATA_I                  (wbs_sm_sdata_in),
476
                        .SDATA_O                  (wbs_sm_sdata_out),
477
                        .ACK_O                    (wbs_sm_ack_out),
478
                        .RTY_O                    (wbs_sm_rty_out),
479
                        .ERR_O                    (wbs_sm_err_out),
480
                        .CAB_I                    (wbs_sm_cab_in)
481
                       );
482
 
483
// wbw_wbr_fifos inputs
484
// WBW_FIFO inputs
485
wire        fifos_wbw_wenable_in        =       wbs_sm_wbw_wenable_out;
486
wire [31:0] fifos_wbw_addr_data_in      =       wbs_sm_data_out ;
487
wire [3:0]  fifos_wbw_cbe_in            =       wbs_sm_cbe_out ;
488
wire [3:0]  fifos_wbw_control_in        =       wbs_sm_wbw_control_out ;
489
wire        fifos_wbw_renable_in        =       pcim_if_wbw_renable_out ;
490
wire        fifos_wbw_flush_in          =       1'b0 ;
491
 
492
// WBR_FIFO inputs
493
wire        fifos_wbr_wenable_in        =       pcim_if_wbr_wenable_out ;
494
wire [31:0] fifos_wbr_data_in           =       pcim_if_wbr_data_out ;
495
wire [3:0]  fifos_wbr_be_in             =       pcim_if_wbr_be_out ;
496
wire [3:0]  fifos_wbr_control_in        =       pcim_if_wbr_control_out ;
497
wire        fifos_wbr_renable_in        =       wbs_sm_wbr_renable_out ;
498
wire        fifos_wbr_flush_in          =       wbs_sm_wbr_flush_out || del_sync_comp_flush_out ;
499
 
500
// WBW_FIFO and WBR_FIFO instantiation
501
WBW_WBR_FIFOS fifos(
502
                    .wb_clock_in               (wb_clock_in),
503
                    .pci_clock_in              (pci_clock_in),
504
                    .reset_in                  (reset_in),
505
                    .wbw_wenable_in            (fifos_wbw_wenable_in),
506
                    .wbw_addr_data_in          (fifos_wbw_addr_data_in),
507
                    .wbw_cbe_in                (fifos_wbw_cbe_in),
508
                    .wbw_control_in            (fifos_wbw_control_in),
509
                    .wbw_renable_in            (fifos_wbw_renable_in),
510
                    .wbw_addr_data_out         (fifos_wbw_addr_data_out),
511
                    .wbw_cbe_out               (fifos_wbw_cbe_out),
512
                    .wbw_control_out           (fifos_wbw_control_out),
513
                    .wbw_flush_in              (fifos_wbw_flush_in),
514
                    .wbw_almost_full_out       (fifos_wbw_almost_full_out),
515
                    .wbw_full_out              (fifos_wbw_full_out),
516
                    .wbw_empty_out             (fifos_wbw_empty_out),
517
                    .wbw_transaction_ready_out (fifos_wbw_transaction_ready_out),
518
                    .wbr_wenable_in            (fifos_wbr_wenable_in),
519
                    .wbr_data_in               (fifos_wbr_data_in),
520
                    .wbr_be_in                 (fifos_wbr_be_in),
521
                    .wbr_control_in            (fifos_wbr_control_in),
522
                    .wbr_renable_in            (fifos_wbr_renable_in),
523
                    .wbr_data_out              (fifos_wbr_data_out),
524
                    .wbr_be_out                (fifos_wbr_be_out),
525
                    .wbr_control_out           (fifos_wbr_control_out),
526
                    .wbr_flush_in              (fifos_wbr_flush_in),
527
                    .wbr_empty_out             (fifos_wbr_empty_out)
528
                   ) ;
529
 
530
wire [31:0] amux_addr_in  = ADDR_I ;
531
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar0_in   =   wbu_bar0_in ;
532
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar1_in   =   wbu_bar1_in ;
533
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar2_in   =   wbu_bar2_in ;
534
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar3_in   =   wbu_bar3_in ;
535
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar4_in   =   wbu_bar4_in ;
536
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar5_in   =   wbu_bar5_in ;
537
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am0_in    =   wbu_am0_in ;
538
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am1_in    =   wbu_am1_in ;
539
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am2_in    =   wbu_am2_in ;
540
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am3_in    =   wbu_am3_in ;
541
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am4_in    =   wbu_am4_in ;
542
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am5_in    =   wbu_am5_in ;
543
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta0_in    =   wbu_ta0_in ;
544
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta1_in    =   wbu_ta1_in ;
545
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta2_in    =   wbu_ta2_in ;
546
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta3_in    =   wbu_ta3_in ;
547
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta4_in    =   wbu_ta4_in ;
548
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta5_in    =   wbu_ta5_in ;
549
wire [5:0]  amux_at_en_in = wbu_at_en_in ;
550
 
551
WB_ADDR_MUX wb_addr_dec
552
(
553
    .address_in  (amux_addr_in),
554
    .bar0_in     (amux_bar0_in),
555
    .bar1_in     (amux_bar1_in),
556
    .bar2_in     (amux_bar2_in),
557
    .bar3_in     (amux_bar3_in),
558
    .bar4_in     (amux_bar4_in),
559
    .bar5_in     (amux_bar5_in),
560
    .am0_in      (amux_am0_in),
561
    .am1_in      (amux_am1_in),
562
    .am2_in      (amux_am2_in),
563
    .am3_in      (amux_am3_in),
564
    .am4_in      (amux_am4_in),
565
    .am5_in      (amux_am5_in),
566
    .ta0_in      (amux_ta0_in),
567
    .ta1_in      (amux_ta1_in),
568
    .ta2_in      (amux_ta2_in),
569
    .ta3_in      (amux_ta3_in),
570
    .ta4_in      (amux_ta4_in),
571
    .ta5_in      (amux_ta5_in),
572
    .at_en_in    (amux_at_en_in),
573
    .hit_out     (amux_hit_out),
574
    .address_out (amux_address_out)
575
);
576
 
577
// delayed transaction logic inputs
578
wire        del_sync_req_in             =       wbs_sm_del_req_out ;
579
wire        del_sync_comp_in            =       pcim_if_del_complete_out ;
580
wire        del_sync_done_in            =       wbs_sm_del_done_out ;
581
wire        del_sync_in_progress_in     =       wbs_sm_del_in_progress_out ;
582
wire [31:0] del_sync_addr_in            =       wbs_sm_data_out ;
583
wire [3:0]  del_sync_be_in              =       wbs_sm_conf_be_out ;
584
wire        del_sync_we_in              =       wbs_sm_del_write_out ;
585
wire [3:0]  del_sync_bc_in              =       wbs_sm_del_bc_out ;
586
wire        del_sync_status_in          =       pcim_if_del_error_out ;
587
wire        del_sync_burst_in           =       wbs_sm_del_burst_out ;
588
wire        del_sync_retry_expired_in   =       pcim_if_del_rty_exp_out ;
589
 
590
// delayed transaction logic instantiation
591
DELAYED_SYNC del_sync  (
592
                            .reset_in             (reset_in),
593
                            .req_clk_in           (wb_clock_in),
594
                            .comp_clk_in          (pci_clock_in),
595
                            .req_in               (del_sync_req_in),
596
                            .comp_in              (del_sync_comp_in),
597
                            .done_in              (del_sync_done_in),
598
                            .in_progress_in       (del_sync_in_progress_in),
599
                            .comp_req_pending_out (del_sync_comp_req_pending_out),
600
                            .comp_comp_pending_out(del_sync_comp_comp_pending_out),
601
                            .req_req_pending_out  (del_sync_req_req_pending_out),
602
                            .req_comp_pending_out (del_sync_req_comp_pending_out),
603
                            .addr_in              (del_sync_addr_in),
604
                            .be_in                (del_sync_be_in),
605
                            .addr_out             (del_sync_addr_out),
606
                            .be_out               (del_sync_be_out),
607
                            .we_in                (del_sync_we_in),
608
                            .we_out               (del_sync_we_out),
609
                            .bc_in                (del_sync_bc_in),
610
                            .bc_out               (del_sync_bc_out),
611
                            .status_in            (del_sync_status_in),
612
                            .status_out           (del_sync_status_out),
613
                            .comp_flush_out       (del_sync_comp_flush_out),
614
                            .burst_in             (del_sync_burst_in),
615
                            .burst_out            (del_sync_burst_out),
616
                            .retry_expired_in     (del_sync_retry_expired_in)
617
                        );
618
 
619
// delayed write storage inputs
620
wire        del_write_we_in         =       wbs_sm_del_req_out && wbs_sm_del_write_out ;
621
wire [31:0] del_write_data_in       =       wbs_sm_conf_data_out ;
622
 
623
DELAYED_WRITE_REG delayed_write_data
624
(
625
        .reset_in       (reset_in),
626
        .req_clk_in     (wb_clock_in),
627
        .comp_wdata_out (del_write_data_out),
628
        .req_we_in      (del_write_we_in),
629
        .req_wdata_in   (del_write_data_in)
630
);
631
 
632
`ifdef HOST
633
    // configuration cycle address decoder input
634
    wire    [31:0]      ccyc_addr_in = {8'h00, wbu_ccyc_addr_in} ;
635
 
636
    CONF_CYC_ADDR_DEC ccyc_addr_dec
637
    (
638
        .ccyc_addr_in   (ccyc_addr_in),
639
        .ccyc_addr_out  (ccyc_addr_out)
640
    ) ;
641
`else
642
`ifdef GUEST
643
    assign ccyc_addr_out = 32'h0000_0000 ;
644
`endif
645
`endif
646
 
647
// pci master interface inputs
648
wire [31:0] pcim_if_wbw_addr_data_in            =           fifos_wbw_addr_data_out ;
649
wire [3:0]  pcim_if_wbw_cbe_in                  =           fifos_wbw_cbe_out ;
650
wire [3:0]  pcim_if_wbw_control_in              =           fifos_wbw_control_out ;
651
wire        pcim_if_wbw_empty_in                =           fifos_wbw_empty_out ;
652
wire        pcim_if_wbw_transaction_ready_in    =           fifos_wbw_transaction_ready_out ;
653
wire [31:0] pcim_if_data_in                     =           pcim_sm_data_out ;
654
wire [31:0] pcim_if_del_wdata_in                =           del_write_data_out ;
655
wire        pcim_if_del_req_in                  =           del_sync_comp_req_pending_out ;
656
wire [31:0] pcim_if_del_addr_in                 =           del_sync_addr_out ;
657
wire [3:0]  pcim_if_del_bc_in                   =           del_sync_bc_out ;
658
wire [3:0]  pcim_if_del_be_in                   =           del_sync_be_out ;
659
wire        pcim_if_del_burst_in                =           del_sync_burst_out ;
660
wire        pcim_if_del_we_in                   =           del_sync_we_out ;
661
wire        pcim_if_err_pending_in              =           wbu_err_pending_in ;
662
wire [7:0]  pcim_if_cache_line_size_in          =           wbu_cache_line_size_in ;
663
wire        pcim_if_wait_in                     =           pcim_sm_wait_out ;
664
wire        pcim_if_wtransfer_in                =           pcim_sm_wtransfer_out ;
665
wire        pcim_if_rtransfer_in                =           pcim_sm_rtransfer_out ;
666
wire        pcim_if_retry_in                    =           pcim_sm_retry_out ;
667
wire        pcim_if_werror_in                   =           pcim_sm_werror_out ;
668
wire        pcim_if_rerror_in                   =           pcim_sm_rerror_out ;
669
wire        pcim_if_first_in                    =           pcim_sm_first_out ;
670
wire        pcim_if_mabort_in                   =           pcim_sm_mabort_out ;
671
 
672
PCI_MASTER32_SM_IF pci_initiator_if
673
(
674
    .clk_in                        (pci_clock_in),
675
    .reset_in                      (reset_in),
676
    .address_out                   (pcim_if_address_out),
677
    .bc_out                        (pcim_if_bc_out),
678
    .data_out                      (pcim_if_data_out),
679
    .data_in                       (pcim_if_data_in),
680
    .be_out                        (pcim_if_be_out),
681
    .req_out                       (pcim_if_req_out),
682
    .rdy_out                       (pcim_if_rdy_out),
683
    .last_out                      (pcim_if_last_out),
684
    .wbw_renable_out               (pcim_if_wbw_renable_out),
685
    .wbw_fifo_addr_data_in         (pcim_if_wbw_addr_data_in),
686
    .wbw_fifo_cbe_in               (pcim_if_wbw_cbe_in),
687
    .wbw_fifo_control_in           (pcim_if_wbw_control_in),
688
    .wbw_fifo_empty_in             (pcim_if_wbw_empty_in),
689
    .wbw_fifo_transaction_ready_in (pcim_if_wbw_transaction_ready_in),
690
    .wbr_fifo_wenable_out          (pcim_if_wbr_wenable_out),
691
    .wbr_fifo_data_out             (pcim_if_wbr_data_out),
692
    .wbr_fifo_be_out               (pcim_if_wbr_be_out),
693
    .wbr_fifo_control_out          (pcim_if_wbr_control_out),
694
    .del_wdata_in                  (pcim_if_del_wdata_in),
695
    .del_complete_out              (pcim_if_del_complete_out),
696
    .del_req_in                    (pcim_if_del_req_in),
697
    .del_addr_in                   (pcim_if_del_addr_in),
698
    .del_bc_in                     (pcim_if_del_bc_in),
699
    .del_be_in                     (pcim_if_del_be_in),
700
    .del_burst_in                  (pcim_if_del_burst_in),
701
    .del_error_out                 (pcim_if_del_error_out),
702
    .del_rty_exp_out               (pcim_if_del_rty_exp_out),
703
    .del_we_in                     (pcim_if_del_we_in),
704
    .err_addr_out                  (pcim_if_err_addr_out),
705
    .err_bc_out                    (pcim_if_err_bc_out),
706
    .err_signal_out                (pcim_if_err_signal_out),
707
    .err_source_out                (pcim_if_err_source_out),
708
    .err_pending_in                (pcim_if_err_pending_in),
709
    .err_rty_exp_out               (pcim_if_err_rty_exp_out),
710
    .cache_line_size_in            (pcim_if_cache_line_size_in),
711
    .mabort_received_out           (pcim_if_tabort_out),
712
    .tabort_received_out           (pcim_if_mabort_out),
713
    .next_data_out                 (pcim_if_next_data_out),
714
    .next_be_out                   (pcim_if_next_be_out),
715
    .next_last_out                 (pcim_if_next_last_out),
716
    .wait_in                       (pcim_if_wait_in),
717
    .wtransfer_in                  (pcim_if_wtransfer_in),
718
    .rtransfer_in                  (pcim_if_rtransfer_in),
719
    .retry_in                      (pcim_if_retry_in),
720
    .werror_in                     (pcim_if_werror_in),
721
    .rerror_in                     (pcim_if_rerror_in),
722
    .first_in                      (pcim_if_first_in),
723
    .mabort_in                     (pcim_if_mabort_in)
724
);
725
 
726
// pci master state machine inputs
727
wire        pcim_sm_gnt_in                  =       wbu_pciif_gnt_in ;
728
wire        pcim_sm_frame_in                =       wbu_pciif_frame_in ;
729
wire        pcim_sm_irdy_in                 =       wbu_pciif_irdy_in ;
730
wire        pcim_sm_trdy_in                 =       wbu_pciif_trdy_in;
731
wire        pcim_sm_stop_in                 =       wbu_pciif_stop_in ;
732
wire        pcim_sm_devsel_in               =       wbu_pciif_devsel_in ;
733
wire [31:0] pcim_sm_ad_reg_in               =       wbu_pciif_ad_reg_in ;
734
wire [31:0] pcim_sm_address_in              =       pcim_if_address_out ;
735
wire [3:0]  pcim_sm_bc_in                   =       pcim_if_bc_out ;
736
wire [31:0] pcim_sm_data_in                 =       pcim_if_data_out ;
737
wire [3:0]  pcim_sm_be_in                   =       pcim_if_be_out ;
738
wire        pcim_sm_req_in                  =       pcim_if_req_out ;
739
wire        pcim_sm_rdy_in                  =       pcim_if_rdy_out ;
740
wire        pcim_sm_last_in                 =       pcim_if_last_out ;
741
wire [7:0]  pcim_sm_latency_tim_val_in      =       wbu_latency_tim_val_in ;
742
wire [31:0] pcim_sm_next_data_in            =       pcim_if_next_data_out ;
743
wire [3:0]  pcim_sm_next_be_in              =       pcim_if_next_be_out ;
744
wire        pcim_sm_next_last_in            =       pcim_if_next_last_out ;
745
wire        pcim_sm_trdy_reg_in             =       wbu_pciif_trdy_reg_in ;
746
wire        pcim_sm_stop_reg_in             =       wbu_pciif_stop_reg_in ;
747
wire        pcim_sm_devsel_reg_in           =       wbu_pciif_devsel_reg_in ;
748
wire        pcim_sm_frame_en_in             =       wbu_pciif_frame_en_in ;
749
wire        pcim_sm_frame_out_in            =       wbu_pciif_frame_out_in ;
750
 
751
PCI_MASTER32_SM pci_initiator_sm
752
(
753
    .clk_in             (pci_clock_in),
754
    .reset_in           (reset_in),
755
    .pci_req_out        (pcim_sm_req_out),
756
    .pci_gnt_in         (pcim_sm_gnt_in),
757
    .pci_frame_in       (pcim_sm_frame_in),
758
    .pci_frame_out      (pcim_sm_frame_out),
759
    .pci_frame_en_out   (pcim_sm_frame_en_out),
760
    .pci_frame_out_in   (pcim_sm_frame_out_in),
761
    .pci_frame_load_out (pcim_sm_frame_load_out),
762
    .pci_frame_en_in    (pcim_sm_frame_en_in),
763
    .pci_irdy_in        (pcim_sm_irdy_in),
764
    .pci_irdy_out       (pcim_sm_irdy_out),
765
    .pci_irdy_en_out    (pcim_sm_irdy_en_out),
766
    .pci_trdy_in        (pcim_sm_trdy_in),
767
    .pci_trdy_reg_in    (pcim_sm_trdy_reg_in),
768
    .pci_stop_in        (pcim_sm_stop_in),
769
    .pci_stop_reg_in    (pcim_sm_stop_reg_in),
770
    .pci_devsel_in      (pcim_sm_devsel_in),
771
    .pci_devsel_reg_in  (pcim_sm_devsel_reg_in),
772
    .pci_ad_reg_in      (pcim_sm_ad_reg_in),
773
    .pci_ad_out         (pcim_sm_ad_out),
774
    .pci_ad_en_out      (pcim_sm_ad_en_out),
775
    .pci_cbe_out        (pcim_sm_cbe_out),
776
    .pci_cbe_en_out     (pcim_sm_cbe_en_out),
777
    .address_in         (pcim_sm_address_in),
778
    .bc_in              (pcim_sm_bc_in),
779
    .data_in            (pcim_sm_data_in),
780
    .data_out           (pcim_sm_data_out),
781
    .be_in              (pcim_sm_be_in),
782
    .req_in             (pcim_sm_req_in),
783
    .rdy_in             (pcim_sm_rdy_in),
784
    .last_in            (pcim_sm_last_in),
785
    .latency_tim_val_in (pcim_sm_latency_tim_val_in),
786
    .next_data_in       (pcim_sm_next_data_in),
787
    .next_be_in         (pcim_sm_next_be_in),
788
    .next_last_in       (pcim_sm_next_last_in),
789
    .load_next_out      (pcim_sm_load_next_out),
790
    .wait_out           (pcim_sm_wait_out),
791
    .wtransfer_out      (pcim_sm_wtransfer_out),
792
    .rtransfer_out      (pcim_sm_rtransfer_out),
793
    .retry_out          (pcim_sm_retry_out),
794
    .werror_out         (pcim_sm_werror_out),
795
    .rerror_out         (pcim_sm_rerror_out),
796
    .first_out          (pcim_sm_first_out),
797
    .mabort_out         (pcim_sm_mabort_out)
798
) ;
799
 
800
endmodule

powered by: WebSVN 2.1.0

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