PCI = Peripheral Component Interconnect
The Peripheral Component Interconnect (PCI) is a synchronous local bus developed by Intel and standardised by the PCI Special Interest Group (PCI-SIG). From the early 1990s to the mid-2000s it was the dominant PC expansion bus, displacing ISA, EISA, MCA and VESA Local Bus, before being succeeded in turn by PCI Express. A 32-bit bus running at up to 33 MHz reaches a peak transfer rate of 132 MB/s; the 64-bit and 66 MHz variants reach 264 MB/s, and a 64-bit, 66 MHz bus reaches 528 MB/s. To keep the pin count down, address and data share the same lines (the multiplexed AD bus), and the bus uses reflected-wave rather than incident-wave switching.
This page is an overview for designers and hobbyists rather than a complete account of the standard: I/O operations are described in the most detail, while memory operations — which an I/O card rarely handles — are only outlined. Because of the higher clock speeds involved, PCI cards are harder to design than ISA cards. Several vendors offer PCI prototyping cards, and FPGA suppliers such as Xilinx provide PCI-compliant cores that can serve as a starting point for a design.
PCI Universal Card 32/64 bit
----------------------------------------------------------------
| PCI Component Side (side B) |
| |
| |
| optional |
| ____ mandatory 32-bit pins 64-bit pins _____|
|___| |||||||--|||||||||||||||||--|||||||--||||||||||||||
^ ^ ^ ^ ^ ^ ^ ^
b01 b11 b14 b49 b52 b62 b63 b94
PCI 5V Card 32/64 bit
| optional |
| ____ mandatory 32-bit pins 64-bit pins _____|
|___| ||||||||||||||||||||||||||--|||||||--||||||||||||||
PCI 3.3V Card 32/64 bit
| optional |
| ____ mandatory 32-bit pins 64-bit pins _____|
|___| |||||||--||||||||||||||||||||||||||--||||||||||||||
98+22 PIN EDGE CONNECTOR at the computer.
| Pin | +5V | +3.3V | Universal | Description |
|---|---|---|---|---|
| A1 | TRST | Test Logic Reset | ||
| A2 | +12V | +12 VDC | ||
| A3 | TMS | Test Mode Select | ||
| A4 | TDI | Test Data Input | ||
| A5 | +5V | +5 VDC | ||
| A6 | INTA | Interrupt A | ||
| A7 | INTC | Interrupt C | ||
| A8 | +5V | +5 VDC | ||
| A9 | RESV01 | Reserved VDC | ||
| A10 | +5V | +3.3V | Signal Rail | +V I/O (+5 V or +3.3 V) |
| A11 | RESV03 | Reserved VDC | ||
| A12 | GND03 | (OPEN) | (OPEN) | Ground or Open (Key) |
| A13 | GND05 | (OPEN) | (OPEN) | Ground or Open (Key) |
| A14 | RESV05 | Reserved VDC | ||
| A15 | RESET | Reset | ||
| A16 | +5V | +3.3V | Signal Rail | +V I/O (+5 V or +3.3 V) |
| A17 | GNT | Grant PCI use | ||
| A18 | GND08 | Ground | ||
| A19 | RESV06 | Reserved VDC | ||
| A20 | AD30 | Address/Data 30 | ||
| A21 | +3.3V01 | +3.3 VDC | ||
| A22 | AD28 | Address/Data 28 | ||
| A23 | AD26 | Address/Data 26 | ||
| A24 | GND10 | Ground | ||
| A25 | AD24 | Address/Data 24 | ||
| A26 | IDSEL | Initialization Device Select | ||
| A27 | +3.3V03 | +3.3 VDC | ||
| A28 | AD22 | Address/Data 22 | ||
| A29 | AD20 | Address/Data 20 | ||
| A30 | GND12 | Ground | ||
| A31 | AD18 | Address/Data 18 | ||
| A32 | AD16 | Address/Data 16 | ||
| A33 | +3.3V05 | +3.3 VDC | ||
| A34 | FRAME | Address or Data phase | ||
| A35 | GND14 | Ground | ||
| A36 | TRDY | Target Ready | ||
| A37 | GND15 | Ground | ||
| A38 | STOP | Stop Transfer Cycle | ||
| A39 | +3.3V07 | +3.3 VDC | ||
| A40 | SDONE | Snoop Done | ||
| A41 | SBO | Snoop Backoff | ||
| A42 | GND17 | Ground | ||
| A43 | PAR | Parity | ||
| A44 | AD15 | Address/Data 15 | ||
| A45 | +3.3V10 | +3.3 VDC | ||
| A46 | AD13 | Address/Data 13 | ||
| A47 | AD11 | Address/Data 11 | ||
| A48 | GND19 | Ground | ||
| A49 | AD9 | Address/Data 9 | ||
| A52 | C/BE0 | Command, Byte Enable 0 | ||
| A53 | +3.3V11 | +3.3 VDC | ||
| A54 | AD6 | Address/Data 6 | ||
| A55 | AD4 | Address/Data 4 | ||
| A56 | GND21 | Ground | ||
| A57 | AD2 | Address/Data 2 | ||
| A58 | AD0 | Address/Data 0 | ||
| A59 | +5V | +3.3V | Signal Rail | +V I/O (+5 V or +3.3 V) |
| A60 | REQ64 | Request 64-bit transfer | ||
| A61 | VCC11 | +5 VDC | ||
| A62 | VCC13 | +5 VDC | ||
| A63 | GND | Ground | ||
| A64 | C/BE[7]# | Command, Byte Enable 7 | ||
| A65 | C/BE[5]# | Command, Byte Enable 5 | ||
| A66 | +5V | +3.3V | Signal Rail | +V I/O (+5 V or +3.3 V) |
| A67 | PAR64 | Parity for AD[63:32]/C/BE[7:4]# | ||
| A68 | AD62 | Address/Data 62 | ||
| A69 | GND | Ground | ||
| A70 | AD60 | Address/Data 60 | ||
| A71 | AD58 | Address/Data 58 | ||
| A72 | GND | Ground | ||
| A73 | AD56 | Address/Data 56 | ||
| A74 | AD54 | Address/Data 54 | ||
| A75 | +5V | +3.3V | Signal Rail | +V I/O (+5 V or +3.3 V) |
| A76 | AD52 | Address/Data 52 | ||
| A77 | AD50 | Address/Data 50 | ||
| A78 | GND | Ground | ||
| A79 | AD48 | Address/Data 48 | ||
| A80 | AD46 | Address/Data 46 | ||
| A81 | GND | Ground | ||
| A82 | AD44 | Address/Data 44 | ||
| A83 | AD42 | Address/Data 42 | ||
| A84 | +5V | +3.3V | Signal Rail | +V I/O (+5 V or +3.3 V) |
| A85 | AD40 | Address/Data 40 | ||
| A86 | AD38 | Address/Data 38 | ||
| A87 | GND | Ground | ||
| A88 | AD36 | Address/Data 36 | ||
| A89 | AD34 | Address/Data 34 | ||
| A90 | GND | Ground | ||
| A91 | AD32 | Address/Data 32 | ||
| A92 | RES | Reserved | ||
| A93 | GND | Ground | ||
| A94 | RES | Reserved | ||
| B1 | -12V | -12 VDC | ||
| B2 | TCK | Test Clock | ||
| B3 | GND | Ground | ||
| B4 | TDO | Test Data Output | ||
| B5 | +5V | +5 VDC | ||
| B6 | +5V | +5 VDC | ||
| B7 | INTB | Interrupt B | ||
| B8 | INTD | Interrupt D | ||
| B9 | PRSNT1 | Present detect 1 | ||
| B10 | RES | Reserved | ||
| B11 | PRSNT2 | Present detect 2 | ||
| B12 | GND | (OPEN) | (OPEN) | Ground or Open (Key) |
| B13 | GND | (OPEN) | (OPEN) | Ground or Open (Key) |
| B14 | RES | Reserved VDC | ||
| B15 | GND | Reset | ||
| B16 | CLK | Clock | ||
| B17 | GND | Ground | ||
| B18 | REQ | Request | ||
| B19 | +5V | +3.3V | Signal Rail | +V I/O (+5 V or +3.3 V) |
| B20 | AD31 | Address/Data 31 | ||
| B21 | AD29 | Address/Data 29 | ||
| B22 | GND | Ground | ||
| B23 | AD27 | Address/Data 27 | ||
| B24 | AD25 | Address/Data 25 | ||
| B25 | +3.3V | +3.3VDC | ||
| B26 | C/BE3 | Command, Byte Enable 3 | ||
| B27 | AD23 | Address/Data 23 | ||
| B28 | GND | Ground | ||
| B29 | AD21 | Address/Data 21 | ||
| B30 | AD19 | Address/Data 19 | ||
| B31 | +3.3V | +3.3 VDC | ||
| B32 | AD17 | Address/Data 17 | ||
| B33 | C/BE2 | Command, Byte Enable 2 | ||
| B34 | GND13 | Ground | ||
| B35 | IRDY | Initiator Ready | ||
| B36 | +3.3V06 | +3.3 VDC | ||
| B37 | DEVSEL | Device Select | ||
| B38 | GND16 | Ground | ||
| B39 | LOCK | Lock bus | ||
| B40 | PERR | Parity Error | ||
| B41 | +3.3V08 | +3.3 VDC | ||
| B42 | SERR | System Error | ||
| B43 | +3.3V09 | +3.3 VDC | ||
| B44 | C/BE1 | Command, Byte Enable 1 | ||
| B45 | AD14 | Address/Data 14 | ||
| B46 | GND18 | Ground | ||
| B47 | AD12 | Address/Data 12 | ||
| B48 | AD10 | Address/Data 10 | ||
| B49 | M66EN | 66 MHz enable (Ground if 33 MHz) | ||
| B50 | (OPEN) | GND | (OPEN) | Ground or Open (Key) |
| B51 | (OPEN) | GND | (OPEN) | Ground or Open (Key) |
| B52 | AD8 | Address/Data 8 | ||
| B53 | AD7 | Address/Data 7 | ||
| B54 | +3.3V12 | +3.3 VDC | ||
| B55 | AD5 | Address/Data 5 | ||
| B56 | AD3 | Address/Data 3 | ||
| B57 | GND22 | Ground | ||
| B58 | AD1 | Address/Data 1 | ||
| B59 | VCC08 | +5 VDC | ||
| B60 | ACK64 | Acknowledge 64-bit transfer | ||
| B61 | VCC10 | +5 VDC | ||
| B62 | VCC12 | +5 VDC | ||
| B63 | RES | Reserved | ||
| B64 | GND | Ground | ||
| B65 | C/BE[6]# | Command, Byte Enable 6 | ||
| B66 | C/BE[4]# | Command, Byte Enable 4 | ||
| B67 | GND | Ground | ||
| B68 | AD63 | Address/Data 63 | ||
| B69 | AD61 | Address/Data 61 | ||
| B70 | +5V | +3.3V | Signal Rail | +V I/O (+5 V or +3.3 V) |
| B71 | AD59 | Address/Data 59 | ||
| B72 | AD57 | Address/Data 57 | ||
| B73 | GND | Ground | ||
| B74 | AD55 | Address/Data 55 | ||
| B75 | AD53 | Address/Data 53 | ||
| B76 | GND | Ground | ||
| B77 | AD51 | Address/Data 51 | ||
| B78 | AD49 | Address/Data 49 | ||
| B79 | +5V | +3.3V | Signal Rail | +V I/O (+5 V or +3.3 V) |
| B80 | AD47 | Address/Data 47 | ||
| B81 | AD45 | Address/Data 45 | ||
| B82 | GND | Ground | ||
| B83 | AD43 | Address/Data 43 | ||
| B84 | AD41 | Address/Data 41 | ||
| B85 | GND | Ground | ||
| B86 | AD39 | Address/Data 39 | ||
| B87 | AD37 | Address/Data 37 | ||
| B88 | +5V | +3.3V | Signal Rail | +V I/O (+5 V or +3.3 V) |
| B89 | AD35 | Address/Data 35 | ||
| B90 | AD33 | Address/Data 33 | ||
| B91 | GND | Ground | ||
| B92 | RES | Reserved | ||
| B93 | RES | Reserved | ||
| B94 | GND | Ground |
Notes
- Pins 63-94 exist only on 64-bit PCI implementations; the 64-bit extension carries AD[63:32], C/BE[7:4]# and PAR64. REQ64#/ACK64# sit at position 60 in the 32-bit section so 32-bit slots can leave them open.
- +V I/O is 3.3 V on 3.3 V boards and 5 V on 5 V boards; on the Universal board these pins define the signalling rail that the board’s I/O buffers adapt to.
- Keying and voltage. The standard defines a 5 V and a 3.3 V signalling connector, and three card types: a 5 V card (notch at positions 50/51), a 3.3 V card (notch at positions 12/13), and a Universal card with both notches, which is why it fits either slot.
- Present detect. PRSNT1#/PRSNT2# indicate that a board is fitted and its maximum power draw: both open = no board; PRSNT1# to ground = 25 W; PRSNT2# to ground = 15 W; both to ground = 7.5 W.
- M66EN (pin B49) signals a 66 MHz-capable board; it is treated as ground in a 33 MHz environment.
- Boards that do not implement JTAG boundary scan must connect TDI to TDO so the scan chain is not broken.
Signal Descriptions:
- AD(x): Address/Data Lines.
- CLK: Clock. 33 MHz maximum.
- C/BE(x): Command, Byte Enable.
- FRAME: Used to indicate whether the cycle is an address phase or a data phase.
- DEVSEL: Device Select.
- IDSEL: Initialization Device Select
- INT(x): Interrupt
- IRDY: Initiator Ready
- LOCK: Used to manage resource locks on the PCI bus.
- REQ: Request. Requests a PCI transfer.
- GNT: Grant. indicates that permission to use PCI is granted.
- PAR: Parity. Used for AD0-31 and C/BE0-3.
- PERR: Parity Error.
- RST: Reset.
- SBO: Snoop Backoff.
- SDONE: Snoop Done.
- SERR: System Error. Indicates an address parity error for special cycles or a system error.
- STOP: Asserted by Target. Requests the master to stop the current transfer cycle.
- TCK: Test Clock
- TDI: Test Data Input
- TDO: Test Data Output
- TMS: Test Mode Select
- TRDY: Target Ready
- TRST: Test Logic Reset
- M66EN: 66 MHz Enable. Indicates a 66 MHz-capable board; tied to ground for 33 MHz operation.
- REQ64: Request 64-bit transfer (asserted by the master).
- ACK64: Acknowledge 64-bit transfer (asserted by the target that supports it).
- PAR64: Parity for the upper AD[63:32] and C/BE[7:4]# lines.
The PCI bus treats all transfers as a burst operation. Each cycle begins with an address phase followed by one or more data phases. Data phases may repeat indefinitely, but are limited by a timer that defines the maximum amount of time that the PCI device may control the bus. This timer is set by the CPU as part of the configuration space. Each device has its own timer (see the Latency Timer in the configuration space).
The same lines are used for address and data. The command lines are also used for byte enable lines. This is done to reduce the overall number of pins on the PCI connector.
The Command lines (C/BE3 to C/BE0) indicate the type of bus transfer during the address phase.
| C/BE | Command Type |
|---|---|
| 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 | Multiple Memory Read |
| 1101 | Dual Address Cycle |
| 1110 | Memory-Read Line |
| 1111 | Memory Write and Invalidate |
The three basic types of transfers are I/O, Memory, and Configuration.
PCI transfers are synchronous to the rising edge of CLK. A cycle begins when the initiator asserts FRAME and drives the command and address; one or more data phases follow, and either the initiator (via IRDY) or the target (via TRDY) may insert wait states until both are ready. See the PCI Local Bus Specification for the detailed cycle timing.
References
- PCI Local Bus Specification, Revision 2.1 (PCI-SIG, June 1995) — connector pinout (Table 4-11), present-detect definitions and keying.
- PCI Local Bus Specification, Revision 2.2 (PCI-SIG, December 1998) — Internet Archive scan of the later revision.
- PCI bus technical notes and signal descriptions: Mark Sokos.