Periphere Komponentenverbindung
PCI Lokaler Bus | |
Drei 5-Volt 32-Bit PCI -Expansionsstätten auf a Hauptplatine (PC -Halterung auf der linken Seite) | |
Jahr geschaffen | 22. Juni 1992[1] |
---|---|
Erstellt von | Intel |
Ersetzt | IST EIN, Eisa, MCA, VLB |
Ersetzt durch | PCI Express (2004) |
Breite in Bits | 32 oder 64 |
Geschwindigkeit | Halbduplex:[2] 133Mb/s (32-Bit bei 33 MHz-die Standardkonfiguration) 266 MB/s (32-Bit bei 66 MHz) 266 MB/s (64-Bit bei 33 MHz) 533 MB/s (64-Bit bei 66 MHz) |
Stil | Parallel |
Hotplugging -Schnittstelle | Optional |
Webseite | www |
Periphere Komponentenverbindung (PCI)[3] ist ein lokal Computer Bus zum Anbringen Hardware- Geräte in a Computer und ist Teil des PCI Local Bus Standard. Der PCI -Bus unterstützt die Funktionen auf a Prozessorbus aber in einem standardisierten Format, das unabhängig von jedem bestimmten ist Prozessor's Heimatbus. Geräte, die mit dem PCI -Bus verbunden sind Busmeister direkt mit seinem eigenen Bus verbunden werden und werden in den Prozessor -Adressen zugewiesen Adressraum.[4] Es ist ein parallel Bus, synchron zu einer einzigen Busuhr. Angehängte Geräte können entweder die Form eines annehmen Integrierter Schaltkreis auf die Hauptplatine (genannt planares Gerät in der PCI -Spezifikation) oder ein Erweiterungskarte Das passt in einen Schlitz. Der PCI Local Bus wurde erstmals in implementiert in IBM PC -Kompateien, wo es die Kombination von mehreren langsam verdrängte Branchenstandardarchitektur (ISA) Slots und ein schnelles Vesa Local Bus (VLB) Steckplatz als Buskonfiguration. Anschließend wurde es für andere Computertypen übernommen. Zu den in PCs verwendeten PCI -Karten gehören: Netzwerkkarten, Soundkarten, Modems, zusätzliche Ports wie universeller Serienbus (USB) oder Serie, TV -Tunerkarten und Festplatte Hostadapter. PCI Grafikkarten Ersetzt ISA- und VLB -Karten bis zum Aufstehen Bandbreite Benötigt die Fähigkeiten von PCI. Die bevorzugte Schnittstelle für Grafikkarten wurde dann Beschleunigter Grafikport (AGP), ein Superset von PCI, bevor PCI Express Platz macht.[5]
Die erste Version von PCI, die in Einzelhandelsdesktop -Computern gefunden wurde, war a 32-Bit Bus mit einem 33MHz Busuhr und 5 V -Signalübertragung, obwohl der PCI 1.0 -Standard für a bereitgestellt wurde 64-Bit Variante auch.[Klarstellung erforderlich] Diese haben eine, die in der Karte Kerbe lokalisiert. Version 2.0 des PCI -Standards führte 3,3 V -Steckplätze ein, die durch einen umgedrehten physischen Stecker physisch unterschieden wurden, um ein versehentliches Einsetzen von 5 V -Karten zu verhindern. Universelle Karten, die auf beiden Spannungen arbeiten können, haben zwei Kerben. Version 2.1 des PCI -Standards führte den optionalen 66 -MHz -Betrieb ein. Eine serverorientierte Variante von PCI, PCI erweitert (PCI-X) mit Frequenzen bis zu 133 MHz für PCI-X 1,0 und bis zu 533 MHz für PCI-X 2.0 betrieben. Ein interner Stecker für Laptopkarten, genannt Mini PCI, wurde in Version 2.2 der PCI -Spezifikation eingeführt. Der PCI -Bus wurde auch für einen externen Laptop -Steckerstandard übernommen - der Cardbus.[6] Die erste PCI -Spezifikation wurde von entwickelt von Intel, aber die anschließende Entwicklung des Standards wurde zur Verantwortung der Verantwortung des PCI Special Interest Group (PCI-sig).[7]
PCI und PCI-X werden manchmal als entweder bezeichnet Parallele PCI oder Konventionelle PCI[8] sie technologisch von ihrem neueren Nachfolger zu unterscheiden PCI Express, die a angenommen hat Serie, Spurbasierte Architektur.[9][10] Die Blütezeit von PCI auf dem Desktop -Computermarkt betrug ungefähr 1995 bis 2005.[9] PCI und PCI-X sind für die meisten Zwecke veraltet. Im Jahr 2020 sind sie jedoch immer noch auf modernen Desktops für die Zwecke von üblich Rückwärtskompatibilität und die niedrigen relativen Kosten zu produzieren. Eine weitere gemeinsame moderne Anwendung paralleler PCI ist in Industrie -PCs, wo viele spezialisierte Erweiterungskarten, die hier verwendet wurden, nie zu PCI Express übergegangen sind, genau wie bei einigen ISA -Karten. Viele Arten von Geräten, die früher auf PCI -Erweiterungskarten erhältlich sind, sind jetzt üblicherweise in Motherboards oder in USB- und PCI -Express -Versionen integriert.
Geschichte

Die Arbeit an PCI begann am Intel Architekturlabors (IAL, auch Architekturentwicklungslabor) c.1990. Ein Team von IAL IAL -Ingenieuren definierte die Architektur und entwickelte einen Proof of Concept Chipsatz und Plattform (Saturn), der mit Teams in den Desktop -PC -Systemen des Unternehmens und den Kernlogikproduktorganisationen zusammengearbeitet hat.
PCI wurde sofort auf Servern verwendet und ersetzt Mikrokanalarchitektur (MCA) und Erweiterte Branchenstandardarchitektur (EISA) als Server -Erweiterungsbus der Wahl. In den Mainstream -PCs war PCI langsamer zu ersetzen VLBund erhielt erst Ende 1994 in der zweiten Generation eine signifikante Marktdurchdringung Pentium Stck. Bis 1996 war VLB so gut wie ausgestorben, und die Hersteller hatten PCI sogar für eingesetzt Intel 80486 (486) Computer.[11] EISA wurde weiterhin neben PCI bis 2000 verwendet. Apple Computer PCI für Profi übernommen Power Macintosh Computer (ersetzen Nubus) Mitte 1995 und der Verbraucher Performa Produktlinie (Ersetzen von LC Prozessor direkter Slot (PDS)) Mitte 1996.
Außerhalb des Servermarktes blieb die 64-Bit-Version von Plain PCI in der Praxis jedoch selten.[12] Obwohl es zum Beispiel von allen verwendet wurde (Post-IMAC) G3 und G4 Power Macintosh Computers.[13]
Spätere Überarbeitungen von PCI fügten neue Funktionen und Leistungsverbesserungen hinzu, einschließlich einer 66MHz 3.3V Standard und 133 MHz PCI-Xund die Anpassung der PCI -Signalübertragung an andere Formfaktoren. Sowohl PCI-X 1.0B als auch PCI-X 2.0 sind mit einigen PCI-Standards rückwärts kompatibel. Diese Überarbeitungen wurden auf Serverhardware verwendet, aber die PC-Hardware für Verbraucher blieb fast alle 32-Bit, 33 MHz und 5 Volt.
Die PCI-Sig führte die Serie ein PCI Express in c.2004. Seitdem haben die Motherboardhersteller zunehmend weniger PCI -Slots zugunsten des neuen Standards aufgenommen. Viele neue Motherboards bieten Ende 2013 überhaupt keine PCI -Slots an.
Spezifikation | Jahr | Zusammenfassung ändern[15] |
---|---|---|
PCI 1.0 | 1992 | Ursprüngliches Problem |
PCI 2.0 | 1993 | Integrierte Anschluss- und Add-In-Karten-Spezifikation |
PCI 2.1 | 1995 | Aufbaute Erläuterungen und zusätzliches 66 MHz -Kapitel hinzugefügt |
PCI 2.2 | 1998 | Eingebaut Ecnsund verbesserte Lesbarkeit |
PCI 2.3 | 2002 | Incorporated ECNs, Errata und gelöschtes 5 Volt-Nur-Taste-Add-In-Karten gelöscht |
PCI 3.0 | 2004 | Entfernung der Unterstützung für 5,0 Volt Keyed System Board Connector |
Autokonfiguration
PCI liefert separate Speicher und Speicher-abgebildete I/O Portadressenräume für die x86 Prozessorfamilie, 64 und 32 Bit, beziehungsweise. Adressen in diesen Adressräume werden von Software zugewiesen. Ein dritter Adressraum, der genannt wird PCI -Konfigurationsraum, das ein festes Adressierungsschema verwendet, ermöglicht es der Software, die Menge an Speicher- und E/A -Adressraum zu bestimmen, die jedes Gerät benötigt. Jedes Gerät kann bis zu sechs Bereiche des Speicherplatzes anfordern oder Input-Output (E/O) Portraum über seine Konfigurationsraumregister.
In einem typischen System die Firmware (oder Betriebssystem) Fragen Sie alle PCI -Busse zur Startzeit ab (über PCI -Konfigurationsraum) Um herauszufinden, welche Geräte vorhanden sind und welche Systemressourcen (Speicherplatz, E/A -Raum, Interrupt -Linien usw.) jeweils benötigt. Anschließend verteilt es die Ressourcen und teilt jedem Gerät mit, was seine Zuweisung ist.
Der PCI -Konfigurationsraum enthält außerdem eine kleine Menge an Geräte -Typinformationen, mit denen ein Betriebssystem für die Auswahl von Geräte -Treibern oder zumindest einen Dialog mit einem Benutzer über die Systemkonfiguration betrieben wird.
Geräte können an Bord haben Nur-Lese-Speicher (Rom) mit ausführbarem Code für x86 oder enthalten Pa-risc Prozessoren, an Offene Firmware Fahrer oder ein Option ROM. Diese werden in der Regel für Geräte benötigt, die während des Systemstarts verwendet werden, bevor Gerätetreiber vom Betriebssystem geladen werden.
Außerdem gibt es PCI -Latenz -Timer das sind ein Mechanismus für PCI-Bus-Mastering Geräte, um den PCI -Bus fair zu teilen. "Fair" bedeutet in diesem Fall, dass Geräte keinen so großen Teil der verfügbaren PCI -Busbandbreite verwenden, dass andere Geräte nicht in der Lage sind, die erforderlichen Arbeiten zu erledigen. Beachten Sie, dass dies nicht für PCI Express gilt.
Wie dies funktioniert, ist, dass jedes PCI-Gerät, das im Bus-Master-Modus betrieben werden kann, einen Timer implementieren muss, der als Latenz-Timer bezeichnet wird und die Zeit, die das Gerät den PCI-Bus aufbewahren kann, einschränkt. Der Timer beginnt, wenn das Gerät Bus besitzt, und zählt mit der PCI -Uhr. Wenn der Zähler Null erreicht, muss das Gerät den Bus freigeben. Wenn keine anderen Geräte auf Busbesitz warten, kann es einfach erneut den Bus nehmen und mehr Daten übertragen.[16]
Interrupts
Geräte müssen ein Protokoll befolgen, damit die unterbrechen Linien können geteilt werden. Der PCI -Bus enthält vier Interrupt -Stifte. Später können bis zu 8 PCI -Geräte dieselbe Interrupt -Linie in APIC -Systemen teilen, die für jedes Gerät alle verfügbar sind. Sie sind jedoch nicht parallel wie die anderen PCI -Buslinien verkabelt. Die Positionen der Interrupt -Linien drehen sich zwischen Slots. Was für ein Gerät als INTA# Pin erscheint, ist intb# zum nächsten und in der danach in INTC# zum einen. Ein-Funktionsgeräte verwenden normalerweise ihre INTA# für die Interrupt-Signalisierung, sodass die Gerätelast auf die vier verfügbaren Interrupt-Stifte ziemlich gleichmäßig verteilt ist. Dies lindert ein häufiges Problem beim Teilen von Interrupts.
Die Zuordnung von PCI-Interrupt-Linien auf System-Interrupt-Linien über die PCI-Hostbrücke ist implementierungsabhängig. Plattformspezifisches grundlegendes Eingangs-/Ausgangssystem (BIOS) Code soll dies wissen und das Feld "Interrupt -Zeile" in den Konfigurationsraum jedes Geräts festlegen, mit dem IRQ angeschlossen ist.
PCI -Interruptlinien sind Ebene ausgelöscht. Dies wurde ausgewählt Kantenauslöser Um einen Vorteil bei der Wartung einer gemeinsam genutzten Interrupt -Linie und zur Robustheit: Edge -ausgelöste Interrupts sind leicht zu übersehen.
Spätere Überarbeitungen der PCI -Spezifikation unterstützen Unterstützung für unterschriebene Interrupts. In diesem System signalisiert ein Gerät seinen Bedarf an Dienst, indem er eine Speicherschreibe ausführt, anstatt eine dedizierte Zeile zu gründen. Dies lindert das Problem der Knappheit der Interrupt -Linien. Auch wenn die Interrupt-Vektoren weiterhin geteilt werden, erleidet sie nicht die gemeinsam genutzten Interrupts. Es wird auch das Routing -Problem behoben, da der Speicherschreibungsschreiber zwischen Gerät und Host nicht unvorhersehbar geändert wird. Schließlich, weil die Nachrichtensignalisierung lautet im BandEs löst einige Synchronisationsprobleme, die mit veröffentlichten Schreibvorgängen auftreten können, und außerhalb der Bandbreite Linien unterbrechen.
PCI Express Hat überhaupt keine physischen Interrupt -Linien. Es verwendet ausschließlich meldungssignale Interrupts.
Herkömmliche Hardwarespezifikationen

Diese Spezifikationen repräsentieren die häufigste Version von PCI, die in normalen PCs verwendet werden:
- 33,33 MHz Uhr mit synchron Transfers
- Spitzenübertragungsrate von 133Mb/s (133 Megabyte pro Sekunde) für 32-Bit-Busbreite (33,33 MHz × 32 Bit ÷ 8 Bit/Byte = 133 mb/s)
- 32-Bit Busbreite
- 32- oder 64-Bit-Speicheradressenraum (4Gib oder 16EIB)
- 32-Bit-E/A-Portraum
- 256-Byte (pro Gerät) Konfigurationsraum
- 5-Volt-Signalübertragung
- Reflektierte Wellenschaltung
Die PCI -Spezifikation bietet auch Optionen für 3.3 V -Signale. 64-Bit Busbreite und 66-MHz-Einstellung, diese werden jedoch nicht außerhalb des PCI-X-Supports auf Server-Motherboards auftreten.
Der PCI -Bus -Arbiter führt im PCI -Bus eine Bus -Schiedsgerichtsbarkeit unter mehreren Meistern durch. Eine beliebige Anzahl von Bus -Masters kann im PCI -Bus sowie Anfragen für den Bus wohnen. Ein Paar von Anfragen und Zuschusssignalen ist jedem Busmaster gewidmet.
Kartenspannung und Karton

Typische PCI -Karten haben je nach Signalspannung entweder ein oder zwei wichtige Kerben. Karten, die 3,3 Volt erfordern, haben 56,21 mm von der Karten -Rücklage. Diejenigen, die 5 Volt benötigen, haben 104,47 mm von der Rückplatte. Auf diese Weise können Karten nur in Slots mit einer Spannung eingebaut werden, die sie unterstützen. "Universal Cards", die eine der beiden Spannungen akzeptieren, haben beide wichtige Kerben.
Anschlussnagel
Der PCI -Anschluss ist definiert als 62 Kontakte auf jeder Seite der Kantenanschluss, aber zwei oder vier davon werden durch wichtige Kerben ersetzt, sodass eine Karte auf jeder Seite 60 oder 58 Kontakte hat. Seite A bezieht sich auf die "Lötseite" und Seite B bezieht Wird die Rückplatte links haben. Die Pinout von B und A -Seiten sind wie folgt und schauen in den Motherboard -Anschluss (Pins A1 und B1 sind der Rückplatte am nächsten).[15][17][18]
Stift | Seite b | Seite A | Kommentare | ||
---|---|---|---|---|---|
1 | –12 V | Trst# | Jtag Portstifte (optional) | ||
2 | Tck | +12 v | |||
3 | Boden | TMS | |||
4 | Tdo | TDI | |||
5 | +5 v | +5 v | |||
6 | +5 v | Inta# | Stifte unterbrechen (Open-Drain) | ||
7 | Intb# | INTC# | |||
8 | Intd# | +5 v | |||
9 | PRSNT1# | Reserviert | Niedrig gezogen, um 7,5 oder 25 W erforderlich anzuzeigen | ||
10 | Reserviert | Iopwr | +5 V oder +3,3 V | ||
11 | PRSNT2# | Reserviert | Niedrig gezogen, um 7,5 oder 15 W erforderlich anzuzeigen | ||
12 | Boden | Boden | Schlüsselkerbe für 3.3 V-Kapazierkarten | ||
13 | Boden | Boden | |||
14 | Reserviert | 3.3 V AUX | Standby-Leistung (Optional) | ||
15 | Boden | RST# | Bus Reset | ||
16 | Clk | Iopwr | 33/66 MHz Uhr | ||
17 | Boden | Gnt# | Buszuschuss von Motherboard zu Karte | ||
18 | Req# | Boden | Busanfrage von Karte zu Motherboard | ||
19 | Iopwr | PME# | Stromverwaltungsereignis (optional) 3.3 V, Open Drain, aktiv niedrig.[19] | ||
20 | AD [31] | AD [30] | Adresse/Datenbus (obere Hälfte) | ||
21 | AD [29] | +3.3 v | |||
22 | Boden | AD [28] | |||
23 | AD [27] | AD [26] | |||
24 | AD [25] | Boden | |||
25 | +3.3 v | AD [24] | |||
26 | C/be [3]# | Idsel | |||
27 | AD [23] | +3.3 v | |||
28 | Boden | AD [22] | |||
29 | AD [21] | AD [20] | |||
30 | AD [19] | Boden | |||
31 | +3.3 v | AD [18] | |||
32 | AD [17] | AD [16] | |||
33 | C/be [2]# | +3.3 v | |||
34 | Boden | RAHMEN# | Bustransfer in Arbeit | ||
35 | Irdy# | Boden | Initiator bereit | ||
36 | +3.3 v | Trdy# | Zielbereit | ||
37 | Devsel# | Boden | Ziel ausgewählt | ||
38 | Pcixcap | Boden | PAUSE# | PCI-X fähig; Zielanfragen stehen an | |
39 | SPERREN# | +3.3 v | Verschlossene Transaktion | ||
40 | Perr# | Smbclk | Sdone | Paritätsfehler; Smbus Uhr oder Snoop gemacht (veraltet) | |
41 | +3.3 v | Smbdat | SBO# | Smbus -Daten oder Snoop Backoff (veraltet) | |
42 | SERR# | Boden | Systemfehler | ||
43 | +3.3 v | PAR | Sogar Parität gegenüber AD [31:00] und c/sein [3: 0]# | ||
44 | C/be [1]# | AD [15] | Adresse/Datenbus (höhere Hälfte) | ||
45 | AD [14] | +3.3 v | |||
46 | Boden | AD [13] | |||
47 | AD [12] | AD [11] | |||
48 | AD [10] | Boden | |||
49 | M66en | Boden | AD [09] | ||
50 | Boden | Boden | Schlüsselkerbe für 5 V-Kapazierkarten | ||
51 | Boden | Boden | |||
52 | AD [08] | C/sei [0]# | Adresse/Datenbus (untere Hälfte) | ||
53 | AD [07] | +3.3 v | |||
54 | +3.3 v | AD [06] | |||
55 | AD [05] | AD [04] | |||
56 | AD [03] | Boden | |||
57 | Boden | AD [02] | |||
58 | AD [01] | AD [00] | |||
59 | Iopwr | Iopwr | |||
60 | ACK64# | Req64# | Für 64-Bit-Erweiterung; Keine Verbindung für 32-Bit-Geräte. | ||
61 | +5 v | +5 v | |||
62 | +5 v | +5 v |
64-Bit-PCI erweitert dies um weitere 32 Kontakte auf jeder Seite, die AD [63:32], C/BE [7: 4]#, das Par64-Paritätssignal und eine Reihe von Strom- und Bodenstiften bereitstellen.
Erdungsnadel | Null -Volt -Referenz |
---|---|
Power Pin | Versorgt der PCI -Karte Stromversorgung |
Ausgangsstift | Angetrieben von der PCI -Karte, erhalten vom Motherboard |
Initiatorausgabe | Vom Master/Initiator angetrieben, vom Ziel erhalten |
E/A -Signal | Kann je nach Betrieb vom Initiator oder Ziel angetrieben werden |
Zielausgabe | Vom Ziel angetrieben, vom Initiator/Master erhalten |
Eingang | Vom Motherboard angetrieben, erhalten von der PCI -Karte |
Offener Abfluss | Kann niedrig gezogen und/oder durch mehrere Karten erfasst werden |
Reserviert | Nicht derzeit verwendet, verbinden Sie sich nicht |
Die meisten Linien sind parallel mit jedem Steckplatz verbunden. Die Ausnahmen sind:
- Jeder Steckplatz hat einen eigenen REQ# -Angroße und GNT# Eingabe vom Motherboard -Arbiter.
- Jeder Steckplatz hat eine eigene IDSEL -Linie, die normalerweise mit einer bestimmten Anzeigenlinie verbunden ist.
- Tdo ist in den folgenden TDI des folgenden Slot-Kaspunkts geführt. Karten ohne Jtag Die Unterstützung muss TDI mit TDO verbinden, um die Kette nicht zu brechen.
- PRSNT1# und PRSNT2# für jeden Slot haben ihre eigenen Klimmzüge auf dem Motherboard. Das Motherboard kann diese Pins spüren (aber nicht), um das Vorhandensein von PCI -Karten und deren Stromanforderungen zu bestimmen.
- REQ64# und ACK64# werden einzeln auf 32-Bit-Slots gezogen.
- Die Interrupt -Pins inta# über intd# sind in verschiedenen Ordnungen mit allen Slots verbunden. (Inta# auf einem Steckplatz ist in der nächsten und intc# auf dem danach.)
Anmerkungen:
- IOPWR ist je nach Backplane +3,3 V oder +5 V. Die Slots haben auch einen Kamm an einem von zwei Stellen, die die Einführung von Karten, die nicht die entsprechende Schlüsselkerbe haben, verhindert, was die Unterstützung für diesen Spannungsstandard anzeigt. Universelle Karten haben beide wichtige Kerben und verwenden IOPWR, um ihre E/A -Signalpegel zu bestimmen.
- Die PCI -Sig fördert stark 3,3 V PCI -Signalübertragung,[15] Erfordernis Unterstützung dafür seit Standardrevision 2.3,[17] Aber die meisten PC -Motherboards verwenden die 5 -V -Variante. Während viele derzeit verfügbare PCI-Karten beide unterstützen und zwei wichtige Kerben haben, um anzuzeigen, dass es immer noch eine große Anzahl von 5 V-Nur-Karten auf dem Markt gibt.
- Der M66en -Pin ist ein zusätzlicher Boden in 5 V -PCI -Bussen in den meisten PC -Motherboards. Karten und Motherboards, die keinen 66 -MHz -Betrieb unterstützen, erden diesen Stift ebenfalls. Wenn alle Teilnehmer einen 66-MHz-Betrieb unterstützen, erhöht ein Pull-up-Widerstand auf dem Motherboard dieses Signal hoch und 66 MHz-Betrieb. Der Stift ist immer noch mit dem gemahlenen Boden durch Kondensatoren der Kopplung auf jeder Karte, um ihre zu erhalten AC Abschirmfunktion.
- Der PCIXCAP -Stift ist ein zusätzlicher Boden für PCI -Busse und -Karten. Wenn alle Karten und das Motherboard die unterstützen PCI-X Protokoll, ein Pull-up-Widerstand auf dem Motherboard, erhöht dieses Signal hoch und der PCI-X-Betrieb ist aktiviert. Der Stift ist immer noch mit Kopplungskondensatoren auf jeder Karte mit dem Masse angeschlossen, um seine Wechselstromabrechnungsfunktion zu erhalten.
- Mindestens einer von PRSNT1# und PRSNT2# muss von der Karte geerdet werden. Die gewählte Kombination zeigt den Gesamtleistungsergrund der Karte (25 W, 15 W oder 7,5 W) an.
- SBO# und SDone sind Signale von einem Cache -Controller zum aktuellen Ziel. Sie sind keine Initiatorausgänge, sondern sind auf diese Weise gefärbt, weil es sich um Zieleingänge handelt.
- PME# (19 a) - Stromverwaltungsereignis (optional), das in PCI unterstützt wird Version 2.2 und höher. Es ist ein 3.3 v, Offener Abfluss, aktives niedriges Signal.[19] PCI -Karten können dieses Signal verwenden, um PME über den PCI -Socket direkt zu senden und zu empfangen Wake-on-Lan-Kabel.[20]
Mischung von 32-Bit- und 64-Bit-PCI-Karten in verschiedenen Breitenschlitzen


Die meisten 32-Bit-PCI-Karten funktionieren in 64-Bit-PCI-X-Steckplätzen ordnungsgemäß, aber die Busaktuhrenrate wird auf die Taktfrequenz der langsamsten Karte begrenzt, eine inhärente Einschränkung der gemeinsam genutzten Bustopologie von PCI. Wenn beispielsweise ein PCI 2,3, 66-MHz-Peripherieur in einen PCI-X-Bus mit 133 MHz installiert ist, ist der gesamte Bus-Backplane auf 66 MHz begrenzt. Um diese Einschränkung zu umgehen, haben viele Motherboards zwei oder mehr PCI/PCI-X-Busse, wobei ein Bus für Hochgeschwindigkeits-PCI-X-Peripheriegeräte und der andere Bus für allgemeine Peripheriegeräte bestimmt ist.
Viele 64-Bit-PCI-X-Karten sind so konzipiert, dass sie im 32-Bit-Modus arbeiten, wenn sie in kürzere 32-Bit-Steckverbinder eingefügt werden, mit einem gewissen Leistungsverlust.[21][22] Ein Beispiel hierfür ist der adaptec 29160 64-Bit Scsi Schnittstellenkarte.[23] Einige 64-Bit-PCI-X-Karten funktionieren jedoch nicht in Standard-32-Bit-PCI-Slots.[24][unzuverlässige Quelle?]
Durch die Installation einer 64-Bit-PCI-X-Karte in einem 32-Bit-Steckplatz wird der 64-Bit-Teil des Kartenkantenanschlusss nicht angeschlossen und übergehängt. Dies erfordert, dass keine Motherboardkomponenten positioniert sind, um den überhängenden Teil des Kartenkantenstecker mechanisch zu behindern.
Abmessungen
PCI -Klammern Höhen:
PCI -Kartenlängen (Standardhalterung & 3.3 V):[27]
- Kurzkarte: 169,52 mm;
- Lange Karte: 313,78 mm.
PCI -Kartenlängen (Low -Profile -Halterung & 3.3 V):[28]
- MD1: 121,79 mm;
- MD2: 169,52 mm;
- MD3: 243,18 mm.
Eine Klammer in voller Höhe
Ein niedrigem Profil eins
Mini PCI




Mini PCI wurde zur Verwendung in PCI Version 2.2 hinzugefügt Laptops; Es verwendet einen 32-Bit-, 33-MHz-Bus mit angetriebenen Verbindungen (nur 3,3 V; 5 V ist auf 100 mA begrenzt) und Unterstützung für Bus -Mastering und DMA. Die Standardgröße für Mini-PCI-Karten beträgt ungefähr ein Viertel ihrer Kollegen in voller Größe. Im Gegensatz zu Desktop -PCI -Karten mit Klammern, die Anschlüsse tragen, gibt es keinen Zugriff auf die Karte von außerhalb des Gehäuses. Dies begrenzt die Funktionen, die eine Mini -PCI -Karte erfüllen kann.
Viele Mini -PCI -Geräte wurden entwickelt, wie z. W-lan, Schnelles Ethernet, Bluetooth, Modems (häufig Winmodems), Soundkarten, Kryptografische Beschleuniger, Scsi, Ide–AN EINER, Sata Controller und Kombinationskarten. Mini-PCI-Karten können mit regelmäßiger PCI-ausgestatteter Hardware unter Verwendung von Mini-PCI-zu-PCI verwendet werden Konverter. Mini PCI wurde durch die viel schmaler PCI Express Mini -Karte
Technische Details von Mini PCI
Mini -PCI -Karten haben einen maximalen Stromverbrauch von 2 W, der die Funktionalität einschränkt, die in diesem Formfaktor implementiert werden kann. Sie müssen auch das CLKRUN -# PCI -Signal unterstützen, das zum Starten und Stoppen der PCI -Uhr für Stromverwaltungszwecke verwendet wird.
Es gibt drei Karte Formfaktoren: Karten vom Typ I, Typ II und Typ III. Der für jeden Typ verwendete Kartenanschluss umfasst: Typ I und II. Verwenden Sie einen 100-poligen Stacking-Stecker, während Typ III einen 124-poligen-Anschluss verwendet, d. H. Der Anschluss für Typ I und II unterscheidet sich von dem für Typ III, wo der Anschluss der Anschluss ist ist am Rande einer Karte, wie mit a So-dimm. Die zusätzlichen 24 Pins bieten die zusätzlichen Signale zur Route I/o Zurück durch den Systemanschluss (Audio, AC-Link, Lan, Telefonzeilenschnittstelle). Typ -II -Karten haben RJ11- und RJ45 -montierte Steckverbinder. Diese Karten müssen sich am Rande der Computer- oder Dockingstation befinden, damit die Anschlüsse RJ11 und RJ45 für den externen Zugang montiert werden können.
Typ | Karte auf Außenkante von Host-System | Verbinder | Größe (mm × mm × mm) | Kommentare |
---|---|---|---|---|
IA | Nein | 100-polige Stapelung | 7.5 × 70 × 45 | Große Z -Dimension (7,5 mm) |
Ib | 5.5 × 70 × 45 | Kleinere Z -Dimension (5,5 mm) | ||
Iia | Ja | 17,44 × 70 | × 45Große Z -Dimension (17,44 mm) | |
IIB | 5.5 × 78 × 45 | Kleinere Z -Dimension (5,5 mm) | ||
Iiia | Nein | 124-Pin Kartenkante | 2.4 × 59,6 × 50,95 | Größere Y -Dimension (50,95 mm) |
Iiib | 2.4 × 59,6 × 44,6 | Kleinere y -Dimension (44,6 mm) |
Mini PCI unterscheidet sich von 144-poligen Mikro-PCI.[29]
PCI -Bustransaktionen
Der PCI -Busverkehr besteht aus einer Reihe von PCI -Bustransaktionen. Jede Transaktion besteht aus einem Adressphase gefolgt von einem oder mehreren Datenphasen. Die Richtung der Datenphasen kann vom Initiator zu Target (Write Transaction) oder umgekehrt (Transaktion gelesen) sein, aber alle Datenphasen müssen in derselben Richtung liegen. Jede Partei kann die Datenphasen zu jedem Zeitpunkt innehalten oder stoppen. (Ein gemeinsames Beispiel ist ein PCI-Gerät mit niedriger Leistung, das nicht unterstützt Burst -Transaktionenund stoppt immer eine Transaktion nach der ersten Datenphase.)
Jedes PCI -Gerät kann eine Transaktion einleiten. Zunächst muss es eine Erlaubnis von einem PCI -Bus -Arbiter auf dem Motherboard beantragen. Der Arbiter gewährt eine der anspruchsvollen Geräte Erlaubnis. Der Initiator beginnt die Adressphase mit einer 32-Bit-Adresse plus a 4-Bit Befehlscode, wartet dann darauf, dass ein Ziel antwortet. Alle anderen Geräte untersuchen diese Adresse und einer von ihnen reagiert einige Zyklen später.
Die 64-Bit-Adressierung erfolgt mit einer zweistufigen Adressphase. Der Initiator sendet die niedrigen 32 Adressbits, begleitet von einem speziellen Befehlscode "Dual Adresszyklus". Geräte, die die 64-Bit-Adressierung nicht unterstützen, können einfach nicht auf diesen Befehlscode antworten. Im nächsten Zyklus überträgt der Initiator die hohen 32 Adressbits sowie den realen Befehlscode. Die Transaktion arbeitet ab diesem Zeitpunkt identisch. Um die Kompatibilität mit 32-Bit-PCI-Geräten zu gewährleisten, ist es verboten, einen Dual-Adress-Zyklus zu verwenden, wenn nicht erforderlich, d. H. Wenn die Adressbits hoher Ordnung alle Null sind.
Während der PCI-Bus 32 Bit pro Datenphase überträgt, überträgt der Initiator 4 Active-T-T-Tiefe-Byte-Signale, die angeben, welches angibt 8 Bit Bytes sind als signifikant zu betrachten. Insbesondere muss ein Schreiben nur die aktivierten Bytes im Ziel -PCI -Gerät beeinflussen. Sie sind für Speicherlesungen von geringer Bedeutung, aber I/A -Lesevorgänge könnten Nebenwirkungen haben. Der PCI-Standard ermöglicht explizit eine Datenphase ohne Bytes aktiviert, die sich als No-op verhalten muss.
PCI -Adressräume
PCI verfügt über drei Adressräume: Speicher, E/A -Adresse und Konfiguration.
Speicheradressen sind 32 Bit (optional 64 Bit) Größe, Unterstützung zwischengespeichert und kann Burst -Transaktionen sein.
E/A -Adressen dienen der Kompatibilität mit dem Intel x86 Architektur's I/A -Port Adressraum. Obwohl die PCI -Busspezifikation Burst -Transaktionen in einem Adressraum ermöglicht, unterstützen die meisten Geräte sie nur für Speicheradressen und nicht für E/A.
Endlich, PCI -Konfigurationsraum Bietet Zugriff auf 256 Bytes spezieller Konfigurationsregister pro PCI -Gerät. Jeder PCI -Slot erhält einen eigenen Konfigurationsraum -Adressbereich. Die Register werden verwendet, um Gerätespeicher und E/A -Adressbereiche zu konfigurieren, auf die sie aus Transaktionsinitiatoren reagieren sollten. Wenn ein Computer zum ersten Mal eingeschaltet wird, reagieren alle PCI -Geräte nur auf den Zugriff auf den Konfigurationsraum. Das BIOS des Computers scannt nach Geräten und weist ihnen Speicher- und E/A -Adressbereiche zu.
Wenn eine Adresse von keinem Gerät beansprucht wird, wird die Adressphase des Transaktionsinitiators einzeitlich veranlasst, dass der Initiator den Betrieb abbricht. Im Falle von Reads ist es üblich, in diesem Fall All-Ones für den Lesedatenwert (0xffffffffffffffs) zu liefern. PCI-Geräte versuchen daher im Allgemeinen, die Verwendung des All-Ones-Wertes in wichtigen Statusregistern zu vermeiden, sodass ein solcher Fehler durch Software leicht erkannt werden kann.
PCI -Befehlscodes
Es gibt 16 mögliche 4-Bit-Befehlscodes, und 12 davon werden zugewiesen. Mit Ausnahme des eindeutigen Dual -Adress -Zyklus zeigt das am wenigsten signifikante Bit des Befehlscodes an, ob die folgenden Datenphasen eine Lektüre sind (Daten, die vom Ziel an Initiator gesendet wurden) oder ein Schreiben (Daten, die von einem Initiator an das Ziel gesendet werden). PCI -Ziele müssen den Befehlscode sowie die Adresse untersuchen und nicht auf Adressphasen antworten, die einen nicht unterstützten Befehlscode angeben.
Die Befehle, die sich auf Cache -Zeilen beziehen PCI -Konfigurationsraum Cache -Leitungsgröße Register ordnungsgemäß eingerichtet; Sie können erst dann verwendet werden, wenn dies geschehen ist.
- 0000: Interrupt bestätigen
- Dies ist eine spezielle Form des Lesezyklus, die implizit an den Interrupt -Controller gerichtet ist, der einen Interrupt -Vektor zurückgibt. Das 32-Bit-Adressfeld wird ignoriert. Eine mögliche Implementierung besteht darin, einen Interrupt -Anerkennungszyklus in einem ISA -Bus unter Verwendung einer PCI/ISA -Busbrücke zu generieren. Dieser Befehl ist für IBM PC -Kompatibilität; Wenn es keine gibt Intel 8259 Stil -Interrupt -Controller im PCI -Bus muss nie verwendet werden.
- 0001: Spezialzyklus
- Dieser Zyklus ist eine spezielle Sendung von Systemereignissen, an denen die PCI -Karte interessiert sein kann. Das Adressfeld eines speziellen Zyklus wird ignoriert, folgt jedoch eine Datenphase mit einer Nutzlastnachricht. Die aktuell definierten Nachrichten geben bekannt, dass der Prozessor aus irgendeinem Grund anhält (z. B. um Strom zu sparen). Kein Gerät reagiert jemals auf diesen Zyklus; Es wird immer mit einem Master -Abbruch beendet, nachdem die Daten mindestens 4 Zyklen im Bus gelassen haben.
- 0010: I/O lesen
- Dies führt eine Lektüre aus dem E/A -Raum aus. Alle 32 Bits der Lesadresse werden bereitgestellt, so dass ein Gerät (aus Kompatibilitätsgründen) weniger als 4 Bytes I/A -Register im Wert von weniger als 4 Bytes implementieren kann. Wenn das Byte Anforderungsdaten nicht innerhalb des von dem PCI-Gerät unterstützten Adressbereichs ermöglicht (z. B. eine 4-Byte-Lesung aus einem Gerät, das nur 2 Bytes des E/A-Adressraums unterstützt), muss er mit einem Zielabbruch beendet werden. Mehrere Datenzyklen sind unter Verwendung einer linearen (einfachen Inkrementierung) Burst -Bestellung zulässig.
- Der PCI -Standard entmutigt die Verwendung von E/A -Speicherplatz in neuen Geräten und bevorzugt, dass dies durch die Hauptspeicherzuordnung möglich ist.
- 0011: I/O schreiben
- Dies führt ein Schreiben in den I/A -Raum aus.
- 010x: Reserviert
- Ein PCI -Gerät darf nicht auf einen Adresszyklus mit diesen Befehlscodes reagieren.
- 0110: Speicherlesen
- Dies führt einen Lesezyklus aus dem Speicherraum aus. Da der kleinste Speicherplatz ein PCI -Gerät implementieren darf, beträgt 16 Bytes,[17][15]: §6.5.2.1 Die beiden am wenigsten signifikanten Bits der Adresse werden während der Adressphase nicht benötigt. Äquivalente Informationen kommen in den Datenphasen in Form von Byte -Select -Signalen ein. Sie geben stattdessen die Reihenfolge an, in der Burst -Daten zurückgegeben werden müssen.[17][15]: §3.2.2.2 Wenn ein Gerät die angeforderte Bestellung nicht unterstützt, muss es das erste Wort liefern und dann trennen.
- Wenn ein Speicherplatz als "vorabfestigbar" gekennzeichnet ist, muss das Zielgerät die Signale aus Signal aus dem Byte ausgewählt und immer 32 gültige Bits zurückgeben.
- 0111: Speicher schreiben
- Dies funktioniert ähnlich wie eine Speicherlesen. Die Signale aus dem Byte -Select sind in einem Schreiben wichtiger, da nicht ausgewählte Bytes nicht in den Speicher geschrieben werden dürfen.
- Im Allgemeinen sind PCI -Schreibvorgänge schneller als PCI liest, da ein Gerät die eingehenden Schreibdaten pufferen und den Bus schneller freigeben kann. Für eine Lektüre muss die Datenphase verzögert, bis die Daten abgerufen wurden.
- 100x: Reserviert
- Ein PCI -Gerät darf nicht auf einen Adresszyklus mit diesen Befehlscodes reagieren.
- 1010: Konfiguration gelesen
- Dies ähnelt einem E/A -Lesen, liest jedoch aus dem PCI -Konfigurationsraum. Ein Gerät muss nur antworten, wenn die niedrigen 11 -Bits der Adresse eine Funktion angeben und registrieren, die sie implementiert, und wenn das Signal des speziellen IDSEL -Signals geltend gemacht wird. Es muss die hohen 21 Bits ignorieren. Burst -Lesevorgänge (unter Verwendung einer linearen Inkrementierung) sind im PCI -Konfigurationsraum zulässig.
- Im Gegensatz zum E/A -Speicherplatz werden Standard -PCI -Konfigurationsregister definiert, so dass Lesevorgänge den Status des Geräts nie stören. Es ist möglich, dass ein Gerät Konfigurationsraumregister über die Standard -64 -Bytes hinausgeht, die Nebenwirkungen gelesen haben, dies ist jedoch selten.[30]
- Konfigurationsraumzugriffe haben häufig einige Verzögerungszyklen, damit die IDSEL -Linien stabilisieren können, was sie langsamer macht als andere Zugriffsformen. Ein Konfigurationsraumzugriff erfordert auch einen mehrstufigen Betrieb anstelle eines einzelnen Maschinenbefehls. Daher ist es am besten, sie während des Routinebetriebs eines PCI -Geräts zu vermeiden.
- 1011: Konfiguration schreiben
- Dies arbeitet analog zu einer Konfiguration gelesen.
- 1100: Speicher Multiple Lesen Sie mehrere
- Dieser Befehl ist identisch mit einem generischen Speicherlesen, enthält jedoch den Hinweis, dass ein langer Leseausbruch über das Ende der aktuellen Cache -Zeile hinausgeht, und das Ziel sollte intern Prefetch eine große Datenmenge. Ein Ziel darf dies immer als Synonym für eine generische Speicherlesen betrachten.
- 1101: Dual Adresszyklus
- Bei Zugriff auf eine Speicheradresse, die mehr als 32 Bit erforderlich ist, beginnt die Adressphase mit diesem Befehl und den niedrigen 32 Bit der Adresse, gefolgt von einem zweiten Zyklus mit dem tatsächlichen Befehl und den hohen 32 Bit der Adresse. PCI-Ziele, die die 64-Bit-Adressierung nicht unterstützen, können dies einfach als einen weiteren reservierten Befehlscode behandeln und nicht darauf reagieren. Dieser Befehlscode darf nur mit einem Adresswort ungleich Null verwendet werden. Es ist verboten, diesen Zyklus zu verwenden, wenn nicht erforderlich.
- 1110: Speicherlesezeile
- Dieser Befehl ist identisch mit einem generischen Speicherlesen, enthält jedoch den Hinweis, dass die Lektüre bis zum Ende der Cache -Zeile fortgesetzt wird. Ein Ziel darf dies immer als Synonym für eine generische Speicherlesen betrachten.
- 1111: Speicher schreiben und ungültig machen
- Dieser Befehl ist identisch mit einem generischen Speicherschreiben, ist jedoch mit der Garantie geliefert, dass ein oder mehrere ganze Cache -Zeilen geschrieben werden, wobei alle ausgewählten Byte aktiviert sind. Dies ist eine Optimierung für Schreibback-Caches, die den Bus schneiden. Normalerweise muss ein Schreibback-Cache, der schmutzige Daten hält, die Schreiboperation lange genug unterbrechen, um zuerst eigene schmutzige Daten zu schreiben. Wenn das Schreiben mit diesem Befehl ausgeführt wird, ist die zu schriftlichen Daten garantiert irrelevant und kann einfach im Writ-Back-Cache ungültig werden.
- Diese Optimierung wirkt sich nur auf den Snooping -Cache aus und macht keinen Unterschied zum Ziel, was dies als Synonym für den Befehl Speicher schreiben kann.
PCI -Buslatenz
Kurz nach der Veröffentlichung der PCI -Spezifikation wurde festgestellt Puffer Underlun oder in anderen Geräten überrannt. Empfehlungen zum Zeitpunkt einzelner Phasen in Revision 2.0 wurden in Revision 2.1 obligatorisch:[31]: 3
- Ein Ziel muss in der Lage sein, die anfängliche Datenphase (TRDY# und/oder Stopp#) innerhalb von 16 Zyklen des Beginns einer Transaktion zu vervollständigen.
- Ein Initiator muss jede Datenphase (iRdy##) innerhalb von 8 Zyklen ausfüllen.
Nach der Revision 2.1 müssen alle Initiatoren, die mehr als zwei Datenphasen platzen können, einen programmierbaren Latenzzeitgeber implementieren. Der Timer beginnt mit dem Start einer Transaktion Taktzyklen zu zählen (Initiator behauptet Rahmen#). Wenn der Timer abgelaufen ist und Der Arbiter hat GNT#entfernt, dann muss der Initiator die Transaktion bei der nächsten rechtlichen Gelegenheit beenden. Dies ist normalerweise die nächste Datenphase, aber Speicherschreib- und Ungültigkeitstransaktionen müssen bis zum Ende der Cache -Zeile fortgesetzt werden.
Verzögerte Transaktionen
Geräte, die diese Zeitbeschränkungen nicht erfüllen können, müssen eine Kombination von verwenden Gepostet writes (für Speicherschreibungen) und verzögerte Transaktionen (für andere Schreibvorgänge und alle Lesungen). In einer verzögerten Transaktion erfasst das Ziel die Transaktion (einschließlich der Schreibdaten) intern und abbricht (behauptet Stop# anstelle von TRDY#) die erste Datenphase. Der Initiator muss Wiederholen Sie genau die gleiche Transaktion später. In der Zwischenzeit führt das Ziel intern die Transaktion durch und wartet auf die neueste Transaktion. Wenn die erniedrigte Transaktion beobachtet wird, wird das gepufferte Ergebnis geliefert.
Ein Gerät kann das Ziel anderer Transaktionen sein, während eine verzögerte Transaktion abgeschlossen wird. Es muss sich an den Transaktionstyp, die Adresse, das Byte auswählen und (falls ein Schreib-) Datenwert und nur die richtige Transaktion abschließen.
Wenn das Ziel eine Grenze für die Anzahl der verzögerten Transaktionen hat, die es intern aufzeichnen kann (einfache Ziele können eine Grenze von 1 auferlegen), zwingt es diese Transaktionen zum Wiederholen, ohne sie aufzunehmen. Sie werden behandelt, wenn die aktuelle verzögerte Transaktion abgeschlossen ist. Wenn zwei Initiatoren dieselbe Transaktion versuchen, kann eine verzögerte Transaktion, die von einem begonnen wird, sein Ergebnis an den anderen liefert. Das ist harmlos.
Ein Ziel verlässt eine verzögerte Transaktion, wenn es einem Wiederholung erfolgreich ist, das gepufferte Ergebnis zu liefern, der Bus zurückgesetzt oder wenn 215= 32768 Taktzyklen (ungefähr 1 ms), ohne einen Wiederholung zu sehen. Letzteres sollte im normalen Betrieb niemals passieren, aber es verhindert a Sackgasse des gesamten Busses, wenn ein Initiator zurückgesetzt oder fehlfunktioniert wird.
PCI -Busbrücken
Der PCI -Standard ermöglicht es, dass mehrere unabhängige PCI -Busse durch Busbrücken angeschlossen werden, die bei Bedarf den Betrieb an einem Bus an einen anderen weiterleiten. Obwohl PCI eher viele Busbrücken benutzt, PCI Express Systeme verwenden viele PCI-to-PCI-Brücke, die normalerweise genannt werden PCI Express -Root -Port; Jeder PCI Express -Slot scheint ein separater Bus zu sein, der durch eine Brücke mit den anderen verbunden ist. Die PCI -Hostbrücke (normalerweise Nord brücke In x86 -Plattformen) zwischen CPU, Hauptspeicher und PCI -Bus.[32]
Gepostet writes
Wenn eine Busbrücke eine Transaktion in einem Bus sieht, der an den anderen weitergeleitet werden muss, muss die ursprüngliche Transaktion warten, bis die weitergeleitete Transaktion abgeschlossen ist, bevor ein Ergebnis fertig ist. Eine bemerkenswerte Ausnahme tritt im Fall von Speicherschreibungen auf. Hier kann die Brücke die Schreibdaten intern aufzeichnen (falls es Platz hat) und die Vervollständigung des Schreibens vor der Abschluss des weitergeleiteten Schreibens signalisieren. Oder tatsächlich, bevor es begonnen hat. Solche "gesendeten, aber noch nicht angekommenen" Schreibvorgänge werden als "veröffentlichte Schreibvorgänge" bezeichnet, analog mit einer Post -Mail -Nachricht. Obwohl sie eine großartige Gelegenheit zu Leistungsgewinnen bieten, sind die Regeln für das, was zulässig ist, etwas kompliziert.[33]
Kombinieren, Verschmelzen und Zusammenbruch
Der PCI -Standard ermöglicht Busbrücken, mehrere Bustransaktionen in eine größere Transaktion in bestimmten Situationen umzuwandeln. Dies kann die Effizienz des PCI -Busses verbessern.
- Kombinieren
- Schreiben Sie Transaktionen zu aufeinanderfolgenden Adressen möglicherweise zu einem längeren Schreiben, sofern die Reihenfolge der Zugriffe im Burst die gleiche ist wie die Reihenfolge des Originals. Es ist zulässig, zusätzliche Datenphasen mit allen Byte -Aktivitäten einzufügen, wenn die Schreibvorgänge fast aufeinanderfolgend sind.
- Verschmelzung
- Mehrere Schreibvorgänge in disjunkte Teile desselben Wortes können in ein einzelnes Schreiben mit mehrfacher Byte -Aktivierung verschmolzen werden. In diesem Fall werden Schreibvorgänge, die in einer bestimmten Reihenfolge an die Busbrücke präsentiert wurden, zusammengeführt, damit sie gleichzeitig beim Weiterleiten auftreten.
- Zusammenbruch
- Mehrere Schreibvorgänge in dieselbe Byte oder Bytes können nicht Seien Sie zum Beispiel kombiniert, indem Sie nur das zweite Schreiben durchführen und das erste Schreiben überspringen, das überschrieben wurde. Dies liegt daran, dass die PCI -Spezifikation ermöglicht, Nebenwirkungen zu haben.
PCI -Bussignale
PCI -Bustransaktionen werden durch fünf Hauptsteuersignale gesteuert, zwei vom Initiator einer Transaktion (Rahmen#und irdy#) und drei vom Ziel (Devsel#, TRDY#und Stopp#) angetrieben. Es gibt zwei zusätzliche Schiedsgerichtssignale (REQ# und GNT#), die zur Erhalt der Erlaubnis zur Initiierung einer Transaktion verwendet werden. Alle sind Aktiv niedrig, was bedeutet, dass der aktive oder behauptet Staat ist niedrig Stromspannung. Pull-up-Widerstände auf dem Motherboard sorgen dafür, dass sie hoch bleiben (inaktiv oder deasserted) Wenn nicht von einem Gerät angetrieben, aber der PCI -Bus hängt nicht von den Widerständen ab Rückgeld der Signalpegel; Alle Geräte fahren die Signale hoch für einen Zyklus zuvor hoch aufhören zu fahren die Signale.
Signalzeitpunkt
Alle PCI -Bussignale werden am steigenden Rand der Uhr abgetastet. Signale ändern sich nominal am fallenden Rand der Uhr und verleihen jedem PCI .
Der PCI -Bus erfordert, dass sich jedes Mal, wenn das Gerät, das ein PCI -Bussignal fährt, sich ändert Turnaround -Zyklus Muss zwischen dem Zeitpunkt, an dem das eine Gerät nicht mehr das Signal fährt, und das andere Gerät startet. Ohne dies könnte es einen Zeitraum geben, in dem beide Geräte das Signal treiben, was den Busbetrieb beeinträchtigen würde.
Die Kombination dieses Turnaround -Zyklus und die Anforderung, eine Steuerlinie für einen Zyklus hoch zu fahren, bevor sie aufhören, bedeutet, dass jede der Hauptsteuerungsleitungen für mindestens zwei Zyklen hoch sein muss, wenn die Besitzer wechseln. Das PCI -Bus -Protokoll ist so konzipiert, dass dies selten eine Einschränkung ist. Nur in wenigen Sonderfällen (insbesondere in Schnelle aufeinanderfolgende Transaktionen) Ist es notwendig, eine zusätzliche Verzögerung einzulegen, um diese Anforderung zu erfüllen?
Schiedsverfahren
Jedes Gerät in einem PCI -Bus, das als A als wir dienen kann Busmeister kann eine Transaktion mit jedem anderen Gerät einleiten. Um sicherzustellen, dass jeweils nur eine Transaktion eingeleitet wird, muss jeder Meister zunächst auf ein Bus -Zuschusssignal GNT#warten, von einem Schiedsrichter auf dem Motherboard. Jedes Gerät verfügt über eine separate Request -Line -REQ#, die den Bus anfordert. Der Schiedsrichter kann jedoch das Signal des Bus -Zuschusses an einem Gerät "parken", wenn keine aktuellen Anforderungen vorhanden sind.
Der Schiedsrichter kann GNN# jederzeit entfernen. Ein Gerät, das GNT# verliert, kann seine aktuelle Transaktion abschließen, starten jedoch möglicherweise nicht eine (durch Annahme von Rahmen#), es sei denn, GNN# behauptet den Zyklus, bevor er beginnt.
Der Schiedsrichter kann auch jederzeit GNT# zur Verfügung stellen, einschließlich der Transaktion eines anderen Meisters. Während einer Transaktion werden entweder Frame# oder irdy# oder beide geltend gemacht. Wenn beide deassert sind, ist der Bus im Leerlauf. Ein Gerät kann jederzeit eine Transaktion initiieren, in der GNT# geltend gemacht wird und der Bus im Leerlauf ist.
Adressphase
Eine PCI -Bus -Transaktion beginnt mit einer Adressphase. Der Initiator, der sieht, dass er GNT# hat und der Bus im Leerlauf ist, fährt die Zieladresse auf die AD [31: 0] -Zeilen, den zugehörigen Befehl (z. B. Speicherlesen oder I/O -Schreiben) auf dem C/BE [3) : 0]# Zeilen und zieht Rahmen# niedrig.
Jedes Gerät untersucht die Adresse und den Befehl und entscheidet, ob sie als Ziel reagieren, indem er Devsel#geltend macht. Ein Gerät muss reagieren, indem sie Devsel# innerhalb von 3 Zyklen geltend machen. Geräte, die versprechen, innerhalb von 1 oder 2 Zyklen zu antworten, sollen "Fast Devsel" bzw. "Medium Devsel" haben. (Tatsächlich beträgt der Zeitpunkt der Reaktion 2,5 Zyklen, da PCI -Geräte alle Signale einen halben Zyklus vorzeitig übertragen müssen, damit sie drei Zyklen später empfangen werden können.)
Beachten Sie, dass ein Gerät muss verriegeln die Adresse im ersten Zyklus; Der Initiator muss die Adresse und den Befehl aus dem Bus im folgenden Zyklus entfernen, noch bevor er eine Devsel# Antwort erhalten. Die zusätzliche Zeit ist nur zur Interpretation der Adresse und des Befehls verfügbar, nachdem sie erfasst wurde.
Im fünften Zyklus der Adressphase (oder früher, wenn alle anderen Geräte mittelgroß oder schneller sind) ist für einige Adressbereiche eine "subtraktive Decodierung" zulässig. Dies wird häufig von einem verwendet Isa Bus Brücke für Adressen innerhalb seines Bereichs (24 Bit für Speicher und 16 Bit für E/A).
Im sechsten Zyklus kann der Initiator die Transaktion durch Deasserting -Frame#abbrechen. Dies ist bekannt als als Meisterabbruch -Kündigung und es ist üblich, dass PCI-Busbrücken in diesem Fall All-Ones-Daten (0xffffffffffffffffffffffffffffffffffffffffffffffr) zurückgeben. PCI-Geräte sind daher im Allgemeinen so konzipiert, dass die Verwendung des All-Ones-Wertes in wichtigen Statusregistern die Verwendung von Gesamtstatusregistern vermieden wird, sodass ein solcher Fehler leicht durch Software erfasst werden kann.
Adressphasenzeitpunkt
_ 0_ 1_ 2_ 3_ 4_ 5_ clk _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ ___ Gnt# \ ___/ xxxxxxxxxxxxxxxxx (Gnt#### _____ _______ _______________ ___________________ AD [31: 0] ------- <___> --------------- (Adresse nur für einen Zyklus gültig.) ___ _______________ C/Be [3: 0] #. / \ _/ \ _/ \ _/ \ _/ 0 1 2 3 4 5
Am steigenden Rand von Uhr 0 beobachtet der Initiator Frame# und Irdy# sowohl hoch als und fange an zu dekodieren. Sie können mit Devsel# rechtzeitig für Uhr 2 (Fast Devsel), 3 (mittel) oder 4 (langsam) antworten. Subtraktive Decode -Geräte, bei der keine andere Antwort nach Uhr 4 angezeigt wird, kann auf Uhr 5 antworten. Wenn der Master keine Antwort per Takt 5 sieht, endet er die Transaktion und entfernen den Rahmen# auf Takt 6.
TRDY# und Stopp# sind während der Adressphase deasertiert (hoch). Der Initiator kann Irdy# geltend machen, sobald er bereit ist, Daten zu übertragen, was theoretisch so schnell wie Uhr 2 erfolgen könnte.
Dual-Cycle-Adresse
Um eine 64-Bit-Adressierung zu ermöglichen, präsentiert ein Master die Adresse über zwei aufeinanderfolgende Zyklen. Zunächst sendet es die Adressbits niedriger Ordnung mit einem speziellen Befehl "Dual-Cycle" -Fehl für C/BE [3: 0]#. Im folgenden Zyklus sendet es die Adressbits hoher Ordnung und den tatsächlichen Befehl. Dual-Address-Zyklen sind verboten, wenn die Adressbits hoher Ordnung Null sind. Daher können Geräte, die die 64-Bit-Adressierung nicht unterstützen, einfach nicht auf zwei Zyklusbefehle reagieren.
_ 0_ 1_ 2_ 3_ 4_ 5_ 6_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ GNT# \___/XXXXXXXXXXXXXXXXXXXXXXX _______ FRAME# \_______________________ ___ ___ AD[31: 0] ------- <___ x ___> --------------- (niedrig, dann hohe Bits) ___ ___ _______________ c/be [3: 0]# ---- ---<___X___X_______________ (DAC, then actual command) ___________________________ DEVSEL# \___\___\___\___ Fast Med Slow _ _ _ _ _ _ _ _ CLK _/ \_/ \_/ \_/ \_/ \ _/ \ _/ \ _/ 0 1 2 3 4 5 6
Konfigurationszugriff
Adressen für den Zugriff auf PCI -Konfigurationsraum sind speziell dekodiert. Für diese geben die Adresslinien niedriger Ordnung den Versatz des gewünschten PCI-Konfigurationsregisters an und die Adressleitungen hoher Ordnung werden ignoriert. Stattdessen muss ein zusätzliches Adresssignal, der IDSEL -Eingang, hoch sein, bevor ein Gerät Devsel#geltend macht. Jeder Steckplatz verbindet eine andere Adresslinie mit hoher Ordnung mit dem IDSEL-PIN und wird mithilfe von Verwendung ausgewählt One-Hot Codierung der oberen Adresslinien.
Datenphasen
Nach der Adressphase (insbesondere beginnend mit dem Zyklus, dass Devsel# niedrig geht) kommt ein oder mehr Datenphasen. In allen Fällen treibt der Initiator das aktiv-niedrige Byte aus, das Signale der C/BE [3: 0]# -Linien auswählen, die Daten auf der AD [31: 0] können jedoch vom Initiator (im Fall von Schreibvorgängen) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder) oder). Ziel (im Falle von Reads).
Während der Datenphasen werden die C/BE [3: 0]# Zeilen als aktiv-niedrig interpretiert Byte ermöglicht. Im Falle eines Schreibens zeigen die geltenden Signale an, welche der vier Bytes im Anzeigenbus an den angesprochenen Ort geschrieben werden sollen. Im Falle einer Lektüre geben sie an, an welchen Bytes der Initiator interessiert ist. Für Lesevorgänge ist es immer legal, das Byte -Aktivierungssignale zu ignorieren und einfach alle 32 Bits zurückzugeben. Für immer 32 gültige Bits sind zwischengespeicherbare Speicherressourcen erforderlich. Das Byte -Aktivieren sind hauptsächlich nützlich für E/A -Space -Zugriffe, bei denen Lesevorgänge Nebenwirkungen haben.
Eine Datenphase mit allen vier C/BE -Leitungen, die enttäuscht sind, ist vom PCI -Standard ausdrücklich zulässig und dürfte sich nicht auf das Ziel auswirken, als die Adresse im laufenden Burst -Zugriff voranzutreiben.
Die Datenphase wird fortgesetzt, bis beide Parteien bereit sind, die Übertragung abzuschließen und mit der nächsten Datenphase fortzufahren. Der Initiator behauptet Irdy# (Initiator bereit) Wenn es nicht mehr warten muss, während das Ziel TRDY# (Zielbereit). Unabhängig davon, ob die Daten die Daten bereitstellen, muss sie im Anzeigenbus fahren, bevor sie ihr fertiges Signal geltend machen.
Sobald einer der Teilnehmer sein fertiges Signal geltend macht, kann er nicht unauffällig werden oder seine Kontrollsignale bis zum Ende der Datenphase auf andere Weise ändern. Der Datenempfänger muss den Anzeigenbus in jedem Zyklus verriegeln, bis er sowohl Irdy# als auch TRDY# behauptet, was das Ende der aktuellen Datenphase markiert und angibt, dass die gerade abgesperrten Daten das zu übertragende Wort sind.
Um die volle Burst -Geschwindigkeit aufrechtzuerhalten, hat der Datenabsender dann einen halben Taktzyklus, nachdem sowohl Irdy# als auch TRDY# behaupteten, das nächste Wort in den Anzeigenbus zu fahren.
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ _______ ___ ___ ___ AD[31:0 ] ---<___XXXXXXXXX_______XXXXX___X___X___ (If a write) ___ ___ _______ ___ ___ AD[31:0] ---<___>~~~<XXXXXXXX___X_______X___X___ (If a read) ___ _______________ _______ ___ ___ C/BE[3:0 ]# --- <___ x_______________x_______x___x___ (muss immer gültig sein) _______________ | ___ | | | Irdy# x \ _______/ x \ ___________ ___________________ | | | | Trdy# x x \ ___________________ ___________ | | | | Devsel# \ ___________________________ ___ | | | | Frame# \ ___________________________________ _ _ _ _ _ | _ _ | _ | _ | _ clk _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ 0 1 1 2 3 4 5 6 7 8 9
Dies setzt den oben dargestellten Adresszyklus fort, wobei ein einzelner Adresszyklus mit Medium Devsel angenommen wird, sodass das Ziel rechtzeitig auf Uhr 3 reagiert. Zu diesem Zeitpunkt ist jedoch keine Seite bereit, Daten zu übertragen. Für Uhr 4 ist der Initiator bereit, das Ziel jedoch nicht. Auf der Uhr 5 sind beide fertig und eine Datenübertragung (wie durch die vertikalen Linien angegeben). Für Uhr 6 ist das Ziel übertragen, der Initiator jedoch nicht. Auf Uhr 7 wird der Initiator bereit und Daten werden übertragen. Für Uhren 8 und 9 bleiben beide Seiten bereit, Daten zu übertragen, und die Daten werden mit maximal möglicher Geschwindigkeit (32 Bit pro Taktzyklus) übertragen.
Im Falle einer Lektüre ist die Uhr 2 für den Umdrehen des Anzeigenbusses reserviert, sodass das Ziel nicht gestattet ist, Daten am Bus zu fahren, selbst wenn es zu schnellem Devsel in der Lage ist.
Fast Devsel# on Reads
Ein Ziel, das Fast Devsel unterstützt, könnte theoretisch auf einen Lesen des Zyklus reagieren, nachdem die Adresse vorgestellt wurde. Dieser Zyklus ist jedoch für die Turnaround für Anzeigenbus reserviert. Somit kann ein Ziel den AD -Bus nicht fahren (und somit nicht TRDY##) im zweiten Zyklus einer Transaktion. Beachten Sie, dass die meisten Ziele nicht so schnell sind und keine spezielle Logik benötigen, um diesen Zustand durchzusetzen.
Endtransaktionen
Beide Seiten können nach der aktuellen Datenphase ein Burst -Ende beantragen. Einfache PCI-Geräte, die Multi-Wörter-Bursts nicht unterstützen, fordern dies immer sofort an. Sogar Geräte, die Bursts unterstützen, haben eine gewisse Grenze für die maximale Länge, die sie unterstützen können, z. B. das Ende ihres adressierbaren Speichers.
Initiator -Burst -Beendigung
Der Initiator kann jede Datenphase als endgültige in einer Transaktion durch Deasserting Frame# gleichzeitig mit der Behauptung von Irdy# markieren. Der Zyklus, nachdem das Ziel TRDY# geltend gemacht hat, ist die endgültige Datenübertragung abgeschlossen, beide Seiten haben ihre jeweiligen RDY# -Signale und der Bus wieder im Leerlauf. Der Meister darf nicht den Rahmen## deassert#, bevor er Irdy# geltend macht, und es darf auch nicht das Rahmen# für das Warten mit irdy# geltend machen, damit das Ziel Trdy# geltend macht.
Die einzige geringfügige Ausnahme ist a Meisterabbruch -Kündigung, wenn kein Ziel mit Devsel#antwortet. Offensichtlich ist es sinnlos, in einem solchen Fall auf Trdy# zu warten. Selbst in diesem Fall muss der Meister den Irdy# für mindestens einen Zyklus nach dem Deasserting -Rahmen# geltend machen. (In der Regel wird ein Meister Irdy# behauptet, bevor er Devsel# erhält. Daher muss er einfach länger für einen Zyklus behauptet.) Dies soll sicherstellen, dass die Timing -Timing -Regeln für die Turnaround -Timing in der Rahmen# -Linie befolgt werden.
Ziel -Burst -Beendigung
Das Ziel fordert den Initiator an, einen Burst zu beenden, indem er den Stop#geltend macht. Der Initiator beendet dann die Transaktion mit dem Deasserting Frame# bei der nächsten rechtlichen Gelegenheit. Wenn es mehr Daten übertragen möchte, wird es in einer separaten Transaktion fortgesetzt. Es gibt verschiedene Möglichkeiten für das Ziel, dies zu tun:
- Mit Daten trennen
- Wenn das Ziel gleichzeitig Stopp# und TRDY## behauptet, weist das Ziel an, dass dies die letzte Datenphase ist. Ein Ziel, das keine Burst-Transfers unterstützt, wird dies beispielsweise immer durchführen, um PCI-Transaktionen mit Einzelwunden zu erzwingen. Dies ist die effizienteste Möglichkeit für ein Ziel, einen Burst zu beenden.
- Ohne Daten trennen
- Wenn das Ziel annimmt, ohne TRDY# zu behaupten, zeigt dies an, dass das Ziel anhalten möchte, ohne Daten zu übertragen. Stop# wird als äquivalent zu TRDY# für den Zweck der Beendigung einer Datenphase angesehen, es werden jedoch keine Daten übertragen.
- Wiederholen
- Eine Trennung ohne Daten, bevor Daten übertragen werden, ist a wiederholenund im Gegensatz zu anderen PCI -Transaktionen müssen PCI -Initiatoren vor dem Fortsetzung des Betriebs geringfügig pausieren. Einzelheiten finden Sie in der PCI -Spezifikation.
- Zielabbruch
- Normalerweise hält ein Ziel Devsel# durch die letzte Datenphase. Wenn ein Ziel jedoch Devsel# dient, bevor er ohne Daten getrennt wird (Annahme von Stop#), zeigt dies a an a Zielabbruch, was eine tödliche Fehlerbedingung ist. Der Initiator kann nicht wiederholt und behandelt es normalerweise als als Busfehler. Beachten Sie, dass ein Ziel möglicherweise nicht devsel# ist, während er mit TRDY# oder Stop# Low wartet; Dies muss dies zu Beginn einer Datenphase tun.
Es wird immer mindestens einen Zyklus nach einer von Ziel initiierten Unterbrechung geben, damit der Master Deassert Frame#. Es gibt zwei Unterkase, die die gleiche Zeit in Anspruch nehmen, aber eine zusätzliche Datenphase erfordert:
- Trennen-a
- Wenn der Initiator Stop# beobachtet, bevor er seinen eigenen Irdy# geltend macht, kann er den Burst mit dem Deasserting -Frame# gleichzeitig mit der Behauptung von Irdy# beenden und den Burst nach der aktuellen Datenphase beenden.
- Trennung-b
- Wenn der Initiator IRDY#(ohne Deasserting Frame##) bereits mit dem Zeitpunkt des Stopps des Ziels geltend gemacht hat, ist er einer zusätzlichen Datenphase verpflichtet. Das Ziel muss durch eine zusätzliche Datenphase warten, in der der Stopp# ohne TRDY# geltend gemacht wird, bevor die Transaktion endet.
Wenn der Initiator den Burst gleichzeitig beendet, wie das Ziel eine Trennung anfordert, gibt es keinen zusätzlichen Buszyklus.
Burst -Adressierung
Für Speicherraumzugriffe können die Wörter in einem Burst in mehreren Bestellungen zugegriffen werden. Die unnötigen Adressbits mit niedriger Ordnung [1: 0] werden verwendet, um die angeforderte Bestellung des Initiators zu vermitteln. Ein Ziel, das eine bestimmte Reihenfolge nicht unterstützt, muss den Burst nach dem ersten Wort beenden. Einige dieser Bestellungen hängen von der Cache -Liniengröße ab, die auf allen PCI -Geräten konfigurierbar ist.
A [1] | A [0] | Burst Order (mit 16-Byte-Cache-Linie) |
---|---|---|
0 | 0 | Lineare Inkrementierung (0x0c, 0x10, 0x14, 0x18, 0x1c, ...) |
0 | 1 | Cacheline Toggle (0x0c, 0x08, 0x04, 0x00, 0x1c, 0x18, ...) |
1 | 0 | Cacheline Wrap (0x0c, 0x00, 0x04, 0x08, 0x1c, 0x10, ...) |
1 | 1 | Reserviert (nach der ersten Übertragung trennen) |
Wenn der Startversatz in der Cache -Zeile Null ist, reduzieren sich alle diese Modi auf die gleiche Reihenfolge.
Cache-Zeile-Umschalt- und Cache-Line-Wrap-Modi sind zwei Formen des Abhebens mit kritischem Wort-First-Cache-Zeilen. Schaltermodus XORS die angegebene Adresse mit einem inkrementierenden Zähler. Dies ist die native Reihenfolge für Intel 486- und Pentium -Prozessoren. Es hat den Vorteil, dass es nicht notwendig ist, die Cache -Liniengröße zu kennen, um sie zu implementieren.
PCI Version 2.1 Der veraltete Toggle -Modus und den Cache -Line -Wrap -Modus hinzugefügt.[31]: 2 Wo das Abrufen linear fortgesetzt wird und am Ende jeder Cache -Linie umwickelt. Wenn eine Cache -Linie vollständig abgerufen ist, springen Sprünge zum Startversatz in der nächsten Cache -Zeile.
Beachten Sie, dass die meisten PCI -Geräte nur einen begrenzten Bereich typischer Cache -Liniengrößen unterstützen. Wenn die Cache-Liniengröße auf einen unerwarteten Wert programmiert ist, erzwingen sie den Zugriff auf ein Wort.
PCI unterstützt auch den Burst -Zugriff auf E/A- und Konfigurationsraum, aber nur der lineare Modus wird unterstützt. (Dies wird selten verwendet und kann in einigen Geräten möglicherweise buggy sein. Sie können es möglicherweise nicht unterstützen, aber auch nicht den Zugang zu einem Wort erzwingen.)
Transaktionsbeispiele
Dies ist die am höchsten Möglichkeit, die vom Meister abgeschlossene Geschwindigkeits-Vier-Wort-Schreibburst zu beenden:
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ ___ ___ ___ ___ ___ AD[31:0] ---<___X___X___X___X___> --- <___> ___ ___ ___ ___ ___ c/be [3: 0]# --- <___ x ___ x ___ x ___ x ___> --- <___> | | | | ___ irdy# ^^^^^^^^ \ ______________/ ^^^^^^ | | | | ___ trdy# ^^^^^^^^ \ ______________/ ^^^^^^ | | | | ___ Devsel# ^^^^^^^^ \ ______________/ ^^^^^ ___ | | | ___ Frame# \ _______________/ | ^^^^ \ ____ _ _ | _ | _ | _ | _ _ _ clk _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ 0 1 2 3 4 5 6 7
Am Clock Edge 1 startet der Initiator eine Transaktion, indem sie eine Adresse, den Befehl, den Befehl und die Behauptung des Rahmens# Die anderen Signale sind untätig (angezeigt durch ^^^), die durch die Klimmzogswiderstände des Motherboards hoch gezogen werden. Das könnte ihr Turnaround -Zyklus sein. In Zyklus 2 gilt das Ziel sowohl Devsel# als auch TRDY#. Da auch der Initiator bereit ist, tritt eine Datenübertragung auf. Dies wiederholt sich für drei weitere Zyklen, aber vor dem letzten (Taktkante 5) wird der Master -Rahmen#an, was darauf hinweist, dass dies das Ende ist. Am Taktrand 6 sind der AD -Bus und der Rahmen# ungebunden (Turnaround -Zyklus) und die anderen Kontrolllinien werden für 1 Zyklus hoch angetrieben. Am Clock Edge 7 kann ein anderer Initiator eine andere Transaktion starten. Dies ist auch der Turnaround -Zyklus für die anderen Kontrolllinien.
Der äquivalente Lese -Burst dauert einen weiteren Zyklus, da das Ziel 1 Zyklus warten muss, bis der Anzeigenbus sich umdreht, bevor es TRDY#behaupten kann:
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ clk _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ ___ ___ ___ ___ ad [31: 0] - -<___> --- <___ x ___ x ___ x ___> --- <___> ___ _______ ___ ___ ___ c/be [3: 0]# --- <___ x _______ x ___ x ___ x ___> --- <___> ___ | | | | ___ irdy# ^^^^ \ ___________________/ ^^^^^ ___ _____ | | | | ___ trdy# ^^^^ \ ______________/ ^^^^^ ___ | | | | ___ Devsel# ^^^^ \ ___________________/ ^^^^^ ___ | | | ___ Frame# \ ___________________/ | ^^^^ \ ____ _ _ _ | _ | _ | _ | _ _ clk _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ 0 1 2 3 4 5 6 7 8
Ein Hochgeschwindigkeits-Burst, der vom Ziel beendet wird, hat am Ende einen zusätzlichen Zyklus:
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ clk _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ _/ \ ___ ___ ___ ___ ad [31: 0] - -<___> --- <___ x ___ x ___ x ___ xxxx> ---- ___ _______ ___ ___ ___ ___ c/be [3: 0]# --- <___ x _______ x ___ x ___ x ___ x ___> --- | | | | ___ irdy# ^^^^^^^ \ _______________________/ _____ | | | | _______ Trdy# ^^^^^^^ \ ______________/ ________________ | ___ Stop# ^^^^^^^^ | | | \ _______/ | | | | ___ Devsel# ^^^^^^^ \ _______________________/ ___ | | | | ___ FRAME# \_______________________/ ^^^^ _ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ 0 1 2 3 4 5 6 7 8
Am Clock Edge 6 zeigt das Ziel an, dass es anhalten möchte (mit Daten), aber der Initiator hält den Irdy# niedrig. Daher gibt es eine fünfte Datenphase (Clock Edge 7), in der keine Daten übertragen werden.
Parität
Der PCI -Bus erkennt Paritätsfehler, versucht jedoch nicht, sie durch Wiederholungsvorgänge zu korrigieren. Es ist nur eine Versagensanzeige. Aus diesem Grund müssen der Paritätsfehler nicht erfasst werden, bevor er stattgefunden hat, und der PCI -Bus erkennt ihn tatsächlich ein paar Zyklen später. Während einer Datenphase berechnet das Gerät die AD [31: 0] -Leitungen sogar Parität und die C/BE [3: 0]# -Linien und sendet diesen später den Parlinie -Zyklus. Alle Zugangsregeln und Turnaround -Zyklen für den AD -Bus gelten für die Parleitlinie, nur einen Zyklus später. Das Gerät, das im Anzeigenbus zuhört, überprüft die empfangene Parität und gilt danach den PERR# (Parity -Fehler). Zeile 1 Zyklus. Dies generiert im Allgemeinen einen Prozessor -Interrupt, und der Prozessor kann den PCI -Bus nach dem Gerät durchsuchen, das den Fehler erkannt hat.
Die PERR# -Leile wird nur in Datenphasen verwendet, sobald ein Ziel ausgewählt wurde. Wenn während einer Adressphase (oder der Datenphase eines speziellen Zyklus) ein Paritätsfehler erkannt wird, gilt die Geräte, die sie beobachten, die SERR# (Systemfehler).
Auch wenn einige Bytes von den C/BE# Zeilen maskiert werden und nicht verwendet werden, müssen sie noch haben etwas Der definierte Wert, und dieser Wert muss verwendet werden, um die Parität zu berechnen.
Schnelle aufeinanderfolgende Transaktionen
Aufgrund der Notwendigkeit eines Wendezyklus zwischen verschiedenen Geräten, die PCI -Bussignale fahren, müssen im Allgemeinen einen Leerlaufzyklus zwischen PCI -Bustransaktionen auftreten. Unter bestimmten Umständen ist es jedoch gestattet, diesen Leerlaufzyklus zu überspringen und direkt vom letzten Zyklus einer Übertragung (iRdy# geltend, Frame# Deasserted) zum ersten Zyklus des nächsten (Rahmen# geltend, irdy# deasserted) zu überspringen.
Ein Initiator kann möglicherweise nur gegenwärtige Transaktionen durchführen, wenn:
- Sie sind nach demselben Initiator (oder es würde keine Zeit geben, die C/Se #- und Frame# -Linien umzudrehen).
- Die erste Transaktion war ein Schreiben (also muss der Anzeigenbus nicht umdrehen) und
- Der Initiator verfügt immer noch über die Erlaubnis (aus seiner GNN -Eingabe), den PCI -Bus zu verwenden.
Zusätzliche Zeiteinschränkungen können von der Notwendigkeit zurückzuführen sind, sich umzudrehen. Die Zielsteuerungslinien, insbesondere Devsel#. Das Ziel der Devsel#, die es im Zyklus nach der endgültigen Datenphase, die im Fall von Back-to-Back-Transaktionen den ersten Zyklus der Adressphase ist, im Zyklus hoch treibt. Der zweite Zyklus der Adressphase ist dann Devsel# Turnaround reserviert. Wenn sich das Ziel also von der vorherigen unterscheidet, darf er Devsel# erst im dritten Zyklus (Medium Devsel -Geschwindigkeit) geltend machen.
Ein Fall, in dem dieses Problem nicht auftreten kann, ist, wenn der Initiator irgendwie weiß (vermutlich weil die Adressen ausreichende Bits hoher Ordnung teilen), dass die zweite Übertragung an dasselbe Ziel wie das vorherige gerichtet ist. In diesem Fall kann es aufeinanderfolgende Transaktionen durchführen. Alle PCI -Ziele müssen dies unterstützen.
Es ist auch möglich, dass das Ziel die Anforderungen im Auge behält. Wenn es nie schnell Devsel macht, werden sie trivial erfüllt. Wenn dies der Fall ist, muss es bis zum Zeitpunkt der mittleren Devsel warten, es sei denn::
- Dem Stromtransaktion wurde ein Leerlaufzyklus vorausging (ist nicht hintereinander) oder
- Die vorherige Transaktion war auf dasselbe Ziel oder
- Die aktuelle Transaktion begann mit einem Doppeladresszyklus.
Ziele, die diese Fähigkeit besitzen, geben dies durch ein spezielles Bit in einem PCI-Konfigurationsregister an, und wenn alle Ziele in einem Bus es haben, können alle Initiatoren hintereinander überträgliche Überweisungen verwenden.
Eine subtraktive Dekodierungsbusbrücke muss wissen, dass diese zusätzliche Verzögerung im Falle von aufeinanderfolgenden Zyklen erwartet wird, um aufeinanderfolgende Unterstützung zu werben.
64-Bit-PCI
Ausgehend von Revision 2.1,[Klarstellung erforderlich] Die PCI-Spezifikation umfasst optionale 64-Bit-Unterstützung. Dies wird über einen erweiterten Stecker bereitgestellt, der die 64-Bit-Busverlängerungen AD [63:32], C/BE [7: 4]#und Par64 sowie eine Reihe zusätzlicher Strom- und Bodenstifte liefert. Der 64-Bit-PCI-Anschluss kann durch das zusätzliche 64-Bit-Segment von einem 32-Bit-Stecker unterschieden werden.
Speichertransaktionen zwischen 64-Bit-Geräten können alle 64 Bit verwenden, um die Datenübertragungsrate zu verdoppeln. Nicht-Memory-Transaktionen (einschließlich Konfiguration und E/A-Space-Zugriffe) verwenden möglicherweise nicht die 64-Bit-Erweiterung. Während eines 64-Bit-Burst-Bursts funktioniert die Burst-Adressierung genau wie bei einer 32-Bit-Übertragung, die Adresse wird jedoch zweimal pro Datenphase erhöht. Die Startadresse muss 64-Bit ausgerichtet sein; d.h. ad2 muss 0 sein. Die Daten, die den intervenierenden Adressen (mit AD2 = 1) entsprechen, werden in der oberen Hälfte des AD -Busses getragen.
Um eine 64-Bit-Transaktion zu initiieren, fährt der Initiator die Startadresse im Anzeigenbus an und behauptet REQ64# gleichzeitig wie Frame#. Wenn das ausgewählte Ziel eine 64-Bit-Übertragung für diese Transaktion unterstützen kann, antwortet es, indem es ACK64# gleichzeitig wie Devsel# geltend macht. Beachten Sie, dass ein Ziel auf einer Basis pro Transaktion entscheiden kann, ob eine 64-Bit-Übertragung zuzulassen.
Wenn REQ64# während der Adressphase geltend gemacht wird, treibt der Initiator auch die hohen 32 Bit der Adresse und eine Kopie des Buskommandos auf der hohen Hälfte des Busses an. Wenn die Adresse 64 Bit erfordert, ist noch ein Doppeladresszyklus erforderlich, aber die hohe Hälfte des Busses trägt die obere Hälfte der Adresse und den endgültigen Befehlscode während der beiden Adressphasenzyklen. Dies ermöglicht ein 64-Bit-Ziel, die gesamte Adresse zu sehen und früher zu antworten.
Wenn der Initiator die Devsel# ohne ACK64# behauptet, führt er 32-Bit-Datenphasen durch. Die Daten, die während der ersten Datenphase in der oberen Hälfte des Busses übertragen worden wären, werden stattdessen während der zweiten Datenphase übertragen. Normalerweise treibt der Initiator alle 64 Datenbits an, bevor der Devsel#angezeigt wird. Wenn ACK64# fehlt, kann dies die obere Hälfte des Datenbusses aufhören.
Die Leitungen von REQ64# und ACK64# werden für die gesamte Transaktion in der letzten Datenphase behauptet und gleichzeitig mit Frame Nr. Bzw. Devsel# gehalten.
Die Par64 -Linie arbeitet genau wie die Parleitlinie, bietet jedoch sogar Parität gegenüber AD [63:32] und C/BE [7: 4]#. Es gilt nur für Adressphasen, wenn REQ64# geltend gemacht wird. PAR64 gilt nur für Datenphasen, wenn sowohl REQ64# als auch ACK64# geltend gemacht werden.
Cache Snooping (veraltet)
PCI enthielt ursprünglich optionale Unterstützung für Schreib zurück Cache -Kohärenz. Dies erforderte Unterstützung durch zwischengespeicherbare Speicherziele, die zwei Stifte aus dem Cache im Bus, SDone (Snoop Done) und SBO# (Snoop Backoff) anhören.[34]
Da dies in der Praxis selten implementiert wurde, wurde es aus Revision 2.2 der PCI -Spezifikation gelöscht.[15][35] und die Stifte wiederverwendet für Smbus Zugriff in Revision 2.3.[17]
Der Cache würde alle Speicherzugriffe beobachten, ohne Devsel#zu behaupten. Wenn es einen Zugriff bemerkt, der möglicherweise zwischengespeichert wird, würde er SDone niedrig fahren (Snoop nicht fertig). Ein Kohärenz-Supporting-Ziel würde vermeiden, eine Datenphase zu vervollständigen (TRDY#), bis SDONE hoch beobachtet wurde.
Bei einem Schreibgeschoss, der im Cache sauber war, müsste der Cache nur seine Kopie ungültig machen und SDone behaupten, sobald dies festgelegt wurde. Wenn der Cache jedoch schmutzige Daten enthielt, müsste der Cache ihn zurückschreiben, bevor der Zugriff fortgesetzt wird. So würde es SBO# bei der Erhöhung von SDone behaupten. Dies würde das aktive Ziel signalisieren, dass Stop# anstelle von TRDY# gilt, wodurch der Initiator den Betrieb später trennen und wiederholt. In der Zwischenzeit würde der Cache für den Bus schlichten und seine Daten zurück in den Speicher schreiben.
Ziele, die die Cache -Kohärenz unterstützen, sind auch erforderlich, um Bursts zu beenden, bevor sie Cache -Linien überqueren.
Entwicklungswerkzeuge

Bei der Entwicklung und/oder Fehlerbehebung beim PCI -Bus kann die Untersuchung von Hardwaresignalen sehr wichtig sein. Logikanalysatoren und Busanalysatoren sind Tools, die Signale sammeln, analysieren und dekodieren, damit Benutzer auf nützliche Weise angezeigt werden können.
Siehe auch
- PCI -Konfigurationsraum
- Compactpci, PCI-X, PCI Express
- PCI-sig, PCI Special Interest Group
- Picmg, PCI Industrial Computer Manufacturers Group
- Eurocard (gedruckte Leiterplatte)
Verweise
- ^ PCI Lokale Busspezifikation Revision 2.2. Hillsboro, Oregon: PCI Special Interest Group. 18. Dezember 1998. Seite II.
- ^ "PCIe (Peripheral Component Interconnect Express) | auf dem Motherboard | Pearson IT -Zertifizierung". www.pearsonitcertification.com. Abgerufen 2020-09-25.
- ^ "PCI". Web -o -Pedia. September 1996..
- ^ Hamacher, V. Carl; Vranesic, Zvonko G.; Zaky, Safwat G. (2002). Computerorganisation (5. Aufl.). McGraw-Hill. ISBN 9780071122184.
- ^ "PCI Edition AMD HD 4350 Grafikkarte von ihm". Abgerufen 2009-07-27.
- ^ Imdad-Haque, Faisal (1996). Inside PC -Karte: Cardbus- und PCMCIA -Design: Cardbus und PCMCIA -Design. Newnes. p. 39. ISBN 978-0-08-053473-2.
- ^ Sumathi, S.; Surekha, P. (2007). LabView -basierte erweiterte Instrumentierungssysteme. Springer. p. 305. ISBN 978-3-540-48501-8.
- ^ https://documentation.euresys.com/products/multicam/multicam_6_16/content/multicam_6_7_html_documentation/pci_bus_variation.pdf[Bare URL PDF]
- ^ a b Williams, John (2008). Digital VLSI Design mit Verilog: Ein Lehrbuch vom Silicon Valley Technical Institute. Springer. p. 67. ISBN 978-1-4020-8446-1.
- ^ Bachmutsky, Alexander (2011). Systemdesign für Telekommunikations -Gateways. John Wiley & Sons. p. 81. ISBN 978-1-119-95642-6.
- ^ VLB wurde für 486 basierte Systeme entwickelt, doch auch der generischere PCI sollte auf dieser Plattform bekannt werden.
- ^ Meyers, Michael (2012). COMPTIA A+ Zertifizierung All-in-One-Prüfungshandbuch (8. Aufl.). McGraw Hill Professional. p. 339. ISBN 978-0-07-179512-8.
- ^ Identifizieren Sie eine Vielzahl von PCI -Slots, Lacie
- ^ "PCI Familiengeschichte" (PDF).
- ^ a b c d e f PCI Lokale Busspezifikation, Revision 3.0
- ^ "PCI -Latenz -Timer Howto". Bereric.net von Eric Seppanen. 2004-11-14. Abgerufen 2008-07-17.
- ^ a b c d e PCI Lokale Busspezifikation Revision 2.3. Portland, Oregon: PCI Special Interest Group. 29. März 2002.
- ^ "PCI -Anschluss -Pinout".
- ^ a b PCI Power Management Interface Spezifikation v1.2
- ^ "archive.org/zuavra.net-Verwenden von Wake-on-lan Wol/PME, um Ihren Computer aus der Ferne aufzunehmen". Archiviert von das Original am 8. März 2007.
- ^ ZNYX Networks (16. Juni 2009). "ZX370 -Serie". Archiviert von das Original am 2. Mai 2011. Abgerufen 13. Juli, 2012.
Die ZX370-Serie ist ein echter 64-Bit-Adapter, der die Netzwerkpipeline erweitert, um einen höheren Durchsatz zu erzielen, und gleichzeitig die Abwärtskompatibilität mit Standard-32-Bit-PCI-Slots bietet.
- ^ Znyx -Netzwerke. "ZX370-Serie Multi-Channel PCI Fast Ethernet Adapter" (PDF). Archiviert von das Original (PDF) am 20. Juli 2013. Abgerufen 13. Juli, 2012.
Rückwärts kompatibel mit 32 Bit, 33 MHz PCI -Slots
- ^ Adaptec (Januar 2000). "Adaptec SCSI -Karte 29160 Ultra160 SCSI Controller -Benutzerreferenz" (PDF). p. 1. Abgerufen 13. Juli, 2012.
Obwohl die Adaptec SCSI-Karte 29160 eine 64-Bit-PCI-Karte ist, funktioniert sie auch in einem 32-Bit-PCI-Steckplatz. Bei der Installation in einem 32-Bit-PCI-Steckplatz wird die Karte automatisch im langsameren 32-Bit-Modus ausgeführt.
- ^ Lakie. "Lacie -Unterstützung: Identifizieren Sie eine Vielzahl von PCI -Slots". Archiviert von das Original am 4. April 2012. Abgerufen 13. Juli, 2012.
- ^ PCI Lokale Busspezifikation Revision 3.0. Hillsboro, Oregon: PCI Special Interest Group. 3. Februar 2004. Abbildung 5-8.
- ^ PCI Lokale Busspezifikation Revision 3.0. Hillsboro, Oregon: PCI Special Interest Group. 3. Februar 2004. Abbildung 5-9.
- ^ PCI Lokale Busspezifikation Revision 3.0. Hillsboro, Oregon: PCI Special Interest Group. 3. Februar 2004. Abbildung 5-6.
- ^ PCI Lokale Busspezifikation Revision 3.0. Hillsboro, Oregon: PCI Special Interest Group. 3. Februar 2004. Abbildung 5-7.
- ^ Micro PCI, Micro AGP (FAQ), ibase, archiviert von das Original Am 2001-12-11, abgerufen 2010-11-20.
- ^ Roudier, Gérard (2001-11-28). "Re: Sym53c875: Lesen /Proc verursacht SCSI -Paritätsfehler". Linux Kernel (Mailingliste).
- ^ a b PCI Lokale Busspezifikation: Revision 2.1 vs. Revision 2.0 (PDF) (Anwendungsnote). Intel Corporation. März 1997. AP-753. Archiviert von das Original (PDF) Am 2015-04-30.
- ^ "Busspezifikationen - Schreibgerätetreiber für Oracle® Solaris 11.3". docs.oracle.com. Abgerufen 2020-12-18.
- ^ PCI-to-PCI-Brückenarchitekturspezifikation, Revision 1.1
- ^ PCI Lokale Busspezifikation, Revision 2.1
- ^ PCI Lokale Busspezifikation Revision 2.2. Hillsboro, Oregon: PCI Special Interest Group. 18. Dezember 1998.
Weitere Lektüre
- Offizielle technische Spezifikationen
- PCI Lokale Busspezifikation: Revision 2.3. PCI-sig. 29. März 2002. (1000 US-Dollar für Nichtmitglieder oder 50 USD für Mitglieder. PCI-Sig-Mitgliedschaft beträgt 3000 USD pro Jahr.)
- PCI Lokale Busspezifikation: Revision 3.0. PCI-sig. 12. August 2002. (1000 US-Dollar für Nichtmitglieder oder 50 USD für Mitglieder. PCI-Sig-Mitgliedschaft beträgt 3000 USD pro Jahr.)
- Bücher
- Abbott, Doug (2004). PCI -Bus entmystifiziert (2. Aufl.). ISBN 978-0-7506-7739-4. 250 Seiten.
- Shanley, Tom (1999). PCI -Systemarchitektur (4. Aufl.). ISBN 978-0-201-30974-4. 832 Seiten.
- Shanley, Tom (2000). PCI-X-Systemarchitektur (1. Aufl.). ISBN 978-0-201-72682-4. 752 Seiten.
- Solari, Ed (2001). PCI & PCI-X-Hardware- und Software-Architektur und -Design (5. Aufl.). ISBN 978-0-929392-63-9. 1140 Seiten.
- Goodrum, Alan (1998). PCI Hotplug -Anwendung und -Design (1. Aufl.). ISBN 978-0-929392-60-8. 162 Seiten.
Externe Links
- Offiziell
- Offizielle Website, PCI Special Interest Group (PCI-SIG)
- Technische Details
- Einführung in das PCI -Protokoll Archiviert 2013-01-19 bei der Wayback -Maschine, Electrofriends.com
- PCI-Bus-Pin-Out und Signale, pinouts.ru
- PCI -Kartenabmessungen, interfaceBus.com
- Listen von Anbietern, Geräten, IDs
- PCI -Anbieter und Gerätelisten, pcidatabase.com
- PCI -ID -Repository, ein Projekt zum Sammeln aller bekannten IDs
- Tipps
- Kurzer Überblick über die PCI -Leistungsanforderungen und die Kompatibilität mit einem schönen Diagramm
- Gute Diagramme und Text, wie man den Unterschied zwischen 5 Volt und 3,3 Volt -Slots erkennt
- Linux
- Entwicklungswerkzeuge
- Aktiver PCI -Bus -Extender, dinigroup.com
- FPGA -Kerne
- PCI -Schnittstellenkern, Gitter -Halbleiter
- PCI -Brückenkern, Opencore.
- IP -Suche nach PCI -Buskernen, Berkeley.