Der Chipsatz besteht aus drei Hauptbestandteilen:
Ein weiterer Vorteil der Trennung ist der, daß bei PCI-Rechnern
nicht die CPU, sondern die Host-Bridge für den Burst verantwortlich
ist. Deshalb arbeitet auch bei
486ern, die Write-Burst nicht unterstützen, ein PCI-Device mit
Write-Burst, was besonders Grafikanwendungen beschleunigt. Zudem ermöglicht
die Trennung von
CPU und PCI-Bus, daß die CPU weiterarbeiten kann, während
der PCI-Bus in den Hauptspeicher schreibt oder aus ihm ließt (Concurrency).
Dies gilt auch wenn
Daten zwischen zwei PCI-Devices ausgetauscht werden. So kann der Prozessor
zum Beispiel Berechnungen ausführen, während zur gleichen Zeit
Daten von der
Festplatte zur Grafikkarte übertragen werden.
Um auch andere Karten (z.B. ISA-Karten) nutzen zu können, kann
über eine entsprechende Bridge der nötige Bus an den PCI-Bus
angekoppelt werden, wodurch
auch ältere Karten weiterverwendet werden können.
Die PCI-Spezifikation sieht Bus-Bridges zu eigentlich allen anderen
Bussystemen vor, d.h. Bridges für die ISA, die EISA, die MCA sowie
die PCMCIA. Damit will
man die Probleme der MCA umgehen, die keinerlei Migrationspfad zwischen
den alten ISA- und den neuen MCA-Karten vorsah. Am sinnvollsten ist dabei
eine
Brücke zwischen PCI und EISA, damit sind PCI-Karten, 8-Bit-ISA-Karten,
16-Bit-ISA-Karten und EISA-Karten einsetzbar. Auch technisch ist sie am
interessantesten, weil sie die meisten Features bietet, dazu gehören
die Möglichkeit doppelter Posted Writes; sowohl vom PCI-Bus zum Host
als auch vom
EISA-Bus zur PCI-Bridge. Zudem stellt die EISA-Bridge alle Funktionen
einschließlich der vollständigen EISA-Arbitration zur Verfügung.
Es ist ebenfalls möglich, Bus-Bridges zu benutzen, die für den IBM-PC nicht üblich sind.
Ein entscheidender Vorteil, den es nur beim PCI-Bus gibt, ist die Existenz
einer PCI-to-PCI-Bridge, wodurch zum Beispiel die Anzahl der Slots oder
der
On-Board-Komponenten erhöht werden kann. Diese Möglichkeit
mehrere PCI-Busse parallel oder seriell in einem Rechner zu betreiben,
wird durch die
Skalierbarkeit des PCI-Bus ermöglicht. Hiermit ist es möglich,
ein großes System oder eines mit hohen Leistungsanforderungen in
mehrere Teilsysteme aufzuspalten,
die unabhängig voneinander arbeiten können, ohne sich zu
stören.
Insgesamt ist es möglich 256 Busse einzusetzen, wobei die ersten
255 Busse PCI-Busse sind und der letzte entweder ein weiterer PCI-Bus oder
ein Expansion Bus
(d.h. ein EISA-, ISA-, MCA-, oder VL-Bus) sein kann.
Zudem ist durch die Migration von 5V-Systemen hin zu den 3.3V-Systemen
und den daraus resultierenden verschiedenen Slots bei PCI ein Weg gefunden
worden,
der sowohl die alte Technik als auch die neue und bei Kombi-Boards
sogar beide Arten der Spannungsversorgung zuläßt; durch den
eingesetzten Stecker und den
mechanischen Aufbau des Systems ist es den Endkunden unmöglich,
eine Karte verkehrt herum oder mit der falschen Spannungsversorgung einzustecken.
Der elektrische PCI-Bus arbeitete bis zur Version 2.0 mit einem maximalen
Takt von 33 MHz synchron zum Prozessortakt. War die CPU höher getaktet,
so lief der
Bus mit heruntergeteiltem Takt. Bei einem 60 MHz Pentium betrug der
PCI-Takt deshalb nur 30 MHz. In der Spezifikation 2.1 liegt der maximale
Takt inzwischen
schon bei 66 MHz (siehe auch unter 2.2.3.).
Die PCI-Bus Targets sind die Slaves des PCI-Bus. Sie selbst sind nicht
in der Lage Zugriffe oder Transfers zu initiieren und sind deshalb darauf
angewiesen, daß die
Zugriffe durch einen Bus-Master oder die Host-CPU durchgeführt
werden. Das PCI-Bus-Interface des Targets ist wie bei jedem anderen PCI-Device
ein ASIC,
das die PCI-Bus-Zyklen beherrscht und sinnvollerweise Burst-Modi unterstützen
sollte. Optional kann auch ein Transfer Buffer implementiert werden, der
einen
Transfer von Daten von und zum Bus und I/O-Device mit geringer Latenz
und ohne die Notwendigkeit zur Erzeugung von Wait-States ermöglicht.
Die Daten sollten
ohne eingreifen der CPU geschrieben und gelesen werden können,
deswegen kann ein Slave mit einer eigenen CPU ausgerüstet sein. Hat
ein Slave von der
peripheren Einheit Daten empfangen, so kann er diesen Umstand der CPU
oder einem Bus Master per Interrupt melden, die die Daten dann abholen
können.
PCI-Bus-Initiators, die dem Master entsprechen, können im Unterschied
dazu über alle Ressourcen des Systems verfügen, also auch auf
alle PCI-Devices zugreifen.
Sie können eigenständig und unabhängig von der Host-CPU
Zyklen initiieren und Zugriffe und Transfers durchführen. Solch ein
Zugriff wird initiiert, indem der
Initiator die Kontrolle über die Steuersignale übernimmt
und die Adressen generiert sowie Beginn und Länge einer Bus Transaktion
bestimmt. Weiterhin betreibt er
ein Handshake mit dem Target, wodurch die Anzahl der Wartezustände
definiert wird.
Beide Device-Arten sind in der Lage Burst-Transfers zu bedienen, aber
nur der Initiator ist in der Lage sie zu initiieren. Burst-Übertragung
bedeutet, daß nicht jeder
Datenblock (z.B. 1 DWord, also 32 Bit) mit seiner dazugehörigen
Adresse angefordert werden muß, sondern nur die Adresse des ersten
Datenblocks und die Daten
danach einfach der Reihe nach übertragen werden. Dies funktioniert
natürlich nur, wenn im Speicher aufeinanderfolgende Daten abgerufen
werden, was in der Praxis
relativ häufig vorkommt. Folgen die benötigten Daten im Speicher
nicht aufeinander, muß allerdings weiterhin jedes DWord mit seiner
entsprechenden Adresse
angefordert werden. Der Burst beim PCI-Bus ist praktisch unbegrenzt,
was nur hier der Fall ist. Als Vergleich, beim VL-Bus ist er auf 4 DWords
begrenzt.
Im Prinzip kann beim PCI-Bus jede Karte ein Master sein. Eine Arbitrierungslogik
entscheidet welcher Master als nächstes an der Reihe ist, wenn mehrere
Master
Anspruch auf den Bus erheben. Die Arbitration selbst erfolgt im Hintergrund
(overlapped Arbitration) mit Hilfe slotspezifischer Steuerleitungen. Ein
Watch-Dog-Timer überwacht, daß ein Master den Bus nicht
zu lange belegt. Wird die zugestandene Zeit überschritten und ein
anderer Master will Daten übertragen,
entzieht der Watch-Dog dem ersten den Bus. Dadurch wird verhindert,
daß abgestürzte Devices den beanspruchten Bus nicht wieder freigeben
(Deadlocks).
Neben den Initialisierungs- und Arbitrierungszyklen gibt es nur noch
einen weiteren Grundzyklus für Datentransfers. Über Frame- und
Stoping-Leitung einigen sich
Initiator und Target darüber, ob ein Burst- (Auto incremental
Burst Mode) oder ein Non-Burst-Zyklus gewünscht wird. Im Non-Burst-Transfer
benötigt ein Read 3
und ein Write 2 Takte pro DWord, womit sich bei 33 MHz Bustakt eine
Transferrate von 44 MByte/s beim Read und 66 MByte/s beim Write ergibt.
Im
Burst-Mode werden normalerweise größere Blöcke (ab
4 DWords) übertragen. Beim Read ist dies ein 3-1-1-1-...-Burst (105
MByte/s) und beim Write ein
2-1-1-1-...-Burst (117 MByte/s). Da die Burstlänge nur durch den
Adressbereich begrenzt wird, ist ein maximaler Wert von theoretisch 266
MByte/s möglich.
Um die Anwenderfreundlichkeit des Busses zu erhöhen, unterstützt
PCI die automatische Konfiguration von Devices (plug and play). Das PCI-BIOS
auf dem
Motherboard erkennt beim Booten jede der eingestellten Karten und konfiguriert
sie automatisch. Sollten zwischen zwei PCI-Karten unlösbare Konflikte
auftreten,
so wird eine der Karten einfach abgeschalten. Dies geschieht aber sehr
selten, da das BIOS in der Lage ist, die von den verschiedenen Karten benutzten
Ressourcen,
wie Port- und Memoryadressen sowie DMA-Kanäle, selbständig
zu ändern. Belegen z.B. zwei Karten den gleichen I/O-Port, so wird
die Adresse einer der Karten
vom BIOS gewechselt. Anders verhält es sich bei den Interrupts
(IRQ). Freie IRQ's sind im PC eh Mangelware, besonders aber seit immer
mehr Netzwerk-,
Sound-, Fax- oder sonstige Erweiterungskarten die Computer bis auf
den letzten Steckplatz füllen. Da ist es oft nicht leicht, noch einen
freien IRQ für die neue
Erweiterungskarte zu finden. Der PCI-Bus kennt zwei Möglichkeiten
dies zu umgehen. Erstens können gemäß Spezifikation alle
IRQ's mehrfach benutzt werden
(Interrupt-Sharing). Zweitens lassen sich die Interruptleitungen der
PCI-Karten durch Jumper- oder BIOS-Einstellungen auf jeden freien Interrupteingang
des
Interruptcontrollers schalten. Die PCI-Spezifikation sieht vor, daß
für jeden PCI-Slot vier Interrupts zur Verfügung stehen (A, B,
C und D). Davon wird
normalerweise nur der Interrupt A genutzt. Dieser Interrupt wird nun
für jeden PCI-Slot einzeln auf einen PC-Interrupt gelegt. Zum Beispiel
A von Slot 1 auf IRQ 5,
A von Slot 2 auf IRQ 3 und A von Slot 3 auf IRQ 7. Desweiteren schlägt
die PCI-Spezifikation vor, daß die Interrupts B, C und D nur von
Karten, die mehr als
einen Interrupt benötigen, benutzt werden. In der Praxis sah es
aber am Anfang (erste Hälfte 1994) noch ganz anders aus. Bei damals
erhältlichen Boards lag
entweder nur einer der Interrupts am Slot an, oder es standen alle
vier Interrupts zur Verfügung, aber sie ließen sich nicht von
Slot zu Slot unabhängig belegen. Dies
drohte eine der wichtigsten Stärken von PCI zu zerstören,
die exakte Spezifikation. Ein weiteres schwerwiegendes Problem stellten
einige BIOS-Versionen dar, die
nur die PCI-Karten erkannten, die zu der Zeit existierten. Glücklicherweise
residierte bei allen PCI-Boards das BIOS in einem sogenannten Flash-Memory
(Flash-ROM). Das bedeutet, daß man jederzeit ein neues BIOS von
Diskette auf das Board überspielen kann. Hat das BIOS herausgefunden,
welche Ressourcen
von der PCI-Karte benötigt werden, steht ein 256 Byte großer
Konfigurationsbereich zur Verfügung, um diese Parameter zu speichern.
Da PCI nicht nur auf die Prozessoren der INTEL-Architektur beschränkt
ist, können verschiedene Karten-BIOS-Versionen, z.B. für Alpha-
oder Power-PC,
gleichzeitig verwaltet werden. Je nach CPU wählt das BIOS einen
der drei möglichen Einsprungspunkte des Karten-BIOS aus. Diese Fähigkeit
ist besonders
wichtig, da sowohl APPLE (Power-PC) als auch DEC (Alpha) PCI unterstützen.
Somit können alle Kartenhersteller ein einheitliches ROM für
alle drei Plattformen
anbieten.
In der Version 2.0 der PCI-Spezifikation ist unter anderem die Erweiterung
auf 64 Bit enthalten, die abwärtskompatibel zur 32 Bitversion ist.
Hierfür ist allerdings ein
längerer bzw. ein zusätzlicher Stecker notwendig. Durch den
gemultiplexten Daten- und Adreß-Bus stehen somit 17 x 109 TByte an
adressierbarem Speicher zur
Verfügung.
Eine weitere Neuerung dieser Version ist die 3,3 Volt Variante des PCI-Bus,
denn neuere CPUs (jüngere 486er und Pentiums) und wahrscheinlich auch
die
zukünftigen Rechner werden mit 3,3 Volt betrieben werden.
Die aktuelle Spezifikation 2.1 beseitigt einige Zweideutigkeiten und
erweitert den PCI-Konfigurationsbereich um eine Sub-Vendor- und eine Sub-Device-Kennung,
was vor allem von den Grafikkartenherstellern gefordert worden war,
um Plug&Play-Betriebssystemen eine Chance zu geben, herstellerspezifsche
Treiber auch dann
automatisch zu laden, wenn mehrere Anbieter den selben Grafikchip verwenden.
Eine weitere Klarstellung gab es im Bereich des Interrupt-Routings,
wo es jetzt im Gegensatz zu früheren Versionen erstmals einen klar
definierten Algorithmus gibt,
nach dem die systemspezifischen Interruptkanäle (IRQs) auf die
Interruptleitungen des PCI-Bus verteilt werden. Mit der Version 2.1 verabschiedet
sich der PCI-Bus
auch vom Bus-Konzept bei Interrupts, d.h., INT A von Slot 1 ist nicht
jetzt nicht mehr zwangsweise mit INT A von Slot 2 usw. verbunden. Jetzt
ist es vielmehr so,
daß die systemspezifischen verfügbaren IRQs zuerst auf die
einzelnen PCI-Slots verteilt werden und das Interrupt-Sharing erst zum
tragen kommt, wenn mehr
Interrupts durch PCI-Devices angefordert werden, als das System zur
Verfügung stellen kann.
Die letzte wichtige Neuerung ist die 66-MHz-Option. Damit diese abwärtskompatibel
zur alten 33 MHz-Version ist, gibt es allerdings einen Haken. Steckt nämlich
in
einem 66-MHz-System auch nur eine 33-MHz-Karte, so arbeiten alle Komponenten
mit 33 MHz. Damit ein Board nun nicht versehentlich mit 66 MHz läuft,
wenn
eine 33-MHz-Karte eingesteckt ist, wurde der 66-MHz-Enable-Pin (M66EN)
auf einen bisher mit Masse belegten Kontakt (Pin B49) gelegt.
Im Juni 1992, das heißt zu dem Zeitpunkt als der PCI-Bus das erste
mal in der Öffentlichkeit vorgestellt wurde, haben sich namhafte Firmen
aus der gesamten
Computerindustrie (einschließlich INTEL) zur PCI Special Interest
Group (SIG) zusammengeschlossen, um den PCI-Bus als offenen, nicht proprietären
Standard zu
promoten und weiterzuentwickeln. Inzwischen sind mehr als 300 Firmen
einschließlich verschiedener Halbleiterhersteller, Computer- und
Zusatzkartenhersteller
aktive Mitglieder der PCI SIG, der jeder für 2500 US-$ im Jahr
beitreten kann, was auch kleineren Firmen die Möglichkeit gibt aktiv
an der Entwicklung des
PCI-Bus teilzunehmen.
|
|
|
|
|
|
| Busart |
|
|
|
|
| Taktfrequenz in MHz |
|
|
|
|
| Datenbusbreite in Bit |
|
|
|
|
| Adreßbusbreite in Bit |
|
|
|
|
| Anzahl Devices |
|
|
|
|
| Anzahl Slots |
|
|
|
|
| max. Burstlänge |
|
|
|
|
| Datenraten bei 33 MHz, in MByte/s | ||||
| Non-Burst-Read |
|
|
|
|
| Non-Burst-Write |
|
|
|
|
| Burst-Read |
|
|
|
|
| Burst-Write |
|
|
|
|
| Datenraten bei 66 MHz, in MByte/s | ||||
| Non-Burst-Read |
|
|
||
| Non-Burst-Write |
|
|
||
| Burst-Read |
|
|
||
| Burst-Write |
|
|
||