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

Subversion Repositories pci

[/] [pci/] [tags/] [rel_7/] [bench/] [verilog/] [pci_blue_arbiter.v] - Blame information for rev 15

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

Line No. Rev Author Line
1 15 mihad
//===========================================================================
2
// $Id: pci_blue_arbiter.v,v 1.1 2002-02-01 13:39:43 mihad Exp $
3
//
4
// Copyright 2001 Blue Beaver.  All Rights Reserved.
5
//
6
// Summary:  A synthesizable PCI Arbiter.  This will have 4 external PCI
7
//           Request/Grant pairs and one internal Request/Grant Pair.
8
//           A Compile-time option selects whether to include an un-latched
9
//           IRDY_L signal ithe arbitration.  This might make the bus use
10
//           slightly more efficient.  But there would be more load in
11
//           IRDY_L, a very timing critical signal.  Not sure which is best.
12
//
13
// This library is free software; you can distribute it and/or modify it
14
// under the terms of the GNU Lesser General Public License as published
15
// by the Free Software Foundation; either version 2.1 of the License, or
16
// (at your option) any later version.
17
//
18
// This library is distributed in the hope that it will be useful, but
19
// WITHOUT ANY WARRANTY; without even the implied warranty of
20
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21
// See the GNU Lesser General Public License for more details.
22
//
23
// You should have received a copy of the GNU Lesser General Public License
24
// along with this library.  If not, write to
25
// Free Software Foundation, Inc.
26
// 59 Temple Place, Suite 330
27
// Boston, MA 02111-1307 USA
28
//
29
// Author's note about this license:  The intention of the Author and of
30
// the Gnu Lesser General Public License is that users should be able to
31
// use this code for any purpose, including combining it with other source
32
// code, combining it with other logic, translated it into a gate-level
33
// representation, or projected it into gates in a programmable or
34
// hardwired chip, as long as the users of the resulting source, compiled
35
// source, or chip are given the means to get a copy of this source code
36
// with no new restrictions on redistribution of this source.
37
//
38
// If you make changes, even substantial changes, to this code, or use
39
// substantial parts of this code as an inseparable part of another work
40
// of authorship, the users of the resulting IP must be given the means
41
// to get a copy of the modified or combined source code, with no new
42
// restrictions on redistribution of the resulting source.
43
//
44
// Separate parts of the combined source code, compiled code, or chip,
45
// which are NOT derived from this source code do NOT need to be offered
46
// to the final user of the chip merely because they are used in
47
// combination with this code.  Other code is not forced to fall under
48
// the GNU Lesser General Public License when it is linked to this code.
49
// The license terms of other source code linked to this code might require
50
// that it NOT be made available to users.  The GNU Lesser General Public
51
// License does not prevent this code from being used in such a situation,
52
// as long as the user of the resulting IP is given the means to get a
53
// copy of this component of the IP with no new restrictions on
54
// redistribution of this source.
55
//
56
// This code was developed using VeriLogger Pro, by Synapticad.
57
// Their support is greatly appreciated.
58
//
59
// NOTE:  This PCI Arbiter is an implementation of the arbiter ideas
60
//        described in the PCI Local Bus Specification Revision 2.2,
61
//        section 3.4.
62
//
63
// NOTE:  This arbiter serves 4 external Request/Grant pairs and one
64
//        internal Request/Grant pair.  It would be attractive to
65
//        try to implement the 2-level arbitration given in the
66
//        implementation note.
67
//
68
// NOTE:  Upon Reset, this Arbiter parks the bus on the Internal Grant.
69
//
70
// NOTE:  The 4 arbitration rules given in the PCI Local Bus Specification
71
//        Revision 2.2, section 3.4.1, are:
72
//        0) Be fair.  Do not starve anyone.  However, priorities are OK.
73
//        1) If GNT_L is Deasserted and FRAME_L is asserted on the same
74
//           clock, a valid reference is started
75
//        2) One GNT_L can be deasserted the same clock which another
76
//           GNT_L is asserted if NOT in Idle state.  If in Idle state,
77
//           one clock with no GNT at all must be inserted to avoid
78
//           contention on the AD and PAR lines.
79
//        3) When FRAME_L is deasserted, GNT_L may be deasserted at
80
//           any time.
81
//
82
// NOTE:  The arbiter can assume a device is "broken" if it receives REQ,
83
//        assertes GNT, and no FRAME is asserted, for 16 clocks.  It is legal
84
//        to ignore that device's REQ signal after that, and report the
85
//        problem to the host.  This device just moves on to the next REQ.
86
//
87
// NOTE:  When the Arbiter is on-chip, the FRAME signal must NOT be the
88
//        external FRAME signal when the internam PCI device is driving
89
//        the bus.  In the case that the internal device is driving the
90
//        bus, the INTERNAL FRAME signal must be used.  This is due to
91
//        time-of-flight concerns on the external PCI bus.  See the PCI
92
//        Local Bus Specification Revision 2.2, section 3.10 item 9.
93
//
94
// NOTE:  It is not clear when a change in bus ownership should occur.
95
//        This arbiter grants a device the bus, and then waits until
96
//        the device has started a reference before granting to a new
97
//        device.  If no other requests are pending, the grant stays put.
98
//
99
//===========================================================================
100
 
101
`timescale 1ns/1ps
102
 
103
// Allows printing of Arbiter Debug info.  Usually not defined
104
//`define PCI_TRACE_ARB 1
105
 
106
module pci_blue_arbiter (
107
  pci_int_req_direct, pci_ext_req_prev,
108
  pci_int_gnt_direct_out, pci_ext_gnt_direct_out,
109
  pci_frame_prev, pci_irdy_prev, pci_irdy_now,
110
  arbitration_enable,
111
  pci_clk, pci_reset_comb
112
);
113
 
114
`include "pci_blue_options.vh"
115
`include "pci_blue_constants.vh"
116
 
117
  input   pci_int_req_direct;  // direct from internal flop clocked with pci_clk
118
  input  [3:0] pci_ext_req_prev;
119
  output  pci_int_gnt_direct_out;
120
  output [3:0] pci_ext_gnt_direct_out;
121
  input   pci_frame_prev, pci_irdy_prev, pci_irdy_now;
122
  input   arbitration_enable;
123
  input   pci_clk, pci_reset_comb;
124
 
125
// detect the deassertion of reset, hopefully without metastability
126
  reg     prev_unreset, prev_prev_unreset;
127
  reg     arbiter_init;
128
  always @(posedge pci_clk or posedge pci_reset_comb)
129
  begin
130
    if (pci_reset_comb)
131
    begin
132
      prev_unreset <= 1'b0;
133
      prev_prev_unreset <= 1'b0;
134
      arbiter_init <= 1'b0;
135
    end
136
    else
137
    begin
138
      prev_unreset <= 1'b1;
139
      prev_prev_unreset <= prev_unreset;
140
// init arbiter when reset goes away, or when user disables arbiter
141
      arbiter_init <= ~prev_prev_unreset | ~arbitration_enable;
142
    end
143
  end
144
 
145
// watch for bus activity.
146
  reg     prev_prev_frame;
147
  always @(posedge pci_clk)
148
  begin
149
    prev_prev_frame <= pci_frame_prev;
150
  end
151
 
152
// approximate, but always conservative
153
//  wire    pci_bus_not_idle = pci_frame_prev;
154
// expensive because irdy is critical
155
`define INCLUDE_FAST_IRDY_INPUT
156
`ifdef INCLUDE_FAST_IRDY_INPUT
157
  wire    pci_bus_not_idle = pci_frame_prev | pci_irdy_now;
158
`else // INCLUDE_FAST_IRDY_INPUT
159
  wire    pci_bus_not_idle = pci_frame_prev;
160
`endif // INCLUDE_FAST_IRDY_INPUT
161
  wire    pci_bus_went_idle = ~pci_frame_prev & ~pci_irdy_prev;
162
  wire    pci_address_phase =  pci_frame_prev & ~prev_prev_frame;
163
 
164
// upon assertion of reset, remove all bus grants.
165
//   note that the PCI Local Bus Specification Revision 2.2,
166
//   section 2.2.4, says the devices must ignore GNT_L when
167
//   reset is asserted, no matter what it's value is.
168
// upon reset, all requests are pulled HIGH by motherboard pullups,
169
//   because upon reset, all PCI devices are supposed to HIGH-Z
170
//   their request lines.  See the PCI Local Bus Specification
171
//   Revision 2.2, section 2.2.4.  The internal device cannot
172
//   be tristated,  Instead, it de-requests.
173
// upon deassertion of reset, park the bus on the internal device.
174
//   note that the bus parking will not happen if the PCI Clock is
175
//   not running.
176
// after initialization, the bus is parked at the last bus user.
177
 
178
// round_robin arbitration.  No priorities or anything.
179
// Note this can change constantly as new requests come in
180
  reg [4:0] prev_master;  // remembered from last good arbitration
181
  wire [4:0] present_requestors = {pci_ext_req_prev[3:0], pci_int_req_direct};
182
  wire [4:0] no_master = 5'h00;
183
  wire [4:0] internal_master = 5'h01;
184
 
185
  wire     New_Master_Wants_Bus =
186
                   (present_requestors != 5'h00)
187
                && (present_requestors != prev_master);
188
  wire     New_Master_Stopped_Requesting =
189
                  ((present_requestors & prev_master) == 5'h00);
190
 
191
  wire [4:0] next_master =
192
            ((prev_master == 5'h00) || (prev_master == 5'h01))
193
             ? (    (present_requestors[1]) ? 5'h02
194
                 : ((present_requestors[2]) ? 5'h04
195
                 : ((present_requestors[3]) ? 5'h08
196
                 : ((present_requestors[4]) ? 5'h10
197
                 : 5'h01))))
198
             : ((prev_master == 5'h02)
199
                 ? (    (present_requestors[2]) ? 5'h04
200
                     : ((present_requestors[3]) ? 5'h08
201
                     : ((present_requestors[4]) ? 5'h10
202
                     : ((present_requestors[0]) ? 5'h01
203
                     : 5'h02))))
204
                 : ((prev_master == 5'h04)
205
                     ? (    (present_requestors[3]) ? 5'h08
206
                         : ((present_requestors[4]) ? 5'h10
207
                         : ((present_requestors[0]) ? 5'h01
208
                         : ((present_requestors[1]) ? 5'h02
209
                         : 5'h04))))
210
                     : ((prev_master == 5'h08)
211
                         ? (    (present_requestors[4]) ? 5'h10
212
                             : ((present_requestors[0]) ? 5'h01
213
                             : ((present_requestors[1]) ? 5'h02
214
                             : ((present_requestors[2]) ? 5'h04
215
                             : 5'h08))))
216
                         :  // ((prev_master == 5'h10) || (more than 1 bit set)) ?
217
                               (    (present_requestors[0]) ? 5'h01
218
                                 : ((present_requestors[1]) ? 5'h02
219
                                 : ((present_requestors[2]) ? 5'h04
220
                                 : ((present_requestors[3]) ? 5'h08
221
                                 : 5'h10))))
222
               )   )   );
223
 
224
// state machine moves to next state when a new request is available and
225
// the previous grent has resulted in a memory reference, or when the
226
// bus has been idle too long.
227
//
228
// When the PCI Bus is not Idle, it is fine to deassert one grant and
229
// assert another the next clock.  If the bus is NOT Idle, there must be
230
// a one clock delay between the deassertion of one GNT and the next GNT.
231
// Refer to the PCI Local Bus Specification Revision 2.2, section 3.4.1.
232
//
233
// In order to remove any dependence on the IRDY and TRDY signals directly
234
// received from the PCI Bus, this arbiter uses the latched versions.
235
// The PCI Bus is Idle whenever BOTH FRAME and IRDY are deasserted.  This
236
// arbiter uses an approximation of that.  It uses the Latched FRAME
237
// signal alone.  This is not too bad, because each reference ends with
238
// FRAME going deasserted and IRDY going asserted for at least one clock.
239
// Latched FRAME is valid for 1 clock after Frame goes away, which is
240
// automatically also a non-idle clock.  Latched FRAME is a conservative
241
// estimate of whether the bus is idle or not.  When Latched FRAME is
242
// not asserted, the Arbiter will deassert all GNT signals for one clock
243
// before asserting a new GNT.
244
//
245
// The event sequence is as follows:
246
// 1) at time minus infinity, some device gets bus mastership
247
// 2) at time before 0, the arbiter decides the first device is done
248
// 3) at time -1, a new device requests
249
// 4) at time 0, the old device is ungranted, and the new device is granted
250
// 5) at time 0, the old device might start a new reference or continue an old one
251
// 6) at time 1, the new device gets a chance to see the grant
252
// 7) at time 1, the new device can drive the bus ONLY if it is idle
253
// 8) at time 2, the arbiter sees whether the bus was idle at time 1
254
//    from time 2 on, it watches to see when the bus finally goes idle
255
// 9) whenever the arbiter sees the bus going idle, it starts counting
256
//    a counter to 16.  It also watches for a transition on frame indicating
257
//    that an address phase has happened.
258
// 10) when the timer expires or the address phase happens, the arbiter
259
//    rearbitrates to give the next requestor a chance. 
260
 
261
  parameter PCI_ARBITER_HAPPILY_WAITING  = 5'b00001;
262
  parameter PCI_ARBITER_REMOVE_GNT       = 5'b00010;
263
  parameter PCI_ARBITER_DELAY_ONE        = 5'b00100;
264
  parameter PCI_ARBITER_WAIT_FOR_IDLE    = 5'b01000;
265
  parameter PCI_ARBITER_WAIT_FOR_ADDRESS = 5'b10000;
266
  reg [4:0] PCI_Arbiter_State;
267
 
268
  reg [4:0] new_master;
269
  reg [3:0] gnt_timeout;
270
  always @(posedge pci_clk or posedge pci_reset_comb)
271
  begin
272
    if (pci_reset_comb)
273
    begin
274
      PCI_Arbiter_State <= PCI_ARBITER_HAPPILY_WAITING;
275
      prev_master <= no_master;
276
      new_master  <= no_master;
277
      gnt_timeout <= 4'h0;
278
    end
279
    else
280
    begin
281
      if (arbiter_init)
282
      begin
283
        PCI_Arbiter_State <= PCI_ARBITER_HAPPILY_WAITING;
284
        prev_master <= internal_master;
285
        new_master  <= internal_master;
286
        gnt_timeout <= 4'h0;
287
      end
288
      else
289
      begin
290
        case (PCI_Arbiter_State)
291
        PCI_ARBITER_HAPPILY_WAITING:
292
          begin
293
            gnt_timeout <= 4'h0;  // all cases
294
            if (New_Master_Wants_Bus)
295
            begin
296
              if (pci_bus_not_idle)
297
              begin  // directly grant new bus owner
298
                PCI_Arbiter_State <= PCI_ARBITER_DELAY_ONE;
299
                prev_master <= next_master;
300
                new_master  <= next_master;
301
              end
302
              else
303
              begin  // case that bus is idle.  make no grant for 1 clock
304
                PCI_Arbiter_State <= PCI_ARBITER_REMOVE_GNT;
305
                prev_master <= prev_master;
306
                new_master  <= no_master;
307
              end
308
            end
309
            else
310
            begin  // no requestor or same requestor.  Park on previous winner
311
              PCI_Arbiter_State <= PCI_ARBITER_HAPPILY_WAITING;
312
              prev_master <= prev_master;
313
              new_master  <= prev_master;
314
            end
315
          end
316
        PCI_ARBITER_REMOVE_GNT:
317
          begin
318
            if (New_Master_Wants_Bus)
319
            begin  // directly grant new bus owner
320
              PCI_Arbiter_State <= PCI_ARBITER_DELAY_ONE;
321
              prev_master <= next_master;
322
              new_master  <= next_master;
323
            end
324
            else
325
            begin  // requestor gave up.  Park on previous winner
326
              PCI_Arbiter_State <= PCI_ARBITER_HAPPILY_WAITING;
327
              prev_master <= prev_master;
328
              new_master  <= prev_master;
329
            end
330
          end
331
        PCI_ARBITER_DELAY_ONE:
332
          begin  // wait for pipelined copy of FRAME, IRDY to become valid
333
            prev_master <= prev_master;  // all cases
334
            new_master  <= prev_master;  // all cases
335
            gnt_timeout <= 4'h0;         // all cases
336
            if (New_Master_Stopped_Requesting)
337
            begin  // requestor removed request!  Never happens.  Rearb immediately.
338
              PCI_Arbiter_State <= PCI_ARBITER_HAPPILY_WAITING;
339
            end
340
            else
341
            begin  // start looking for bus idle, when new master takes over
342
              PCI_Arbiter_State <= PCI_ARBITER_WAIT_FOR_IDLE;
343
            end
344
          end
345
        PCI_ARBITER_WAIT_FOR_IDLE:
346
          begin  // A new master is granted, but can't start until the PCI bus is idle
347
            prev_master <= prev_master;  // all cases
348
            new_master  <= prev_master;  // all cases
349
            gnt_timeout <= 4'h0;         // all cases
350
            if (New_Master_Stopped_Requesting)
351
            begin  // requestor removed request!  Never happens.  Rearb immediately.
352
              PCI_Arbiter_State <= PCI_ARBITER_HAPPILY_WAITING;
353
            end
354
            else
355
            begin
356
              if (pci_bus_went_idle)
357
              begin  // now the new master can take control by driving an address
358
                PCI_Arbiter_State <= PCI_ARBITER_WAIT_FOR_ADDRESS;
359
              end
360
              else
361
              begin  // wait for old master to release bus
362
                PCI_Arbiter_State <= PCI_ARBITER_WAIT_FOR_IDLE;
363
              end
364
            end
365
          end
366
        PCI_ARBITER_WAIT_FOR_ADDRESS:
367
          begin
368
            gnt_timeout <= gnt_timeout + 4'h1;  // all cases
369
            if (New_Master_Stopped_Requesting)
370
            begin  // requestor removed request!  Never happens.  Rearb immediately.
371
              PCI_Arbiter_State <= PCI_ARBITER_HAPPILY_WAITING;
372
              prev_master <= prev_master;
373
              new_master  <= prev_master;
374
            end
375
            else
376
            begin
377
              if (pci_address_phase || (gnt_timeout == 4'hF))
378
              begin
379
`ifdef INCLUDE_FAST_IRDY_ON_IDLE_TERM
380
// This term makes some improvement in arbitration timing, but not sure how
381
// much.  With the term, certain wait states at the end of single-word or burst
382
// transfers are eliminated.  The arbitration time in the case of a genuinely
383
// idle bus isn't changed however.  Presently not using this.
384
                if (New_Master_Wants_Bus)
385
                begin   // safe to rearbitrate.  Is anyone waiting?
386
                  if (pci_bus_not_idle)  // bus is busy, switch instantly
387
                  begin
388
                    PCI_Arbiter_State <= PCI_ARBITER_DELAY_ONE;
389
                    prev_master <= next_master;
390
                    new_master  <= next_master;
391
                  end
392
                  else  // bus is idle, force an idle period
393
                  begin
394
                    PCI_Arbiter_State <= PCI_ARBITER_REMOVE_GNT;
395
                    prev_master <= prev_master;
396
                    new_master  <= no_master;
397
                  end
398
                end
399
                else
400
`endif // INCLUDE_FAST_IRDY_ON_IDLE_TERM
401
                begin  // no requestor or same requestor.  Park on previous winner
402
                  PCI_Arbiter_State <= PCI_ARBITER_HAPPILY_WAITING;
403
                  prev_master <= prev_master;
404
                  new_master  <= prev_master;
405
                end
406
              end
407
              else
408
              begin  // no addres phase or timeout yet.  Just keep looking
409
                PCI_Arbiter_State <= PCI_ARBITER_WAIT_FOR_ADDRESS;
410
                prev_master <= prev_master;
411
                new_master  <= prev_master;
412
              end
413
            end
414
          end
415
        default:
416
          begin
417
            PCI_Arbiter_State <= PCI_ARBITER_HAPPILY_WAITING;
418
            prev_master <= internal_master;
419
            new_master  <= internal_master;
420
            gnt_timeout <= 4'h0;
421
          end
422
        endcase
423
      end
424
    end
425
  end
426
 
427
  assign pci_int_gnt_direct_out = new_master[0];
428
  assign pci_ext_gnt_direct_out = new_master[4:1];
429
 
430
// synopsys translate_off
431
`ifdef PCI_TRACE_ARB
432
  always @(posedge pci_clk or posedge pci_reset_comb)
433
  begin
434
    if (pci_reset_comb)
435
    begin
436
      $display ("async reset");
437
    end
438
    else
439
    begin
440
      if (arbiter_init)
441
      begin
442
        $display ("sync reset");
443
      end
444
      else
445
      begin
446
        case (PCI_Arbiter_State)
447
        PCI_ARBITER_HAPPILY_WAITING:
448
          begin
449
            if (New_Master_Wants_Bus)
450
            begin  // new requestor.  Either ungrant for 1 clock if idle or go directly
451
              if (pci_bus_not_idle)  // indication that bus is busy
452
              begin
453
               $display ("Waiting, New Master, Bus Not Idle %x %x",
454
                          present_requestors, prev_master);
455
              end
456
              else
457
              begin  // case that bus is idle.  make no grant for 1 clock
458
               $display ("Waiting, New Master, Bus Idle %x %x",
459
                          present_requestors, prev_master);
460
              end
461
            end
462
            else
463
            begin  // no reason to change.  Park on previous winner
464
             $display ("Waiting, No New Master %x %x",
465
                        present_requestors, prev_master);
466
            end
467
          end
468
        PCI_ARBITER_REMOVE_GNT:
469
          begin  // pick the new winner, or the previous winner if the requestor left
470
            if (New_Master_Wants_Bus)
471
            begin  // new requestor wins.  Wait for it's reference before rearbitrating
472
             $display ("Remove Gnt, New Master still requesting %x %x",
473
                        present_requestors, prev_master);
474
            end
475
            else
476
            begin  // no reason to change.  Park on previous winner
477
             $display ("Remove Gnt, New Master removed request %x %x",
478
                        present_requestors, prev_master);
479
            end
480
          end
481
        PCI_ARBITER_DELAY_ONE:
482
          begin  // wait for pipelined copy of FRAME, IRDY to become valid
483
            $display ("Delay 1, wait for Frame and IRDY pipeline %x %x",
484
                       present_requestors, prev_master);
485
          end
486
        PCI_ARBITER_WAIT_FOR_IDLE:
487
          begin  // A new master is granted, but can't start until the PCI bus is idle
488
            if (New_Master_Stopped_Requesting)
489
            begin  // requestor removed request!  Never happens.  Rearb immediately.
490
             $display ("Waiting for Idle, New Master removed request %x %x",
491
                        present_requestors, prev_master);
492
            end
493
            else
494
            begin
495
              if (pci_bus_went_idle)
496
              begin  // now the new master can take control
497
               $display ("Waiting for Idle, went idle, New Master still requesting %x %x",
498
                          present_requestors, prev_master);
499
              end
500
              else
501
              begin  // wait for old master to release bus
502
               $display ("Waiting for Idle, not idle, New Master still requesting %x %x",
503
                          present_requestors, prev_master);
504
              end
505
            end
506
          end
507
        PCI_ARBITER_WAIT_FOR_ADDRESS:
508
          begin
509
            if (New_Master_Stopped_Requesting)
510
            begin  // requestor removed request!  Never happens.  Rearb immediately.
511
             $display ("Waiting for Address, New Master removed request %x %x",
512
                        present_requestors, prev_master);
513
            end
514
            else
515
            begin
516
              if ((pci_address_phase == 1'b1) || (gnt_timeout == 4'hF))
517
              begin  // safe to rearbitrate.  Is anyone waiting?
518
                if (New_Master_Wants_Bus)
519
                begin
520
                  if (pci_bus_not_idle) // bus is busy, switch instantly
521
                  begin
522
                   $display ("Waiting for Address, Address or Timeout, New Master still requesting, bus was busy %x %x",
523
                              present_requestors, prev_master);
524
                  end
525
                  else  // bus is idle, force an idle period
526
                  begin
527
                   $display ("Waiting for Address, Address or Timeout, New Master still requesting, bus was idle %x %x",
528
                              present_requestors, prev_master);
529
                  end
530
                end
531
                else
532
                begin  // no reason to change.  Park on previous winner
533
                  $display ("Waiting for Address, No New Master, giving up %x %x",
534
                             present_requestors, prev_master);
535
                end
536
              end
537
              else
538
              begin
539
                $display ("Waiting for Address, New Master still requesting, no address or timeout yet %x %x",
540
                           present_requestors, prev_master);
541
              end
542
            end
543
          end
544
        default:
545
          begin
546
            $display ("PCI Arbiter went insane with REQ 'h%x at time %t",
547
                       present_requestors, $time);
548
          end
549
        endcase
550
      end
551
    end
552
  end
553
`endif // PCI_TRACE_ARB
554
// synopsys translate_on
555
endmodule
556
 

powered by: WebSVN 2.1.0

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