Peripheral Component Interconnect
aus Wikipedia, der freien Enzyklopädie
Peripheral Component Interconnect, meist PCI abgekürzt, ist ein Bus-Standard zur Verbindung von Peripheriegeräten mit dem Chipsatz eines Prozessors.
Es gibt verschiedene Varianten des Standards für verschiedene Einsatzgebiete (PC, Industrie, Telekommunikation). Die bekannteste Variante kommt hauptsächlich im PC-Umfeld zum Einsatz und heißt offiziell PCI Conventional. Praktisch jeder seit ca. 1994 gebaute IBM-PC kompatible Computer ist mit meist zwei bis sieben Steckplätzen für PCI-Karten ausgerüstet (ausgenommen Miniatur- und mobile Versionen). Auch neuere Computer der Firma Apple und Workstations der Firma Sun besitzen einen PCI-Bus. In die Steckplätze kann eine große Anzahl verfügbarer Karten verschiedener Hersteller eingesetzt werden, unter anderem auch Netzwerkkarten, Modems, Soundkarten und (ältere oder Zweit-) Grafikkarten. Damit kann ein PC leicht an spezielle Bedürfnisse angepasst werden.
Die Version 1.0 des Standards wurde von der Firma Intel im Jahre 1992 definiert. Intel wollte nicht den VESA Local Bus (VLB) unterstützen, da der VLB nicht genügend Durchsatz bot und zudem auf den Intel 486-Prozessor zugeschnitten war. Zudem kann der PCI-Bus in jeder Architektur eingesetzt werden. Heute ist der Standard unter der Obhut eines Konsortiums, der PCI Special Interest Group, bei dem Firmen und Organisationen Mitglied werden können. Die aktuelle Version der PCI Conventional Spezifikation ist 3.0, deren Definition im April 2004 abgeschlossen wurde.
Der PCI-Bus hat den alten ISA-Bus, wie man ihn in älteren PCs fand, und ebenso den kurzlebigen VL-Bus ersetzt. Eine PCI-ISA-Bridge erlaubt in PCs, die sowohl PCI- als auch ISA-Steckplätze haben, die Anbindung des ISA-Busses an den PCI-Bus. Auf Systemen mit dem Intel Pentium Prozessor (und neueren) ist dies die einzige Möglichkeit, ISA-Karten zu unterstützen, da der Systembus des Ur-PC, der über die ISA-Steckplätze einfach nur herausgeführt war, dort gar nicht mehr existiert. Ursprünglich sollte der PCI-Bus die Anforderungen in PCs für Grafik-, Netzwerk- und andere Schnittstellenkarten über längere Zeit erfüllen. Allerdings wurde der Bus in kurzer Zeit zu langsam für schnelle Grafikkarten, so dass für diese schon ab 1997 ein zusätzlicher Steckplatz, der Accelerated Graphics Port (AGP), eingeführt wurde. Für so gut wie alle anderen Steckkarten-Typen blieb PCI dagegen bis heute Standard, soll aber ab 2005 schrittweise von PCI-Express ersetzt werden (siehe unten).
Anders als der ISA-Bus ermöglicht PCI die dynamische Konfiguration eines Gerätes ohne Eingriff des Benutzers. Während des Bootvorgangs handeln das BIOS des PCI-Gerätes und das System-BIOS die Ressourcen aus, die das Gerät benötigt. Dies erlaubt die Zuweisung von IRQs, Portadressen und Speicherbereichen entsprechend den örtlichen Gegebenheiten (bei ISA-Karten musste man häufig den zu verwendenden IRQ etc. per Steckbrücke manuell einstellen). Zusätzlich stellt der PCI-Bus dem Betriebssystem und anderen Programmen eine detaillierte Beschreibung aller verbundenen PCI-Geräte durch den PCI Configuration Space zur Verfügung.
Die PCI-Spezifikation regelt auch die physische Auslegung des Busses (u.a. auch Abstand der Leiterbahnen zueinander), elektrische Eigenschaften, Timing und Protokolle. Die Geräte oder Schnittstellen müssen nicht unbedingt auf Steckkarten untergebracht werden, sondern können sich auch direkt auf der Hauptplatine des Computers befinden, die Spezifikation spricht hier von planar devices.
Inhaltsverzeichnis |
[Bearbeiten] Allgemeine PCI-Bus-Spezifikationen
Der PCI-Bus ist ein synchroner Bus mit 33,33 MHz (= (1/33333333,33 s) pro Takt = 30 ns pro Takt) oder nach Spezifikation 2.1 66,66 MHz Taktrate, also 15 ns pro Takt (= (1/66666666,66) s pro Takt = 15 ns pro Takt). Alle Signale werden nur bei der steigenden Taktflanke zwischengespeichert. Die Signale können über CMOS-Treiber angesteuert werden, so dass der gesamte Stromverbrauch gering ist. Der Bus kann mit bis zu 10 Geräten bestückt werden, wobei zwischen Master (Herr) und Target (Ziel) unterschieden wird. Der Master könnte bei Bedarf selbst die Kontrolle über alle Abläufe auf dem Bus übernehmen, was vor allem für Daten ans System liefernde Karten wie etwa Netzwerkkarten oder Festplatten-Controller günstig sein kann. Als Geräte zählen auch Schnittstellen (also die Sockel, in die die Erweiterungskarten eingesteckt werden können) sowie auf der Hauptplatine untergebrachte Geräte, die Verbindung zum Host (PCI/Host-Schnittstelle) oder zu einem eventuell vorhandenen ISA-Bus (PCI/ISA-Schnittstelle). Daneben erlauben Sockel auf der Hauptplatine den Einsatz von Schnittstellenkarten. Falls die Anzahl der Steckplätze nicht ausreicht, können über PCI/PCI-Schnittstellen (PCI-PCI-Bridge) weitere PCI-Busse in das System eingebunden werden.
Auf dem PCI-Bus kommuniziert immer ein Master mit einem Target. In vielen PC-Systemen ist der Host der einzige Master. Ein Bus kann aber mehrere Master haben, von denen einer über einen Arbiter ausgewählt wird. Der ausgewählte Master kann einen Transfer beginnen, wobei er eine Adresse an die 32 Daten/Adressleitungen und ein Kommando an 4 Kommando/Byte-Leitungen anlegt. Die Daten und Adressen werden über die selben Leitungen übertragen und per Zeitmultiplexverfahren voneinander getrennt. Eine zusätzliche Paritätsleitung erlaubt das Erkennen von Fehlern.
Jedem Target werden nach dem Reset vom BIOS Adressbereiche zugeteilt. Über Herstellercodes können Karten nach dem Hochfahren eindeutig identifiziert werden. Das Target mit der ausgewählten Adresse im Adressbereich antwortet dann und kommuniziert mit dem Master. Die beiden am häufigsten verwendeten Kommandos sind READ und WRITE. Über die Adress/Datenleitungen werden dann Daten übertragen, wobei die Kommando/Byte-Leitungen zur Auswahl der Bytes im 32-Bit-Wort dienen können. Dadurch sind neben 32-Bit auch 16- und 8-Bit Transfers möglich.
Während der Übertragung können in jedem Takt maximal 32 Bit, also 4 Bytes übertragen werden, so dass die Transferrate maximal 133 MByte/s beträgt (4 Bytes in 30 ns). Über Ready-Leitungen kann sowohl der Master als auch das Target signalisieren, dass sie zur Aufnahme eines Datums bereit sind. Falls Master oder Target nicht bereit sind, wird kein Datum übertragen, die Datenübertragung also verlangsamt.
Normalerweise beendet der Master den Datentransfer. Über ein STOP-Signal kann das Target ein Übertragungsende erzwingen. Ein anderer Master kann den Bus über REQ anfordern, wobei die derzeitige Übertragung nach einer vorgegebenen Latenzzeit beendet werden muss und der neue Master den Bus übernehmen kann.
Der PCI-Bus benötigt minimal nur 47 (Target) bzw. 49 (Master) Signale auf dem Bus. Ab der Version 2.1 der Spezifikation ist eine 64-Bit-Erweiterung definiert, die den Datenbus durch zusätzliche Signale auf 64 Bit verbreitert. In einem System können 32-Bit- und 64-Bit-Geräte koexistieren und miteinander kommunizieren.
Auf dem Bus liegen vier Interruptleitungen, so dass jedes Gerät bis zu vier verschiedene Interrupts (INTA bis INTD) erzeugen kann. Die Interruptleitungen sind auf dem Bus aber nicht verbunden, sondern können einzeln geroutet und zugeordnet werden. Normalerweise wird nur INTA verwendet. Dieser kann jedoch je nach Steckplatz einem eigenen Interrupt zugeordnet werden, oder, falls nicht genügend Interrupts vorhanden sind, zwischen verschiedenen Karten geteilt werden. Die Probleme des ISA-Busses, der oft zu wenig Interrupts zuordnen konnte, sind damit weitgehend Vergangenheit.
PCI-Version | PCI 2.0 | PCI 32 bit 2.1 | PCI 64 bit 2.1 | PCI 2.2 | PCI 2.3 .. |
Max. Busbreite (Bit) | 32 | 32 | 64 | 64 | 64 |
Max. Taktrate (MHz) | 33 | 66 | 66 | 66 | 66 |
Max. Bandbreite‡ (GByte/s) | 0,12 | 0,25 | 0,5 | 0,5 | 0,5 |
Max. Bandbreite‡ (GBit/s) | 0,96 | 2,0 | 4,0 | 4,0 | 4,0 |
Slots pro Bridge | 4 | 4 | 2 | 2 | 2 |
Spannung (Volt) | 5 | 5/3,3† | 5/3,3† | 5/3,3† | 3,3 |
Einführung (Jahr) | 1993 | 1994 | 1994 | 1999 | 2002 |
†) 2.1 erlaubt 3,3V-Leitungen, 2.2 schreibt sie vor.
‡) Die max. Bandbreite ist das Produkt aus max. Taktrate und max. Busbreite. Beispiel:
[Bearbeiten] PCI-Bus Signale
Die Art der Ein- und Ausgänge lassen sich wie folgt einteilen:
Input | in | Normaler Eingang |
Output | out | Normaler Ausgang |
Tri-State | t/s | bidirektionaler Tri-State Ausgang |
Sustained-Tri-State | s/t/s | Low-Active Ausgang, der nur von einem Gerät getrieben werden darf. Setzt ein Gerät die Leitung auf low, so muss es, um die Leitung wieder freizugeben, die Leitung für mindestens einen Takt auf high setzen. Frühestens nach einem Takt nachdem die Leitung freigegeben wurde darf ein anderes Gerät die Leitung nutzen. Ein zentraler Pullup-Widerstand ist notwendig. |
Open-Drain | o/d | Low-Active Ausgang, fungiert als ODER-Verknüpfung mit anderen Geräten. Ein zentraler Pullup ist notwendig. |
Signal | Art | Beschreibung |
Systemsignale: | ||
CLK | in | Dient zur Synchronisation aller Komponenten. Die Taktfrequenz beträgt 33 MHz oder 66 MHz. Die Minimalfrequenz ist 0 MHz. |
RST# | in | Rücksetzen aller Systemkomponenten. |
Adress- und Datensignale: | ||
AD[31..0] | t/s | gemultiplexte Adress- und Datensignale |
C/BE[3..0]# | t/s | gemultiplexte Befehl- und Byte-Enable-Signale |
PAR | t/s | Die Parität für die Daten- und Adresssignale 0 bis 31, welche um einen Takt versetzt übertragen wird. |
Kontrollsignale: | ||
FRAME# | s/t/s | Dass eine Übertragung läuft, zeigt der Master mit FRAME# an. Wird die Übertragung der Daten beendet nimmt der Master die Leitung zurück. Eine deaktivierte Leitung bedeutet, dass die Übertragung beendet wird oder beendet ist. |
IRDY# | s/t/s | Der Master zeigt mit Initiator Ready an, dass ein Wort übergeben oder übernommen werden kann. |
TRDY# | s/t/s | Der Target zeigt mit Target Ready an, dass ein Wort übergeben oder übernommen werden kann. |
STOP# | s/t/s | Der Target zeigt dem Master an, dass die Übertragung beendet werden soll. |
LOCK# | s/t/s | LOCK schützt einen Zugriff auf einen oder mehrere Target während der Übertragung vor der Benutzung anderer Master. |
IDSEL | in | Auswahl während der Konfigurationsphase |
DEVSEL# | s/t/s | Target hat Adresse erkannt |
Arbitrierung (nur Master): | ||
REQ# | s/t/s | Die Absicht eines Masters auf den Bus wird hiermit angezeigt. Dieses Signal ist eine Punkt-zu-Punkt-Verbindung von einem zentralen Arbiter zu jedem Master. |
GNT# | in | Erlaubt den Zugriff auf den Bus. Dieses Signal ist eine Punkt-zu-Punkt-Verbindung von einem zentralen Arbiter zu jedem Master. |
Fehlersignalisierung: | ||
PERR# | s/t/s | Einen Takt nach PAR zeigt dieses Signal einen Daten Parity Fehler (nicht bei einem Special Cycle Befehl) an. |
SERR# | o/d | System Error zeigt bei einem Special Cycle Befehl einen Daten- oder sonstigen Systemfehler an. |
Interrupt Signale: | ||
INTA# | o/d | Ein Gerät mit einer Funktion zeigt einen Interrupt an. Ein Gerät mit mehr Funktionen zeigt einen Interrupt A an. |
INTB# | o/d | Ein Gerät mit mehr als einer Funktion zeigt einen Interrupt B an. |
INTC# | o/d | Ein Gerät mit mehr als einer Funktion zeigt einen Interrupt C an. |
INTD# | o/d | Ein Gerät mit mehr als einer Funktion zeigt einen Interrupt D an. |
Cache Signale (optional): | ||
SBO# | in out |
Snoop Backoff zeigt einen Cachehit für eine modifizierte Cachezeile an. |
SDONE | in out |
Snoop Done zeigt das Ende eines Snoops des aktuellen Zugriffs an. |
zusätzliche Signale: | ||
PRSNT[1..2]# | in | Zeigt das Vorhandensein eines Geräts und dessen Stromverbrauch an. |
CLKRUN# | in o/d s/t/s |
Ein Gerät aktiviert sich, wenn dieses Signal nach Reset aktiv wird. |
M66EN | in | Ein Gerät setzt dieses Signal, wenn es 66 MHz Bustakt unterstützt. Dabei müssen alle vorhandenen Geräte diesen Bustakt unterstützen. |
64-Bit Erweiterungssignale: | ||
AD[63..32] | t/s | Die oberen 32 Bit der Adress- und Datensignale. |
C/BE[7..4]# | t/s | Die oberen 4 Bit der Befehls- und Byte-Enable-Signale. |
REQ64# | s/t/s | Request64 zeigt die Absicht eines Masters für eine 64-Bit-Übertragung an. Dieses Signal ist eine Punkt-zu-Punkt Verbindung von einem zentralen Arbiter zu jedem Master. |
GNT64# | in | Grant64 erlaubt den Zugriff für eine 64-Bit-Übertragung. Dieses Signal ist eine Punkt-zu-Punkt Verbindung von einem zentralen Arbiter zu jedem Master. |
PAR64 | t/s | Parity64 über AD[63..32] und C/BE[7..4]# um einen Takt versetzt. |
JTAG-Signale: | ||
TCK | in | Test Clock |
TDI | in | Test Data In |
TDO | out | Test Data Out |
TMS | in | Test Mode Select |
TRST# | in | Test Reset |
Signale auf dem PCI-Bus - das #-Zeichen deutet an, dass die Signale Low Active sind.
[Bearbeiten] Operationen auf dem PCI-Bus
Nach der Konfiguration aller Geräte durch das BIOS können alle Geräte über ein Befehlsprotokoll angesprochen werden. Das Protokoll setzt sich aus dem Befehl, der Adresse und einer Folge von Daten zusammen.
C/BE3# | C/BE2# | C/BE1# | C/BE0# | Beschreibung |
0 | 0 | 0 | 0 | Der Interrupt Acknowledge Befehl ist ein implizierter Lesezugriff auf den System Interruptcontroller. Die Byte Enables geben dabei die Größe des Interruptvektors an. |
0 | 0 | 0 | 1 | Der Special Cycle Befehl ist für einfache Broadcast Nachrichten (?) |
0 | 0 | 1 | 0 | Der I/O Read Befehl ist für das Lesen aus dem Speicher, der als I/O Address Space eingebunden ist. |
0 | 0 | 1 | 1 | Der I/O Write Befehl ist für das Schreiben aus dem Speicher, der als I/O Address Space eingebunden ist. |
0 | 1 | 0 | 0 | Auf Reserved Befehle dürfen PCI-Geräte nicht reagieren. |
0 | 1 | 0 | 1 | Reserviert |
0 | 1 | 1 | 0 | Der Memory Read Befehl ist für das Lesen aus dem Speicher, der als Memory Address Space eingebunden ist. |
0 | 1 | 1 | 1 | Der Memory Write Befehl ist für das Schreiben aus dem Speicher, der als Memory Address Space eingebunden ist. |
1 | 0 | 0 | 0 | Reserviert |
1 | 0 | 0 | 1 | Reserviert |
1 | 0 | 1 | 0 | Der Configuration Read Befehl liest aus den internen Konfigurationsregistern (Configuration Space). |
1 | 0 | 1 | 1 | Der Configuration Write Befehl schreibt in die internen Konfigurationsregister (Configuration Space). |
1 | 1 | 0 | 0 | Der Memory Read Multiple Befehl liest mehr als eine Cachezeile aus dem Speicher. |
1 | 1 | 0 | 1 | Der Dual Address Cycle Befehl erlaubt das hintereinander senden von zwei 32-Bit-Adresszeilen um einen 64-Bit-Adressbereich in einer 32-Bit-PCI-Umgebung ansprechen zu können. |
1 | 1 | 1 | 0 | Der Memory Read Line Befehl liest eine Cachezeile aus dem Speicher. |
1 | 1 | 1 | 1 | Der Memory Write and Invalidate Befehl schreibt mindestens eine ganze Cachezeile in den Speicher. |
[Bearbeiten] Grundlegende PCI-Varianten
- PCI Conventional, erlaubt Busbreiten von 32 oder 64 Bit und Übertragungen mit 33 oder 66 MHz Takt (max. 528 MByte/s)
- PCI-X, 64-Bit-Version von PCI Conventional mit 133 MHz Takt (max. 1.066 MByte/s)
- PCI-X 266 (PCI-X DDR), PCI-X mit 266 MHz Nominaltakt (max. 2.133 MByte/s)
- Mini PCI, kleinere Bauform für Notebooks etc.
- Compact PCI, elektrisch voll PCI-kompatibel, jedoch in Form von Einschüben mit 3 bzw. 6 HE
- PCI Low-Profile, halbe Bauhöhe
[Bearbeiten] Abmessungen der PCI-Varianten
- Standard Height Maximum: 4.2", entspricht 106,68 mm
- Standard Height Short Card Length: — 6.875", entspricht 174,625 mm
- Standard Height Long Card Length: — 12.283", entspricht 311,9882 mm
- Low Profile Short Card (MD1): Length — 4.72", entspricht 119,888 mm
- Low Profile Long Card (MD2): Length — 6.6", entspricht 167,64 mm
- Low Profile Maximum Height: 2.536", entspricht 64,4144 mm
- Low Profile Minimum Height: 0.945", entspricht 24,003 mm
[Bearbeiten] Andere PCI-Varianten
- PCI-Express (zuerst 3GIO genannt, Abkürzung PCIe oder PCI-E) ist im Gegensatz zum PCI-Bus auf der elektrischen Ebene eine serielle Punkt-zu-Punkt-Verbindung, die aber PCI-Signalisierung und -Programmiertechniken verwendet und daher von Betriebssystem und Software wie PCI behandelt werden kann. PCI-Express ersetzt seit 2004 schrittweise sowohl PCI als auch AGP. PCI-Express ist hardwaretechnisch nicht kompatibel zu PCI oder AGP.
[Bearbeiten] Powermanagement mit PCI
Die Energiesparfunktionen für den PCI-Bus sind Teil einer optional zu implementierenden Spezifikation, die zeitlich zwischen den PCI-Versionen 2.1 und 2.2 angesiedelt ist. Jedes PM-fähige Gerät hat ein zusätzliches 8 Byte langes Feld im Configuration Space, über das es einerseits mitteilen kann, welche Energiespar-Modi es unterstützt, und andererseits auch entsprechend gesteuert werden kann. Jedes PCI-Gerät kann sich in einem von vier möglichen Operationsmodi befinden (D0-D3). Je höher die Nummer, desto weniger Energie verbraucht das Gerät. Auch wenn ein Gerät nichts von PCI-Powermanagement weiß, unterstützt es die Modi D0 und D3, da diese äquivalent zu an und aus sind. Ob und wieviel Energie in den dazwischen liegenden Modi gespart werden kann, liegt im Ermessen des Hardware-Herstellers. Ein Gerät kann aus einem bestimmten Modus in alle „darunter“ liegenden Modi wechseln, sowie aus jedem Modus in den Zustand D0.
Obwohl man Geräte durchaus „zu Fuß“ während des laufenden Betriebes in einen anderen Energiesparmodus bringen kann, wird man in den meisten Fällen mit Hilfe von APM oder ACPI einen globalen Energiesparmodus für den Computer setzen, der dann von der Powermanagement-Unterstützung des Betriebssystems eingeregelt wird. In den Modi D1 und D2 besteht für ein entsprechend ausgerüstetes PCI-Gerät die Möglichkeit, zu einem beliebigen Zeitpunkt ein so genanntes Power Management Event Signal (PME) auf den Bus zu legen, das dann an das Powermanagement des Betriebssystems weitergeleitet wird und dazu verwendet werden kann, das System auf Anforderung wieder global „aufzuwecken“ -- etwa wenn eine Netzwerkkarte einlaufende Daten erkennt, die behandelt werden müssen.
[Bearbeiten] Begriffe
- Fast Back-to-Back: Wenn alle Geräte diesen Modus unterstützen kann die IDLE-Phase zwischen zwei PCI-Zyklen entfallen. Dies erhöht den Datendurchsatz auf dem Bus.
- Special Cycle: Über 'Special Cycle' können Rundrufnachrichten (Broadcast messages) an alle angeschlossenen Geräte gesendet werden.
- Address Space: einer von drei Adressbereichen - Memory, I/O oder Configuration Space
- Configuration Space: Der 'Configuration Space' ist ein Speicherbereich (256 bzw. 4096 Byte) jedes PCI-Geräts, der zur Identifizierung und Konfiguration des Geräts dient. Der Configuration Space besteht aus einem standardisierten Kopf (Header) und zusätzlichen gerätespezifischen Daten wie beispielsweise Adressbereiche. Das BIOS bzw. der Treiber für ein PCI-Gerät kann anhand dieser Daten das Gerät passend konfigurieren.
[Bearbeiten] Literatur
- Don Anderson, Tom Shanley: PCI System Architecture 4th Edition. Mindshare Inc. 1999 ISBN 0201309742
[Bearbeiten] Siehe auch
- PCI-Express
- Accelerated Graphics Port (AGP)
- Extended Industry Standard Architecture (EISA-Bus)
- VESA Local Bus (VLB)
- Industry Standard Architecture (ISA-Bus, auch AT-Bus genannt)
- Micro Channel Architecture (MCA-Bus)
- XT-Bus-Architektur