The PCI (Peripheral Component Interconnect) Bus This file is not intended to be a thorough coverage of the PCI standard. It is for informational purposes only, and is intended to give designers and hobbyists an overview of the bus so that they might be able to design their own PCI cards. Thus, I/O operations are explained in the most detail, while memory operations, which will usually not be dealt with by an I/O card, are only briefly explained. Hobbyists are also warned that, due to the higher clock speeds involved, PCI cards are more difficult to design than ISA cards or cards for other slower busses. Many companies are now making PCI prototyping cards, and, for those fortunate enough to have access to FPGA programmers, companies like Xilinx are offering PCI compliant designs which you can use as a starting point for your own projects. For a copy of the full PCI standard, contact: PCI Special Interest Group (SIG) PO Box 14070 Portland, OR 97214 1-800-433-5177 1-503-797-4207 There is also a spec for CompactPCI, which uses the same timing and signals, but uses a eurocard connector and format. This is not presently covered in any detail within this document. Pinout (5 volt and 3.3 volt boards) -12V 01 *TRST TCK +12V GND TMS TDO TDI +5V +5V +5V *INTA *INTB *INTC *INTD +5V *PRSNT1 reserved reserved 10 +I/O V (+5 or +3.3) *PRSNT2 reserved GND Key3.3 GND GND Key3.3 GND reserved reserved GND *RST CLK +I/O V (+5 or +3.3) GND *GNT REQ GND +I/O V (+5 or +3.3) 20 reserved AD31 AD30 AD29 +3.3V GND AD28 AD27 AD26 AD25 GND +3.3V AD24 C/BE3 IDSEL AD23 +3.3V GND AD22 AD21 AD20 AD19 30 GND +3.3V AD18 AD17 AD16 C/BE2 +3.3V GND *FRAME *IRDY GND +3.3V *TRDY *DEVSEL GND GND *STOP *LOCK +3.3V *PERR 40 SDONE +3.3V *SBO *SERR GND +3.3V PAR C/BE1 AD15 AD14 +3.3V GND AD13 AD12 AD11 AD10 49 AD9 GND Key5 GND GND Key5 GND AD8 52 C/BE0 AD7 +3.3V +3.3V AD6 AD5 AD4 AD3 GND GND AD2 +I/O V (+5 or +3.3) +I/O V (+5 or +3.3) *ACK64 60 *REQ64 +5V +5V +5V 62 +5V (64 Bit Bus Extension Only) reserved 63 GND GND C/BE7 C/BE6 C/BE5 C/BE4 +I/O V (+5 or +3.3) GND PAR64 AD63 AD62 AD61 GND +I/O V (+5 or +3.3) 70 AD60 AD59 AD58 AD57 GND GND AD56 AD55 AD54 AD53 +I/O V (+5 or +3.3) GND AD52 AD51 AD50 AD49 GND +I/O V (+5 or +3.3) AD48 AD47 80 AD46 AD45 GND GND AD44 AD43 AD42 AD41 +I/O V (+5 or +3.3) GND AD40 AD39 AD38 AD37 GND +I/O V (+5 or +3.3) AD36 AD35 AD34 AD33 90 GND reserved reserved reserved GND GND 94 reserved * - Active Low PCI slots are keyed so that a 3.3 volt card cannot be plugged into a 5 volt slot, and a 5.5 volt card cannot be plugged into a 3 volt card. Dual voltage cards are possible. Key3.3 - At this location, a key is present on 3.3 volt boards. On 5 volt boards, these pins are GND. Key5 - At this location, a key is present on 5 volt boards. On 3.3 volt boards, these pins are GND. 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 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 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 indefinately, 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 timing diagrams: ___ ___ ___ ___ ___ ___ CLK ___| |___| |___| |___| |___| |___| |___ _______ _________ FRAME |_________________________________| ______ _______ ______ ______ ______ AD -------<______><_______><______><______><______>--- Address Data1 Data2 Data3 Data4 ______ _______________________________ C/BE -------<______><_______________________________>--- Command Byte Enable Signals ____________ ___ IRDY |_________________________________| _____________ ___ TRDY |________________________________| ______________ ___ DEVSEL |_______________________________| PCI transfer cycle, 4 data phases, no wait states. Data is transferred on the rising edge of CLK. [1] [2] [3] ___ ___ ___ ___ ___ ___ ___ ___ CLK ___| |___| |___| |___| |___| |___| |___| |___| |__ _______ _________ FRAME |________________________________________________| A B C ______ ______________ ______ _____________ AD -------<______>---------<______________><______><_____________>--- Address Data1 Data2 Data3 ______ ______________________________________________ C/BE -------<______><______________________________________________>--- Command Byte Enable Signals Wait ____________ _____ ___ IRDY |__________________________________| |_______| Wait Wait ______________________ ______ ___ TRDY |_______| |_______________________| ______________ ___ DEVSEL |______________________________________________| PCI transfer cycle, with wait states. Data is transferred on the rising edge of CLK at points labled A, B, and C. Bus Cycles: Interrupt Acknowledge (0000) The interrupt controller automatically recognizes and reacts to the INTA (interrupt acknowledge) command. In the data phase, it transfers the interrupt vector to the AD lines. Special Cycle (0001) AD15-AD0 0x0000 Processor Shutdown 0x0001 Processor Halt 0x0002 x86 Specific Code 0x0003 to 0xFFFF Reserved I/O Read (0010) and I/O Write (0011) Input/Output device read or write operation. The AD lines contain a byte address (AD0 and AD1 must be decoded). PCI I/O ports may be 8 or 16 bits. PCI allows 32 bits of address space. On IBM compatible machines, the Intel CPU is limited to 16 bits of I/O space, which is further limited by some ISA cards that may also be installed in the machine (many ISA cards only decode the lower 10 bits of address space, and thus mirror themselves throughout the 16 bit I/O space). This limit assumes that the machine supports ISA or EISA slots in addition to PCI slots. The PCI configuration space may also be accessed through I/O ports 0x0CF8 (Address) and 0x0CFC (Data). The address port must be written first. Memory Read (0110) and Memory Write (0111) A read or write to the system memory space. The AD lines contain a doubleword address. AD0 and AD1 do not need to be decoded. The Byte Enable lines (C/BE) indicate which bytes are valid. Configuration Read (1010) and Configuration Write (1011) A read or write to the PCI device configuration space, which is 256 bytes in length. It is accessed in doubleword units. AD0 and AD1 contain 0, AD2-7 contain the doubleword address, AD8-10 are used for selecting the addressed unit a the malfunction unit, and the remaining AD lines are not used. Address Bit 32 16 15 0 00 Unit ID | Manufacturer ID 04 Status | Command 08 Class Code | Revision 0C BIST | Header | Latency | CLS 10-24 Base Address Register 28 Reserved 2C Reserved 30 Expansion ROM Base Address 34 Reserved 38 Reserved 3C MaxLat|MnGNT | INT-pin | INT-line 40-FF available for PCI unit Multiple Memory Read (1100) This is an extension of the memory read bus cycle. It is used to read large blocks of memory without caching, which is beneficial for long sequential memory accesses. Dual Address Cycle (1101) Two address cycles are necessary when a 64 bit address is used, but only a 32 bit physical address exists. The least significant portion of the address is placed on the AD lines first, followed by the most significant 32 bits. The second address cycle also contains the command for the type of transfer (I/O, Memory, etc). The PCI bus supports a 64 bit I/O address space, although this is not available on Intel based PCs due to limitations of the CPU. Memory-Read Line (1110) This cycle is used to read in more than two 32 bit data blocks, typically up to the end of a cache line. It is more effecient than normal memory read bursts for a long series of sequential memory accesses. Memory Write and Invalidate (1111) This indicates that a minimum of one cache line is to be transferred. This allows main memory to be updated, saving a cache write-back cycle. Bus Arbitration: This section is under construction. PCI Bios: This section is under construction. (C) Copyright 1996 by Mark Sokos. This file may be freely copied and distributed, provided that no fee is charged. This information is provided "as-is". While I try to insure that the information is accurate, errors and typos may exist. Send corrections and comments to sokos@desupernet.net. The latest version of this file may be found at http://users.desupernet.net/sokos/ References: "Inside the PCI Local Bus" by Guy W. Kendall Byte, February 1994 v 19 p. 177-180 "The Indispensible PC Hardware Book" by Hans-Peter Messmer ISBN 0-201-8769-3