![]() |
|
|
The PCI Local Bus is a high performance bus for interconnecting chips, expansion boards, and processor/memory subsystems. It originated at Intel in the early 1990s as a standard method of interconnecting chips on a board. It was later adopted as an industry standard administered by the PCI Special Interest Group, or "PCI SIG". Under the PCI SIG the definition of PCI was extended to define a standard expansion bus interface connector for add-in boards.
PCI was first adopted for use in personal computers in about 1994 with Intel's introduction of the "Saturn" chipset and "Alfredo" motherboard for the 486 processor. With introduction of chipsets and motherboards for the Intel Pentium processor, PCI largely replaced earlier bus architectures such as EISA, VL, and Micro Channel. The ISA bus has initially continued to co-exist with PCI for support of "legacy" add-in boards that don't require the high performance of the PCI bus. But as legacy boards are redesigned, PCI is expected to completely replace ISA as well.
On September 11, 1998 the PCI SIG announced that Compaq, Hewlett-Packard, and IBM had submitted a new specification for review called "PCI-X". The proposed standard allows for increases in PCI bus speed up to 133 MHz. It also includes suggested changes in the PCI communications protocol affecting data transfer rates and electrical timing requirements. The PCI-SIG has approved the formation of a working group to review the proposal.
The PCI SIG also maintains the following PCI related documents:
PCI is a synchronous bus architecture with all data transfers being performed relative to a system clock (CLK). The initial PCI specification permitted a maximum clock rate of 33 MHz allowing one bus transfer to be performed every 30 nanoseconds. Later, Revision 2.1 of the PCI specification extended the bus definition to support operation at 66 MHz, but the vast majority of today's personal computers continue to implement a PCI bus that runs at a maximum speed of 33 MHz.
PCI implements a 32-bit multiplexed Address and Data bus (AD[31:0]). It architects a means of supporting a 64-bit data bus through a longer connector slot, but most of today's personal computers support only 32-bit data transfers through the base 32-bit PCI connector. At 33 MHz, a 32-bit slot supports a maximum data transfer rate of 132 MBytes/sec, and a 64-bit slot supports 264 MBytes/sec.
The multiplexed Address and Data bus allows a reduced pin count on the PCI connector that enables lower cost and smaller package size for PCI components. Typical 32-bit PCI add-in boards use only about 50 signals pins on the PCI connector of which 32 are the multiplexed Address and Data bus. PCI bus cycles are initiated by driving an address onto the AD[31:0] signals during the first clock edge called the address phase. The address phase is signaled by the activation of the FRAME# signal. The next clock edge begins the first of one or more data phases in which data is transferred over the AD[31:0] signals.
In PCI terminology, data is transferred between an initiator which is the bus master, and a target which is the bus slave. The initiator drives the C/BE[3:0]# signals during the address phase to signal the type of transfer (memory read, memory write, I/O read, I/O write, etc.). During data phases the C/BE[3:0]# signals serve as byte enable to indicate which data bytes are valid. Both the initiator and target may insert wait states into the data transfer by deasserting the IRDY# and TRDY# signals. Valid data transfers occur on each clock edge in which both IRDY# and TRDY# are asserted.
A PCI bus transfer consists of one address phase and any number of data phases. I/O operations that access registers within PCI targets typically have only a single data phase. Memory transfers that move blocks of data consist of multiple data phases that read or write multiple consecutive memory locations. Both the initiator and target may terminate a bus transfer sequence at any time. The initiator signals completion of the bus transfer by deasserting the FRAME# signal during the last data phase. A target may terminate a bus transfer by asserting the STOP# signal. When the initiator detects an active STOP# signal, it must terminate the current bus transfer and re-arbitrate for the bus before continuing. If STOP# is asserted without any data phases completing, the target has issued a retry. If STOP# is asserted after one or more data phases have successfully completed, the target has issued a disconnect.
Initiators arbitrate for ownership of the bus by asserting a REQ# signal to a central arbiter. The arbiter grants ownership of the bus by asserting the GNT# signal. REQ# and GNT# are unique on a per slot basis allowing the arbiter to implement a bus fairness algorithm. Arbitration in PCI is "hidden" in the sense that it does not consume clock cycles. The current initiator's bus transfers are overlapped with the arbitration process that determines the next owner of the bus.
PCI supports a rigorous auto configuration mechanism. Each PCI device includes a set of configuration registers that allow identification of the type of device (SCSI, video, Ethernet, etc.) and the company that produced it. Other registers allow configuration of the device's I/O addresses, memory addresses, interrupt levels, etc.
Although it is not widely implemented, PCI supports 64-bit addressing. Unlike the 64-bit data bus option which requires a longer connector with an additional 32-bits of data signals, 64-bit addressing can be supported through the base 32-bit connector. Dual Address Cycles are issued in which the low order 32-bits of the address are driven onto the AD[31:0] signals during the first address phase, and the high order 32-bits of the address (if non-zero) are driven onto the AD[31:0] signals during a second address phase. The remainder of the transfer continues like a normal bus transfer.
PCI defines support for both 5 Volt and 3.3 Volt signaling levels. The PCI connector defines pin locations for both the 5 Volt and 3.3 Volt levels. However, most early PCI systems were 5 Volt only, and did not provide active power on the 3.3 Volt connector pins. Over time more use of the 3.3 Volt interface is expected, but add-in boards which must work in older legacy systems are restricted to using only the 5 Volt supply. A "keying" scheme is implemented in the PCI connectors to prevent inserting an add-in board into a system with incompatible supply voltage.
Although used most extensively in PC compatible systems, the PCI bus architecture is processor independent. PCI signal definitions are generic allowing the bus to be used in systems based on other processor families.
PCI includes strict specifications to ensure the signal quality required for operation at 33 and 66 MHz. Components and add-in boards must include unique bus drivers that are specifically designed for use in a PCI bus environment. Typical TTL devices used in previous bus implementations such as ISA and EISA are not compliant with the requirements of PCI. This restriction along with the high bus speed dictates that most PCI devices are implemented as custom ASICs.
The higher speed of PCI limits the number of expansion slots on a single bus to no more than 3 or 4, as compared to 6 or 7 for earlier bus architectures. To permit expansion buses with more than 3 or 4 slots, the PCI SIG has defined a PCI-to-PCI Bridge mechanism. PCI-to-PCI Bridges are ASICs that electrically isolate two PCI buses while allowing bus transfers to be forwarded from one bus to another. Each bridge device has a "primary" PCI bus and a "secondary" PCI bus. Multiple bridge devices may be cascaded to create a system with many PCI buses.
Required Pins Optional Pins
------------- -------------
----------------
| |
<===AD[31:0]=====>| |<===AD[63:32]====>
<===C/BE[3:0]#===>| PCI |<===C/BE[7:4]#===>
<---PAR---------->| Compliant |<---PAR64-------->
| Device |<---REQ64#------->
<---FRAME#------->| |<---ACK64#------->
<---TRDY#-------->| |
<---IRDY#-------->| |<---LOCK#-------->
<---STOP#-------->| |
<---DEVSEL#------>| |----INTA#-------->
----IDSEL-------->| |----INTB#-------->
| |----INTC#-------->
<---PERR#-------->| |----INTD#-------->
<---SERR#-------->| |
| |<---SBO#--------->
<---REQ#----------| |<---SDONE-------->
----GNT#--------->| |
| |<---TDI-----------
----CLK---------->| |----TDO---------->
----RST#--------->| |<---TCK-----------
| |<---TMS-----------
| |<---TRST#---------
----------------
| C/BE[3:0]# | Command Types |
| 0000 | Interrupt Acknowledge |
| 0001 | Special Cycle |
| 0010 | I/O Read |
| 0011 | I/O Write |
| 0100 | Reserved |
| 0101 | Reserved |
| 0110 | Memory Read |
| 0111 | Memory Write |
| 1000 | Reserved |
| 1001 | Reserved |
| 1010 | Configuration Read |
| 1011 | Configuration Write |
| 1100 | Memory Read Multiple |
| 1101 | Dual Address Cycle |
| 1110 | Memory Read Line |
| 1111 | Memory Write and Invalidate |
These pins are architected to permit cacheable memory to be implemented on a PCI bus. They transfer status information between the bridge/cache and the target of the memory request. If a PCI transaction results in a hit on a "dirty" cache line, the bridge/cache will signal "snoop backoff" to the cacheable target. As a result, the target will issue retries on all accesses to the modified cache line until the bridge/cache completes a writeback operation. The target will then permit the access to complete.
These cache support pins are rarely if ever implemented in today's PCI systems. For performance reasons, cacheable memory is typically coupled very closely with a host processor bus that runs at a higher frequency than PCI.
| PRSNT1# | PRSNT2# | Add-in Board Configuration |
| Open | Open | No board present |
| Ground | Open | Board present, 25W maximum |
| Open | Ground | Board present, 15W maximum |
| Ground | Ground | Board present, 7.5W maximum |
PCI devices may optionally support JTAG/Boundary Scan as defined in IEEE Standard 1149.1, Test Access Port and Boundary Scan Architecture. JTAG allows components installed on a PCI add-in board to be exhaustively tested by serially scanning test patterns through each component. The following signals are defined by the JTAG standard. If JTAG is not implemented by an add-in board, the TDI and TDO signals must be connected to preserve the scan path.
The following timing diagram illustrates a read transaction on the PCI bus:
1__ 2__ 3__ 4__ 5__ 6__ 7__ 8__ 9__
CLK __| |__| |__| |__| |__| |__| |__| |__| |__|
____ ____________
FRAME# |___________________________________|
_____ _____ _____ ____ __________
AD ----<_____>-----<_____>_____><____><__________>------
Address Data1 Data2 Data3
_____ __________________________________
C/BE# ----<_____><__________________________________>------
Bus-Cmd BE#'s
__________ _____ ______
IRDY# |_______________________| |_____|
________________ _____ ______
TRDY# |_____| |_________________|
________________ ______
DEVSEL# |_____|_____________________________|
|<--->|<--------->|<--------->|<--------->|
Address Data Data Data
Phase Phase Phase Phase
|<--------------------------------------->|
Bus Transaction
The following is a cycle by cycle description of the read transaction:
The following timing diagram illustrates a write transaction on the PCI bus:
1__ 2__ 3__ 4__ 5__ 6__ 7__ 8__ 9__
CLK __| |__| |__| |__| |__| |__| |__| |__| |__|
____ ________________________
FRAME# |_______________________|
_____ ____ ____ _____ _____________
AD ----<_____><____><____>_____><_____________>---------
Address Data1 Data2 Data3
_____ ____ ____ ______________________
C/BE# ----<_____><____><____><______________________>------
Bus-Cmd BE-1 BE-2 BE-3
__________ _____ ______
IRDY# |___________| |_________________|
__________ _________________ ______
TRDY# |___________| |_____|
________________ ______
DEVSEL# |_____|_____________________________|
|<--->|<--->|<--->|<--------------------->|
Address Data Data Data
Phase Phase Phase Phase
|<--------------------------------------->|
Bus Transaction
The following is a cycle by cycle description of the read transaction:
The following table illustrates the pinout definition for the PCI connector. The PCI specification defines two types of connectors that may be implemented at the system board level: One for systems that implement 5 Volt signaling levels, and one for systems that implement 3.3 Volt signaling levels.
In addition, PCI systems may implement either the 32-bit or 64-bit connector. Most PCI buses implement only the 32-bit portion of the connector which consists of pins 1 through 62. Advanced systems which support 64-bit data transfers implement the full PCI bus connector which consists of pins 1 through 94.
Three types of add-in boards may be implemented: "5 Volt add-in boards" include a key notch in pin positions 50 and 51 to allow them to be plugged only into 5 Volt system connectors. "3.3 Volt add-in boards" include a key notch in pin positions 12 and 13 to allow them to be plugged only into 3.3 Volt system connectors. "Universal add-in boards" include both key notches to allow them to be plugged into either 5 Volt or 3.3 Volt system connectors. Universal boards must be able to adapt to operation at either signaling level.
| Pin | 5V System Environment | Pin | 3.3V System Environment | Comments | ||||
| Side B | Side A | Side B | Side A | |||||
| 1 | -12V | TRST# | 1 | -12V | TRST# | 32-bit start | ||
| 2 | TCK | +12V | 2 | TCK | +12V | |||
| 3 | Ground | TMS | 3 | Ground | TMS | |||
| 4 | TDO | TDI | 4 | TDO | TDI | |||
| 5 | +5V | +5V | 5 | +5V | +5V | |||
| 6 | +5V | INTA# | 6 | +5V | INTA# | |||
| 7 | INTB# | INTC# | 7 | INTB# | INTC# | |||
| 8 | INTD# | +5V | 8 | INTD# | +5V | |||
| 9 | PRSNT1# | Reserved | 9 | PRSNT1# | Reserved | |||
| 10 | Reserved | +5V (I/O) | 10 | Reserved | +3.3V (I/O) | |||
| 11 | PRSNT2# | Reserved | 11 | PRSNT2# | Reserved | |||
| 12 | Ground | Ground | 12 | Connector Key | 3.3V key | |||
| 13 | Ground | Ground | 13 | Connector Key | 3.3V key | |||
| 14 | Reserved | Reserved | 14 | Reserved | Reserved | |||
| 15 | Ground | RST# | 15 | Ground | RST# | |||
| 16 | CLK | +5V (I/O) | 16 | CLK | +3.3V (I/O) | |||
| 17 | Ground | GNT# | 17 | Ground | GNT# | |||
| 18 | REQ# | Ground | 18 | REQ# | Ground | |||
| 19 | +5V (I/O) | Reserved | 19 | +3.3V (I/O) | Reserved | |||
| 20 | AD[31] | AD[30] | 20 | AD[31] | AD[30] | |||
| 21 | AD[29] | +3.3V | 21 | AD[29] | +3.3V | |||
| 22 | Ground | AD[28] | 22 | Ground | AD[28] | |||
| 23 | AD[27] | AD[26] | 23 | AD[27] | AD[26] | |||
| 24 | AD[25] | Ground | 24 | AD[25] | Ground | |||
| 25 | +3.3V | AD[24] | 25 | +3.3V | AD[24] | |||
| 26 | C/BE[3]# | IDSEL | 26 | C/BE[3]# | IDSEL | |||
| 27 | AD[23] | +3.3V | 27 | AD[23] | +3.3V | |||
| 28 | Ground | AD[22] | 28 | Ground | AD[22] | |||
| 29 | AD[21] | AD[20] | 29 | AD[21] | AD[20] | |||
| 30 | AD[19] | Ground | 30 | AD[19] | Ground | |||
| 31 | +3.3V | AD[18] | 31 | +3.3V | AD[18] | |||
| 32 | AD[17] | AD[16] | 32 | AD[17] | AD[16] | |||
| 33 | C/BE[2]# | +3.3V | 33 | C/BE[2]# | +3.3V | |||
| 34 | Ground | FRAME# | 34 | Ground | FRAME# | |||
| 35 | IRDY# | Ground | 35 | IRDY# | Ground | |||
| 36 | +3.3V | TRDY# | 36 | +3.3V | TRDY# | |||
| 37 | DEVSEL# | Ground | 37 | DEVSEL# | Ground | |||
| 38 | Ground | STOP# | 38 | Ground | STOP# | |||
| 39 | LOCK# | 3.3V | 39 | LOCK# | 3.3V | |||
| 40 | PERR# | SDONE | 40 | PERR# | SDONE | |||
| 41 | +3.3V | SBO# | 41 | +3.3V | SBO# | |||
| 42 | SERR# | Ground | 42 | SERR# | Ground | |||
| 43 | +3.3V | PAR | 43 | +3.3V | PAR | |||
| 44 | C/BE[1]# | AD[15] | 44 | C/BE[1]# | AD[15] | |||
| 45 | AD[14] | +3.3V | 45 | AD[14] | +3.3V | |||
| 46 | Ground | AD[13] | 46 | Ground | AD[13] | |||
| 47 | AD[12] | AD[11] | 47 | AD[12] | AD[11] | |||
| 48 | AD[10] | Ground | 48 | AD[10] | Ground | |||
| 49 | Ground | AD[09] | 49 | M66EN | AD[09] | |||
| 50 | Connector Key | 50 | Ground | Ground | 5V key | |||
| 51 | Connector Key | 51 | Ground | Ground | 5V key | |||
| 52 | AD[08] | C/BE[0]# | 52 | AD[08] | C/BE[0]# | |||
| 53 | AD[07] | +3.3V | 53 | AD[07] | +3.3V | |||
| 54 | +3.3V | AD[06] | 54 | +3.3V | AD[06] | |||
| 55 | AD[05] | AD[04] | 55 | AD[05] | AD[04] | |||
| 56 | AD[03] | Ground | 56 | AD[03] | Ground | |||
| 57 | Ground | AD[02] | 57 | Ground | AD[02] | |||
| 58 | AD[01] | AD[00] | 58 | AD[01] | AD[00] | |||
| 59 | +5V (I/O) | +5V (I/O) | 59 | +3.3V (I/O) | +3.3V (I/O) | |||
| 60 | ACK64# | REQ64# | 60 | ACK64# | REQ64# | |||
| 61 | +5V | +5V | 61 | +5V | +5V | |||
| 62 | +5V | +5V | 62 | +5V | +5V | 32-bit end | ||
| Connector Key | Connector Key | 64-bit spacer | ||||||
| Connector Key | Connector Key | 64-bit spacer | ||||||
| 63 | Reserved | Ground | 63 | Reserved | Ground | 64-bit start | ||
| 64 | Ground | C/BE[7]# | 64 | Ground | C/BE[7]# | |||
| 65 | C/BE[6]# | C/BE[5]# | 65 | C/BE[6]# | C/BE[5]# | |||
| 66 | C/BE[4]# | +5V (I/O) | 66 | C/BE[4]# | +3.3V (I/O) | |||
| 67 | Ground | PAR64 | 67 | Ground | PAR64 | |||
| 68 | AD[63] | AD[62] | 68 | AD[63] | AD[62] | |||
| 69 | AD[61] | Ground | 69 | AD[61] | Ground | |||
| 70 | +5V (I/O) | AD[60] | 70 | +3.3V (I/O) | AD[60] | |||
| 71 | AD[59] | AD[58] | 71 | AD[59] | AD[58] | |||
| 72 | AD[57] | Ground | 72 | AD[57] | Ground | |||
| 73 | Ground | AD[56] | 73 | Ground | AD[56] | |||
| 74 | AD[55] | AD[54] | 74 | AD[55] | AD[54] | |||
| 75 | AD[53] | +5V (I/O) | 75 | AD[53] | +3.3V (I/O) | |||
| 76 | Ground | AD[52] | 76 | Ground | AD[52] | |||
| 77 | AD[51] | AD[50] | 77 | AD[51] | AD[50] | |||
| 78 | AD[49] | Ground | 78 | AD[49] | Ground | |||
| 79 | +5V (I/O) | AD[48] | 79 | +3.3V (I/O) | AD[48] | |||
| 80 | AD[47] | AD[46] | 80 | AD[47] | AD[46] | |||
| 81 | AD[45] | Ground | 81 | AD[45] | Ground | |||
| 82 | Ground | AD[44] | 82 | Ground | AD[44] | |||
| 83 | AD[43] | AD[42] | 83 | AD[43] | AD[42] | |||
| 84 | AD[41] | +5V (I/O) | 84 | AD[41] | +3.3V (I/O) | |||
| 85 | Ground | AD[40] | 85 | Ground | AD[40] | |||
| 86 | AD[39] | AD[38] | 86 | AD[39] | AD[38] | |||
| 87 | AD[37] | Ground | 87 | AD[37] | Ground | |||
| 88 | +5V (I/O) | AD[36] | 88 | +3.3V (I/O) | AD[36] | |||
| 89 | AD[35] | AD[34] | 89 | AD[35] | AD[34] | |||
| 90 | AD[33] | Ground | 90 | AD[33] | Ground | |||
| 91 | Ground | AD[32] | 91 | Ground | AD[32] | |||
| 92 | Reserved | Reserved | 92 | Reserved | Reserved | |||
| 93 | Reserved | Ground | 93 | Reserved | Ground | |||
| 94 | Ground | Reserved | 94 | Ground | Reserved | 64-bit end | ||
| ||