PCI Express - hvad det er og hovedegenskaber. Hvad er forskellen mellem PCI Express og PCI?

Jeg er blevet stillet dette spørgsmål mere end én gang, så nu vil jeg forsøge at besvare det så klart og kort som muligt. For at gøre dette vil jeg give billeder af PCI Express og PCI udvidelsesslots på bundkortet for en klarere forståelse og, selvfølgelig vil jeg angive de vigtigste forskelle i egenskaberne, dvs. meget snart vil du finde ud af, hvad disse grænseflader er, og hvordan de ser ud.

Så lad os først kort besvare spørgsmålet, hvad er PCI Express og PCI præcist?

Hvad er PCI Express og PCI?

PCI er en computer parallel input/output bus til tilslutning af eksterne enheder til computerens bundkort. PCI bruges til at forbinde: videokort, lydkort, netværkskort, tv-tunere og andre enheder. PCI-interfacet er forældet, så du vil sandsynligvis ikke kunne finde for eksempel et moderne grafikkort, der forbindes via PCI.

PCI Express(PCIe eller PCI-E) er en computers seriel input/output bus til tilslutning af perifere enheder til en computers bundkort. De der. denne bruger allerede en tovejs seriel forbindelse, som kan have flere linjer (x1, x2, x4, x8, x12, x16 og x32) jo flere sådanne linjer, jo højere båndbredde er PCI-E-bussen. PCI Express-grænsefladen bruges til at forbinde enheder som videokort, lydkort, netværkskort, SSD-drev og andre.

Der er flere versioner af PCI-E-grænsefladen: 1,0, 2,0 og 3,0 (version 4.0 frigives snart). Denne grænseflade betegnes normalt f.eks. sådan PCI-E 3.0 x16, hvilket betyder PCI Express 3.0 version med 16 baner.

Hvis vi taler om, om for eksempel et videokort, der har et PCI-E 3.0 interface, vil fungere på et bundkort, der kun understøtter PCI-E 2.0 eller 1.0, siger udviklerne, at alt vil virke, bare husk selvfølgelig på, at båndbredden vil være begrænset af bundkortets muligheder. Derfor, i dette tilfælde, tror jeg ikke, det er værd at betale for meget for et videokort med en nyere version af PCI Express ( om ikke andet for fremtiden, dvs. Planlægger du at købe et nyt bundkort med PCI-E 3.0?). Lad os også, og omvendt, sige, at dit bundkort understøtter version PCI Express 3.0, og dit videokort understøtter version 1.0, så burde denne konfiguration også fungere, men kun med PCI-E 1.0-kapaciteter, dvs. Der er ingen begrænsning her, da videokortet i dette tilfælde vil fungere på grænsen af ​​dets muligheder.

Forskelle mellem PCI Express og PCI

Den største forskel i karakteristika er naturligvis gennemløbet; for PCI Express er det meget højere, for eksempel har PCI ved 66 MHz en gennemstrømning på 266 MB/sek. og PCI-E 3.0 (x16) 32 Gb/s.

Eksternt er grænsefladerne også forskellige, så tilslutning af for eksempel et PCI Express-videokort til en PCI-udvidelsesslot vil ikke fungere. PCI Express interfaces med forskellige antal baner er også forskellige, jeg vil nu vise alt dette på billeder.

PCI Express og PCI udvidelsesslots på bundkort

PCI og AGP slots

PCI-E x1, PCI-E x16 og PCI slots

PCI Express-grænseflader på videokort

Det er alt, hvad jeg har for nu!

#PCI_Express

PCI Express seriel bus, udviklet af Intel og dets partnere, er beregnet til at erstatte den parallelle PCI bus og dens udvidede og specialiserede variant AGP. På trods af deres lignende navne har PCI- og PCI Express-busser ikke meget til fælles. Den parallelle dataoverførselsprotokol, der bruges i PCI, pålægger begrænsninger på bussens båndbredde og frekvens; Den serielle dataoverførsel, der bruges i PCI Express, giver skalerbarhed (specifikationerne beskriver PCI Express 1x, 2x, 4x, 8x, 16x og 32x implementeringer). I øjeblikket er den aktuelle version af bussen med indeks 3.0

PCI-E 3.0

I november 2010 annoncerede PCI-SIG-organisationen, som standardiserer PCI Express-teknologi, vedtagelsen af ​​PCIe Base 3.0-specifikationen.
Nøgleforskellen fra de tidligere to versioner af PCIe kan betragtes som et modificeret kodningsskema - nu i stedet for 8 bits nyttig information ud af 10 bits transmitterede (8b/10b), kan 128 bits nyttig information ud af 130 bits sendt transmitteres via bussen, dvs. Nyttelastkoefficienten er næsten tæt på 100%. Derudover er dataoverførselshastigheden steget til 8 GT/s. Lad os huske, at denne værdi for PCIe 1.x var 2,5 GT/s, og for PCIe 2.x - 5 GT/s.
Alle ovenstående ændringer førte til en fordobling af busbåndbredden sammenlignet med PCI-E 2.x-bussen. Det betyder, at den samlede PCIe 3.0-busbåndbredde i en 16x-konfiguration når op på 32 Gb/s. De første processorer, der blev udstyret med en PCIe 3.0-controller, var Intel-processorer baseret på Ivy Bridge-mikroarkitekturen.

På trods af den mere end tredoblede gennemstrømning af PCI-E 3.0 sammenlignet med PCI-E 1.1, er ydeevnen af ​​de samme videokort, når der bruges forskellige grænseflader, ikke meget forskellig. Tabellen nedenfor viser testresultaterne af GeForce GTX 980 i forskellige tests. Målingerne blev udført med de samme grafikindstillinger, i samme konfiguration PCI-E busversionen blev ændret i BIOS-indstillingerne.

PCI Express 3.0 er fortsat bagudkompatibel med tidligere versioner af PCIe.

PCI-E 2.0

I 2007 blev en ny PCI Express-busspecifikation, 2.0, vedtaget, hvis væsentligste forskel er den dobbelte båndbredde af hver transmissionslinje i hver retning, dvs. i tilfælde af den mest populære version af PCI-E 16x, der bruges i videokort, er gennemstrømningen 8 Gb/sek. i hver retning. Det første chipsæt til at understøtte PCI-E 2.0 var Intel X38.

PCI-E 2.0 er fuldt bagudkompatibel med PCI-E 1.0, dvs. Alle eksisterende PCI-E 1.0-enheder kan fungere i PCI-E 2.0-slots og omvendt.

PCI-E 1.1

Den første version af PCI Express-grænsefladen, som dukkede op i 2002. Giver en gennemstrømning på 500 MB/s pr. linje.

Sammenligning af driftshastigheder for forskellige generationer af PCI-E

PCI-bussen fungerer ved 33 eller 66 MHz og giver 133 eller 266 MB/sek. båndbredde, men denne båndbredde deles mellem alle PCI-enheder. Frekvensen, hvormed PCI Express-bussen opererer, er 1,1 - 2,5 GHz, hvilket giver en gennemstrømning på 2500 MHz / 10 * 8 = 250 * 8 Mbps = 250 Mbps (på grund af redundant kodning til transmission af 8 bits data, er 10 bits faktisk overførte oplysninger) for hver PCI Express 1.1 x1-enhed i én retning. Hvis der er flere linjer, skal værdien på 250 Mb/sek for at beregne gennemløbet ganges med antallet af linjer og med 2, pga. PCI Express er en tovejs bus.

Antal PCI Express 1.1 baner Envejs gennemløb Samlet gennemløb
1 250 MB/sek 500 MB/sek
2 500 Mb/sek 1 GB/sek
4 1 GB/sek 2 GB/sek
8 2 GB/sek 4 GB/sek
16 4 GB/sek 8 GB/sek
32 8 GB/sek 16 GB/sek

Bemærk! Du bør ikke forsøge at installere et PCI Express-kort i en PCI-slot, og omvendt vil PCI-kort ikke installeres i PCI Express-slots. Men et PCI Express 1x-kort kan f.eks. installeres og vil højst sandsynligt fungere normalt i et PCI Express 8x- eller 16x-slot, men ikke omvendt: et PCI Express 16x-kort passer ikke ind i et PCI Express 1x-slot .

Når vi taler om PCI Express (PCI-E) bussen, er dens effektivitet måske den første ting, der adskiller den fra andre lignende løsninger. Takket være denne moderne bus øges computerens ydeevne, og grafikkvaliteten forbedres.

I mange år blev PCI-bussen (Peripheral Component Interconnect) brugt til at forbinde et videokort til bundkortet, og den blev også brugt til at forbinde nogle andre enheder, såsom et netværkskort og et lydkort.

Sådan ser disse slots ud:

PCI-Express var faktisk den næste generation af PCI-bussen, der tilbyder forbedret funktionalitet og ydeevne. Den bruger en seriel forbindelse, hvor der er flere linjer, som hver fører til en tilsvarende enhed, dvs. Hver perifer enhed får sin egen linje, hvilket øger computerens samlede ydeevne.

PCI-Express understøtter hot plugging, bruger mindre energi end sine forgængere og kontrollerer integriteten af ​​transmitterede data. Derudover er den kompatibel med PCI-busdrivere. Et andet bemærkelsesværdigt træk ved denne bus er dens skalerbarhed, dvs. pci express-kort forbinder og fungerer i enhver slot med lignende eller større båndbredde. Med al sandsynlighed vil denne funktion sikre dens brug i mange år fremover.

Den traditionelle PCI-slottype var god nok til grundlæggende audio/video-funktioner. Med AGP-bussen er ordningen for at arbejde med multimediedata forbedret, og kvaliteten af ​​audio/video-data er steget tilsvarende. Det varede ikke længe, ​​før fremskridt inden for processormikroarkitektur begyndte at demonstrere endnu tydeligere PCI-bussens langsommelighed, som fik datidens hurtigste og nyeste computermodeller til bogstaveligt talt knap at trække sig.

PCI-E buskarakteristika og båndbredde

Den kan have fra én tovejs forbindelseslinje x1 til x32 (32 linjer). Linjen fungerer på en punkt-til-punkt basis. Moderne versioner giver meget større båndbredde sammenlignet med deres forgængere. x16 kan bruges til at tilslutte et videokort, og x1 og x2 kan bruges til at forbinde almindelige kort.

Sådan ser x1 og pci express x16 slotsene ud:

PCI-E
Antal linjer x1 x2 x4 x8 x16 x32
Båndbredde 500 MB/s 1000 MB/s 2000 MB/s 4000 MB/s 8000 MB/s 16000 MB/s

PCI-E versioner og kompatibilitet

Når det kommer til computere, er enhver omtale af versioner forbundet med kompatibilitetsproblemer. Og som enhver anden moderne teknologi udvikler og moderniseres PCI-E konstant. Den seneste tilgængelige version er pci express 3.0, men udviklingen af ​​PCI-E bus version 4.0 er allerede i gang, som skulle dukke op omkring 2015 (pci express 2.0 er næsten forældet).
Tag et kig på følgende PCI-E kompatibilitetsdiagram.
Versioner PCI-E 3.0 2.0 1.1
Samlet båndbredde
(X16) 32 GB/s 16 GB/s 8 GB/s
Dataoverførselshastighed 8,0 GT/s 5,0 GT/s 2,5 GT/s

PCI-E-versionen har ingen indflydelse på kortets funktionalitet. Det mest karakteristiske træk ved denne grænseflade er dens frem- og bagudkompatibilitet, som gør den sikker og i stand til at synkronisere med mange kortvarianter, uanset grænsefladeversionen. Det vil sige, at du kan indsætte et kort af den anden eller tredje version i en PCI-Express-slot i den første version, og det vil fungere, dog med et vist tab af ydeevne. På samme måde kan du installere et PCI-Express-kort af den første version i PCI-E-slottet i den tredje version. I øjeblikket er alle moderne grafikkortmodeller fra NVIDIA og AMD kompatible med denne bus.

Og dette til en snack:

Hvor bruges ikke-brændbare stoffer www.algo-textile.ru. Myggenet tilbehør til myggenet 2-sklad.ru.

PCI og PCI-X

PCI og PCI-X busser

Introduktion

PCI- og PCI-X-busser er de vigtigste I/O-udvidelsesbusser i moderne computere; til tilslutning af videoadaptere er de suppleret med en AGP-port. I/O-udvidelsesbusser (Expansion Bus) er tilslutningsmuligheder på systemniveau: De tillader adaptere og perifere controllere at bruge computerens systemressourcer direkte - hukommelse og I/O-adresserum, interrupts, direkte hukommelsesadgang. Enheder forbundet til ekspansionsbusser kan selv styre disse busser og få adgang til andre computerressourcer. Udvidelsesbusser er mekanisk implementeret som slots (slot-stik) eller pin-konnektorer; De er kendetegnet ved en kort længde af ledere, det vil sige, at de er rent lokale, hvilket giver dem mulighed for at opnå høje driftshastigheder. Disse busser sendes muligvis ikke til stik, men bruges til at forbinde enheder på integrerede bundkort.

Først blev PCI-bussen introduceret som en udvidelse (mezzaninbus) til systemer med en ISA-bus. Den blev udviklet med Pentium-processorer i tankerne, men fungerede også godt med i486-processorer. Senere blev PCI den centrale bus i nogen tid: den var forbundet til processorbussen med en højtydende bro ("nordbro"), som var en del af bundkortets chipset. De resterende I/O-udvidelsesbusser (ISA/EISA eller MCA) såvel som den lokale ISA-lignende X-BUS-bus og LPC-interfacet, som systemkortchippene er forbundet til (ROM BIOS, interruptcontrollere, tastaturer, DMA , COM- og LPT-porte, HDD og andre "småting"), forbundet til PCI-bussen via "syd"-broen. I moderne bundkort med en "hub"-arkitektur er PCI-bussen blevet flyttet til periferien, uden at kompromittere dens kommunikationskanalkapacitet med processor og hukommelse, men også uden at indlæse enheder på andre busser med transittrafik.

PCI-bussen er synkron - alle signaler fanges af den positive kant (kant) af CLK-signalet. Den nominelle synkroniseringsfrekvens anses for at være 33,3 MHz; om nødvendigt kan den sænkes. Fra version PCI 2.1 er det muligt at øge frekvensen til 66,6 MHz, hvis alle enheder på bussen "enes". I PCI-X kan frekvensen nå 133 MHz.

PCI bruger en parallel multiplekset adresse/data (AD) bus med en typisk bredde på 32 bit. Specifikationen definerer muligheden for at udvide bitdybden til 64 bit; PCI-X version 2.0 definerer også en 16-bit busmulighed. Ved en busfrekvens på 33 MHz når den teoretiske gennemstrømning 132 MB/s for en 32-bit bus og 264 MB/s for en 64-bit bus; ved en synkroniseringsfrekvens på henholdsvis 66 MHz - 264 MB/s og 528 MB/s. Disse spidsværdier nås dog kun under pakketransmission: På grund af protokoloverhead er den faktiske gennemsnitlige busgennemstrømning lavere.

Sammenlignende karakteristika for PCI- og PCI-X-busser og andre udvidelsesbusser for pc-kompatible computere er angivet i tabel. 1.1. ISA-bussen forlader stationære computere, men den bevarer sin position i industrielle og indlejrede computere, både i den traditionelle slotversion og i "sandwich" PC/104-versionen. PCMCIA slots med PC Card og Card Bus busser er meget udbredt i notebook computere. LPC-bussen er et moderne, billigt middel til at forbinde ikke-ressourcekrævende enheder til bundkortet.

Dæk Maksimal gennemløb MB/s DMA kanaler Busmester ACFG Data bredde Adressestørrelse Frekvens MHz
ISA-8 4 3 - - 8 20 8
ISA-16 8
7
+
-
16
24
8
LPC 6,7
7
+
-
8/16/32
32
33
EISA
33,3 7 +
+
32
32
8,33
MCA-16
16
-
+
+
16
24
10
MCA-32
20
-
+
+
32
32
10
VLB
132
-
(+)
-
32/64
32
33-50(66)
PCI
133-533
-
+
+
32/64
32/64
33/66
PCI-X
533-4256
-
+
+
16/32/64
32/64
66-133
PCI Express
496-15872
-
+
+
1/2/4/8/12/16/32
32/64
2,5 GHz
AGP 1x/2x/4x/8x
266/533/1066/2132
-
+
+
32
32/64
66
PCMCIA
10/22
+
-
+
8/16
26
10
Kort bus 132 - + + 32 32 33

ACFG1-Understøtter automatisk konfiguration. For ISA er PnP en sen tilføjelse implementeret af adaptere og software.

PCI og PCI-X bus signalering protokol

Udvekslingen af ​​information på PCI- og PCI-X-bussen er organiseret i form af transaktioner - logisk gennemførte udvekslingsoperationer. En typisk transaktion involverer to enheder: en udvekslingsinitiator, også kendt som en masterenhed, og en målenhed, også kendt som en slave. Reglerne for interaktion mellem disse enheder er bestemt af PCI-busprotokollen. Enheden kan overvåge transaktioner på bussen uden at være en deltager (uden at indtaste nogen signaler); Udtrykket Snooping svarer til sporingstilstanden. Der er en særlig type transaktion (Special Cycle) - udsendelse, hvor initiativtageren ikke interagerer med nogen af ​​enhederne i henhold til protokollen. Hver transaktion udfører en kommando, typisk læser eller skriver data til en specificeret adresse. En transaktion begynder med en adressefase, hvor initiativtageren angiver en kommando og en måladresse. Datafaser kan følge, hvor en enhed (datakilden) sætter data på bussen og en anden (vasken) læser dem. Transaktioner, der har flere datafaser, kaldes batchtransaktioner. Der er også enkelte transaktioner (med én datafase). En transaktion kan gennemføres uden datafaser, hvis målenheden (eller initiatoren) ikke er klar til udvekslingen. PCI-X-bussen har tilføjet en attributfase, hvor yderligere information om transaktionen transmitteres.

PCI og PCI-X bus signalering protokol

Sammensætningen og formålet med businterfacesignaler er vist i tabellen nedenfor. Alle signallinjers tilstande opfattes af den positive flanke CLK, og disse momenter i den videre beskrivelse menes med buscykler (markeret i figurerne med lodrette stiplede linier). På forskellige tidspunkter styres de samme signallinjer af forskellige busenheder, og for korrekt (konfliktfri) "overførsel af myndighed" kræves det, at der er et tidsrum, hvor ingen enhed styrer linjen. På tidsdiagrammer er denne hændelse - den såkaldte "pirouette" (turaround) - angivet med et par halvcirkelformede pile.

Bord. PCI bus signaler

Signal
Formål
AD Adresse/Data - multiplekset adresse/databus. I begyndelsen af ​​transaktionen sendes adressen, i efterfølgende cyklusser - data
C/B# Kommando/Byte Aktiver - kommando/tilladelse til at få adgang til bytes. Kommandoen, der bestemmer typen af ​​den næste buscyklus, er specificeret af en fire-bit kode i adressefasen
RAMME#
Ramme. Introduktionen af ​​signalet markerer begyndelsen af ​​transaktionen (adressefase), fjernelse af signalet indikerer, at den efterfølgende dataoverførselscyklus er den sidste i transaktionen
DEVSEL#
Enhedsvalg - enheden er valgt (kontrolcentrets svar på transaktionen adresseret til den)
IRDY#
Initiator Ready - klarhed af masterenheden til dataudveksling
TRDY#
Target Ready - klarhed af kontrolcenteret til dataudveksling
HOLD OP#
Anmodning fra CPU'en til masteren om at stoppe den aktuelle transaktion
LÅSE#
Buslåssignal for at sikre uafbrudt drift. Bruges af en bro, der kræver flere PCI-transaktioner for at fuldføre en enkelt operation
REQ#
Anmodning - anmodning fra masterenheden om at beslaglægge bussen
GNT#
Bevilling - tildeling af busstyring til skibsføreren
PAR
Paritet - fælles paritetsbit for AD- og C/BE#-linjer
PERR#
Paritetsfejl — paritetsfejlsignal (for alle cyklusser undtagen specielle). Genereret af enhver enhed, der registrerer en fejl
PME#
Power Management Event - et signal om hændelser, der forårsager en ændring i forbrugstilstanden (et ekstra signal introduceret i PCI 2.2)
CLKRUN#
Uret kører – bussen kører med den nominelle klokkefrekvens. Fjernelse af signalet betyder at bremse eller stoppe synkroniseringen for at reducere forbruget (til mobilapplikationer)
PRSN #
Tilstedeværelse - kort tilstedeværelsesindikatorer, der koder for anmodningen om strømforbrug. På udvidelseskortet er en eller to LED-linjer forbundet til GND-bussen, som registreres af bundkortet
RST#
Nulstil - nulstil alle registre til deres oprindelige tilstand (klik på knappen "Nulstil".
og ved genstart)
IDSEL
Initialisering af enhedsvalg - enhedsvalg i konfigurationslæse- og skrivecyklusser; Disse cyklusser reageres på af en enhed, der registrerer et højt signalniveau på denne linje
SERR#
Systemfejl - systemfejl. En adresse- eller dataparitetsfejl i en speciel ramme eller anden katastrofal fejl registreret af enheden. Aktiveres af enhver PCI-enhed og kalder NMI
REQ64#
Anmod om 64 bit - anmodning om en 64-bit udveksling. Signalet indlæses af 64-bit initiatoren; det falder i tid sammen med FRAME#-signalet. Under nulstillingsfuldførelse (RST#-signal) signalerer til 64-bit-enheden, at den er forbundet til 64-bit-bussen. Hvis en 64-bit enhed ikke detekterer dette signal, skal den omkonfigurere sig selv til 32-bit tilstand ved at deaktivere high-byte bufferkredsløbene
ACK64#
Bekræftelse af 64-bit udveksling. Signalet indlæses af 64-bit CPU'en, som har genkendt sin adresse, samtidig med DEVSEL#. Undladelse af at give denne bekræftelse vil tvinge initiativtageren til at udføre udvekslingen ved 32-bit
INTA#, INTB#, INTC#, INTD#
Interrupt A, B, C, D - afbrydelsesanmodningslinjer, niveaufølsomhed, aktivt niveau - lavt, hvilket tillader adskillelighed (deling) af linjer
CLK
Ur — bus ur frekvens. Bør være i området 20-33 MHz, startende med PCI 2.1 kan det være op til 66 MHz, i PCI-X op til 100 og 133 MHz
M66EN
66MHz Aktiver - klokfrekvensopløsning op til 66 MHz (på kort er 33 MHz jordet, ved 66 MHz er det gratis)
PCIXCAP (38B)

PCI-X-egenskaber: på PCI-kort - jordet, på PCI-X133 forbundet til jord gennem en 0,01 µF-kondensator, på PCI-X66 - med et parallelt RC-kredsløb på 10 kOhm, 0,01 µF.

SDONE
Snoop Done - signaler, at snoop-cyklussen er fuldført for den aktuelle transaktion. Et lavt niveau indikerer, at overvågningscyklussen for hukommelse og cachekohærens er ufuldstændig. Valgfrit signal, bruges kun af busenheder med cachelagret hukommelse. Udgået fra PCI 2.2
SBO#
Snoop Backoff - den aktuelle adgang til en busabonnents hukommelse ender i en modificeret cache-linje. Et valgfrit signal, der kun bruges af busabonnenter med cachelagret hukommelse under tilbageskrivningsalgoritmen. Udgået fra PCI 2.2
SMBCLK
SMBus Clock - ursignal fra SMBus-bussen (I2C-interface). Introduceret siden PCI 2.3
SMBDAT
SMBus Data - serielle data for SMBus bussen (I2C interface). Introduceret siden PCI 2.3
TCK
Test Clock - JTAG test interface synkronisering
TDI
Test Data Input - JTAG test interface input data
TDO
Test Data Output - JTAG test interface output data
TMS
Test Mode Select - vælg tilstanden for JTAG-testgrænsefladen
TRST
Test Logic Reset - nulstil testlogik

Bussen kan til enhver tid kun styres af én masterenhed, som har modtaget ret hertil fra dommeren. Hver masterenhed har et par signaler - REQ# for at anmode om busstyring og GNT# for at bekræfte, at busstyring er blevet givet. Enheden kan kun begynde en transaktion (indstil FRAME#-signalet), når den modtager et aktivt GNT#-signal og venter, indtil der ikke er nogen busaktivitet. Bemærk, at mens han venter på hvile, kan dommeren "ændre mening" og give kontrol over bussen til en anden enhed med højere prioritet. Fjernelse af GNT#-signalet forhindrer enheden i at starte den næste transaktion, og kan under visse betingelser (se nedenfor) tvinge den til at afslutte den aktuelle transaktion. Voldgift af anmodninger om at bruge bussen håndteres af en speciel node - en arbiter, som er en del af broen, der forbinder denne bus til centrum. Prioritetsordningen (fast, round-robin, kombineret) bestemmes af arbiter-programmeringen.

Fælles multipleksede AD-linjer bruges til adresse og data. Fire multipleksede C/BE-linjer giver instruktionskodning i adressefasen og byteopløsning i datafasen. I skrivetransaktioner tillader C/BE-linjerne brugen af ​​databytes samtidig med deres tilstedeværelse på AD-bussen; i læsetransaktioner refererer disse signaler til bytes i den næste datafase. I adressefasen (transaktionsstart) aktiverer masteren FRAME#-signalet, sender måladressen på AD-bussen og transmitterer information om transaktionstypen (kommando) på C/BE#-linjerne. Den adresserede målenhed svarer med et DEVSEL#-signal. Masterenheden angiver sin parathed til at udveksle data med IRDY#-signalet; denne parathed kan indstilles før modtagelse af DEVSEL#. Når målenheden er klar til at udveksle data, vil den indstille TRDY#-signalet. Data overføres kun på AD-bussen, når IRDY#- og TRDY#-signalerne er til stede samtidigt. Ved at bruge disse signaler koordinerer master- og målenhederne deres hastigheder ved at indføre ventetilstande. Figuren nedenfor viser et tidsdiagram for en central, hvor både master- og målenhederne indtaster venteure. Hvis de begge indtastede klarsignaler i slutningen af ​​adressefasen og ikke fjernede dem før slutningen af ​​udvekslingen, så ville 32 bit data blive transmitteret i hver clock-cyklus efter adressefasen, hvilket ville give maksimal udvekslingsydelse. I læste transaktioner efter adressefasen kræves der et ekstra ur til pirouette, hvor initiatoren holder op med at styre AD-linjen; Målenheden vil kun være i stand til at overtage styringen af ​​AD-bussen i den næste clock-cyklus. I en skrivetransaktion er piruette ikke nødvendig, fordi initiatoren transmitterer dataene.

På PCI-bussen behandles alle transaktioner som bursts: hver transaktion begynder med en adressefase, som kan efterfølges af en eller flere datafaser. Antallet af datafaser i pakken er ikke eksplicit angivet, men i clock-cyklussen for den sidste datafase fjerner masterindretningen, når IRDY#-signalet indtastes, FRAME#-signalet. I enkelttransaktioner er FRAME#-signalet kun aktivt i én clock-cyklus. Hvis enheden ikke understøtter batchtransaktioner i slavetilstand, så skal den anmode om, at batchtransaktionen afsluttes i den første datafase (ved at bekræfte STOP#-signalet samtidig med TRDY#). Som svar på dette vil masteren fuldføre den givne transaktion og fortsætte med at udveksle den efterfølgende transaktion med den næste adresseværdi. Efter den sidste datafase fjerner masterenheden IRDY#-signalet, og bussen går i inaktiv tilstand (Idle) - begge signaler: FRAME# og IRDY# er i en passiv tilstand.

Initiativtageren kan starte den næste transaktion uden hvileperiode ved at indstille FRAME# samtidig med at IRDY# fjernes. Sådanne hurtige tilstødende transaktioner (Fast Back-to-Back) kan adresseres enten til én eller til forskellige målenheder. Den første type hurtige sammenhængende transaktioner understøttes af alle PCI-enheder, der fungerer som målenheden. Understøttelse af den anden type sammenhængende transaktioner (en sådan understøttelse er valgfri) er angivet med bit 7 i statusregisteret. Initiativtageren har kun lov (hvis han kan) at bruge hurtige sammenhængende transaktioner med forskellige enheder (tilladelsen bestemmes af bit 9 i kommandoregisteret), hvis alle busagenter tillader hurtige opkald. Ved udveksling af data i PCI-X-tilstand er hurtige sammenhængende transaktioner ikke tilladt.

Busprotokollen sikrer udvekslingens pålidelighed - masterenheden modtager altid information om målenhedens behandling af transaktionen. Et middel til at øge pålideligheden af ​​udvekslingen er brugen af ​​paritetskontrol: AD- og C/BE#-linjerne i både adressefasen og datafasen er beskyttet af paritetsbitten PAR (antallet af indstillede bits af disse linjer, inklusive PAR, skal være lige). Den faktiske PAR-værdi vises på bussen med en forsinkelse på en klokcyklus i forhold til AD- og C/BE#-linjerne. Når der detekteres en fejl, genererer enheden et PERR#-signal (forskudt et ur, efter at en gyldig paritetsbit vises på bussen). Ved beregning af paritet under datatransmission tages der hensyn til alle bytes, inklusive ugyldige bytes (markeret med et højt C/BEx#-signal). Bittilstanden, selv i ugyldige databytes, skal forblive stabil under datafasen.

Hver transaktion på bussen skal gennemføres som planlagt eller afbrydes, og bussen skal gå i hviletilstand (FRAME# og IRDY# signalerne er passive). Transaktionsfuldførelse er enten initieret af masterenheden eller initieret af målenheden.

Masteren kan gennemføre transaktionen på en af ​​følgende måder:

  • færdiggørelse - normal opsigelse ved slutningen af ​​dataudvekslingen;
  • time-out — afslutning efter timeout. Opstår, når masterens busstyring fjernes under en transaktion (ved at fjerne GNT#-signalet), og dens Latency Timer udløber. Dette kan ske, hvis den adresserede målenhed er uventet langsom, eller transaktionen er planlagt til at være for lang. Korte transaktioner (med en eller to datafaser), selvom GNT#-signalet fjernes og timeren udløses, fuldføres normalt;
  • master-Abort - Afbryd en transaktion, når masterenheden ikke modtager et svar fra målenheden (DEVSEL#-signal) inden for en specificeret tid.

Transaktionen kan afsluttes på initiativ af målenheden; For at gøre dette kan den indtaste et STOP#-signal. Der er tre typer transaktionsopsigelse mulig:

  • genforsøg - gentagelse, introduktion af STOP#-signalet med et passivt TRDY#-signal før den første datafase. Denne situation opstår, når målenheden på grund af intern travlhed ikke har tid til at producere de første data til tiden (16 clock-cyklusser). Et genforsøg afbryde er en indikation til masteren om at genstarte den samme transaktion;
  • disconnect - frakobling, indførelse af STOP#-signalet under eller efter den første datafase. Hvis STOP#-signalet indtastes, mens TRDY#-signalet for den næste datafase er aktivt, transmitteres disse data, og transaktionen afsluttes. Hvis STOP#-signalet er indstillet, når TRDY#-signalet er passivt, afsluttes transaktionen uden at transmittere dataene for den næste fase. Afbrydelse opstår, når målenheden ikke er i stand til at udstede eller modtage den næste del af pakkedata rettidigt. Frakobling er en indikation til masteren om at genstarte denne transaktion, men med en ændret startadresse;
  • target-abort - fejl, introduktion af STOP#-signalet samtidig med fjernelse af DEVSEL#-signalet (i tidligere tilfælde, da STOP#-signalet dukkede op, var DEVSEL#-signalet aktivt). Herefter overføres dataene ikke længere. Et afslag opstår, når målenheden registrerer en fatal fejl eller andre forhold, som skyldes, at den ikke længere vil være i stand til at betjene den givne anmodning (inklusive en ikke-understøttet kommando).

Det er ikke nødvendigt at bruge de tre typer transaktionsafslutning for alle målenheder, men enhver masterenhed bør være forberedt på at afslutte transaktioner af en hvilken som helst af disse årsager.

Genforsøgstermineringstypen bruges til at organisere forsinkede transaktioner. Udskudte transaktioner bruges kun af langsomme målenheder og af PCI-broer, når transaktioner oversættes til en anden bus. Ved at afbryde (for initiativtageren) en transaktion med en genforsøgsbetingelse, udfører målenheden internt transaktionen. Når initiativtageren gentager denne transaktion (udsender den samme kommando med samme adresse og det samme sæt C/BE#-signaler i datafasen), vil målenheden (eller broen) allerede have resultatet klar (læse data eller skrive fremskridt status), at den hurtigt vender tilbage til initiativtageren. Resultatet af en afventende transaktion udført af en given enhed skal lagres af enheden eller broen, indtil resultaterne anmodes af initiativtageren. Han kan dog "glemme" at gentage transaktionen (på grund af nogle unormale situationer). For at undgå overfyldning af resultatlagerbufferen skal enheden kassere disse resultater. Dropning kan udføres uden bivirkninger, hvis transaktionen blev udskudt til hukommelse, der tillader forhåndshentning (med præfetchable-attributten, se nedenfor). Generelt kan andre typer transaktioner ikke kasseres ustraffet (dataens integritet kan blive krænket); for dem er kassering kun tilladt efter uden held ventet på en gentagelse i 215 buscyklusser (når kasseringstimeren udløses). Enheden kan rapportere denne undtagelse til sin driver (eller hele systemet).

Initiativtageren til en transaktion kan anmode om eksklusiv brug af PCI-bussen i varigheden af ​​en udvekslingsoperation, der kræver flere bustransaktioner. Så hvis CPU'en for eksempel udfører en datamodifikationsinstruktion i en hukommelsescelle, der tilhører en PCI-enhed, skal den læse dataene fra enheden, ændre dem i sin ALU og returnere resultatet til enheden. For at forhindre transaktioner fra andre initiativtagere i at forstyrre denne operation (hvilket kan føre til dataintegritetskrænkelser), udfører hovedbroen det som en blokeret operation - LOCK# bussignalet leveres i hele operationens varighed. Dette signal bliver ikke brugt (eller produceret) på nogen måde af konventionelle PCI-enheder (ikke broer); det bruges kun af broer til at kontrollere voldgift.

Hardwareafbrydelser i pc-kompatible computere

PCI-enheder har evnen til at signalere asynkrone hændelser ved hjælp af interrupts. Der er fire typer interrupt-signalering tilgængelige på PCI-bussen:

  • traditionel kablet signalering via INTx-linjer;
  • kablet signalering af energistyringshændelser via PME# linje;
  • signalering ved hjælp af meddelelser - MSI;
  • signalerer en fatal fejl på SERR#-linjen.

Dette kapitel dækker hver af disse signaleringstyper, såvel som det overordnede billede af hardwareafbrydelsesunderstøttelse i pc-kompatible computere.

Hardwareafbrydelser i pc-kompatible computere

Hardwareafbrydelser giver et processorsvar på hændelser, der forekommer asynkront i forhold til den eksekverende programkode. Husk at hardwareafbrydelser er opdelt i maskerbare og ikke-maskerbare. x86-processoren, efter et afbrydelsessignal, suspenderer udførelsen af ​​den aktuelle strøm af instruktioner, gemmer tilstanden (flag og returadresse) på stakken og udfører afbrydelseshåndteringsproceduren. En specifik behandlingsprocedure vælges fra interrupt-tabellen af ​​interrupt-vektoren - en-byte-tallet for elementet i denne tabel. Interrupt-vektoren bringes til processoren på forskellige måder: for ikke-maskerbare interrupts er den fast, for maskerbare interrupts rapporteres den af ​​en speciel interrupt controller. Ud over hardwareafbrydelser har x86-processorer også interne afbrydelser - undtagelser forbundet med særlige tilfælde af instruktionsudførelse og softwareafbrydelser. For undtagelser bestemmes vektoren af ​​selve den særlige betingelse, og Intel reserverer de første 32 vektorer (0-31 eller 00-1Fh) til undtagelser. I softwareafbrydelser er vektornummeret indeholdt i selve instruktionen (softwareafbrydelser er blot en specifik måde at kalde procedurer efter nummer, med et flagregister først gemt på stakken). Alle disse interrupts bruger det samme sæt af 256 mulige vektorer. Historisk set overlapper de vektorer, der bruges til hardwareafbrydelser, undtagelsesvektorerne og vektorerne for softwareafbrydelser, der bruges til BIOS- og DOS-servicekald. For et antal vektornumre skal proceduren, som afbrydelsestabellen refererer til, først indeholde programkode, der bestemmer, hvorfor den blev kaldt: på grund af en undtagelse, en hardwareafbrydelse eller for at kalde en systemtjeneste. Således vil den procedure, der faktisk sikrer processorens svar på den samme asynkrone hændelse, kun blive kaldt efter en række handlinger for at identificere afbrydelseskilden. Vi bemærker også her, at den samme interrupt-vektor kan bruges af flere perifere enheder - dette er den såkaldte delte brug af interrupts, som diskuteres i detaljer nedenfor.

Kaldning af afbrydelsesservicerutinen i reelle og beskyttede tilstande af processoren er væsentligt anderledes:

  • i real mode, indeholder interrupt-tabellen 4-byte far pointers (segment og offset) til de tilsvarende procedurer, der kaldes af et far call (Call Far med forudlagrede flag). Størrelsen (256 × 4 bytes) og placeringen af ​​bordet (startende ved adresse 0) er faste;
  • I beskyttet tilstand (og i dets særlige tilfælde V86-tilstand) indeholder tabellen 8-byte afbrydelsesbeskrivelser, som kan være Interrupt Gates, Trap Gates eller Task Gates. Bordstørrelsen kan reduceres (maksimalt - 256 × 8 bytes), bordpositionen kan ændres (bestemt af indholdet af processorens IDT-register). Afbrydelseshåndteringskoden skal være mindst lige så privilegeret som den afbrudte opgavekode (ellers vil en sikkerhedsundtagelse blive udløst). Af denne grund skal interrupt-handlere køre på OS-kerneniveau (på nul privilegieniveau). Ændring af privilegieniveauet ved opkald til en handler resulterer i yderligere tid brugt på at omdefinere stakken. Afbrydelser, der forårsager opgaveskift (via Task Gate), bruger betydelig tid på kontekstskifte - udlæsning af processorregistre i tilstandssegmentet af den gamle opgave og indlæsning af dem fra tilstandssegmentet af den nye.

Vektornumrene, der bruges til hardwareafbrydelser i operativsystemer med beskyttet tilstand, er forskellige fra dem, der bruges i operativsystemer i realtilstand for at sikre, at de ikke er i konflikt med vektorerne, der bruges til processorundtagelser.

Processoren reagerer altid på en ikke-maskerbar afbrydelse (NMI) (hvis servicering af det tidligere NMI er fuldført); Dette interrupt svarer til fast vektor 2. Ikke-maskerbare interrupts i pc'er bruges til at signalere fatale hardwarefejl. Signalet til NMI-linjen kommer fra hukommelseskontrolkredsløbene (paritet eller ECC), fra ISA-bus-kontrollinjerne (IOCHK) og PCI-bussen (SERR#). NMI-signalet blokeres, før det kommer ind i processoren ved at sætte bit 7 af port 070h til 1, individuelle kilder aktiveres og identificeres af bits af port 061h:

  • bit 2 R/W - ERP - tilladelse til at styre RAM og SERR#-signalet fra PCI-bussen;
  • bit 3 R/W - EIC - ISA bus kontrol opløsning;
  • bit 6 R - IOCHK - kontrolfejl på ISA-bussen (IOCHK#-signal);
  • bit 7 R - PCK - RAM-paritetsfejl eller SERR#-signal på PCI-bussen.

Processorens reaktion på maskerbare afbrydelser kan forsinkes ved at nulstille dens interne IF-flag (CLI-instruktionen deaktiverer interrupts, STI-instruktionen aktiverer). Maskerbare afbrydelser bruges til at signalere hændelser i enheder. Når der opstår en hændelse, der kræver et svar, genererer enhedsadapteren (controlleren) en afbrydelsesanmodning, som sendes til indgangen på interruptcontrolleren. Afbrydelsescontrollerens opgave er at bringe afbrydelsesanmodningen til processoren og kommunikere den vektor, hvorved softwareafbrydelseshåndteringsproceduren er valgt.

Enhedsafbrydelsesrutinen skal udføre handlinger for at servicere enheden, herunder nulstille dens anmodning for at tillade den at reagere på efterfølgende hændelser og sende fuldførelseskommandoer til afbrydelsescontrolleren. Når behandlingsrutinen kaldes, gemmer processoren automatisk værdien af ​​alle flag på stakken og nulstiller IF-flaget, hvilket deaktiverer maskerbare afbrydelser. Når du vender tilbage fra denne procedure (ved hjælp af IRET-instruktionen), gendanner processoren de gemte flag, inklusive det indstillede (før afbrydelsen) IF, som igen muliggør afbrydelser. Hvis der under driften af ​​interrupt handleren kræves en reaktion på andre interrupts (højere prioritet), så skal STI-instruktionen være til stede i handleren. Dette gælder især for lange handlere; her skal STI-instruktionen indtastes så tidligt som muligt, umiddelbart efter det kritiske (ikke-afbrydelige) afsnit. Afbrydelsescontrolleren vil kun servicere efterfølgende afbrydelser af samme eller lavere prioritetsniveau efter at have modtaget EOI-kommandoen (End Of Interrupt).

IBM PC-kompatible computere bruger to hovedtyper af interrupt-controllere:

  • PIC (Peripheral Interrupt Controller) er en perifer interrupt-controller, software kompatibel med den "historiske" 8259A-controller, der blev brugt i de første IBM PC-modeller. Siden IBM PC/AT'ens tid er der blevet brugt et par kaskadede PIC'er, som tillader servicering af op til 15 interrupt request-linjer;
  • APIC (Advanced Peripheral Interrupt Controller) er en avanceret perifer interruptcontroller introduceret til at understøtte multiprocessorsystemer i computere baseret på 4-5 generations processorer (486 og Pentium) og bruges stadig i dag til senere processormodeller. Ud over at understøtte multiprocessor-konfigurationer giver moderne APIC dig mulighed for at øge antallet af tilgængelige afbrydelseslinjer og håndtere afbrydelsesanmodninger fra PCI-enheder, der sendes gennem beskedmotoren (MSI). En computer udstyret med en APIC-controller skal kunne fungere i en tilstand, der er kompatibel med et standard PIC-par. Denne tilstand aktiveres af en hardware-nulstilling (og tænding), som giver dig mulighed for at bruge gamle OS og MS DOS-applikationer, der ikke kender APIC og multiprocessing.

Det traditionelle skema til generering af afbrydelsesanmodninger ved hjælp af et par PIC'er er vist i figuren nedenfor.

Interrupt-controllerens input modtager anmodninger fra systemenheder (tastatur, systemtimer, CMOS-timer, coprocessor), perifere controllere på bundkortet og udvidelseskort. Traditionelt er alle anmodningslinjer, der ikke er optaget af de anførte enheder, til stede på alle ISA/EISA-busslots. Disse linjer er betegnet IRQx og har et fælles formål (se tabel nedenfor). Nogle af disse linjer er allokeret til PCI-bussen. Tabellen viser også afbrydelsesprioriteter - anmodninger er arrangeret i faldende rækkefølge. Antallet af vektorer svarende til styreenhedens anmodningslinjer, prioritetssystemet og nogle andre parametre indstilles programmatisk, når styreenhederne initialiseres. Disse grundlæggende indstillinger forbliver traditionelle for softwarekompatibilitet, men adskiller sig mellem real-mode og protected-mode OS'er. For eksempel i Windows OS er basisvektorerne for master- og slavecontrollere henholdsvis 50h og 58h.

Navn (nummer 1) Vektor 2 Vektor 3 Controller/maske Beskrivelse
NMI 02h


IRQ0 08h 50 timer
#1/1t
Kanalkontrol, hukommelsesparitet (i XT - coprocessor)
IRQ1 09h 51 timer
#1/2t
Tastatur
IRQ2 0 Ah 52 timer
#1/4t
XT - reserve, AT - ikke tilgængelig (IRQ8-IRQ15-kaskaden er tilsluttet)
IRQ8 70 timer
58 timer
#2/1t
CMOS RTC - Realtidsur
IRQ9 71 timer
59 timer
#2/2t
Reservere
IRQ10 72 timer
5 Ah
#2/4t
Reservere
IRQ11 73 timer
5Bh
#2/8t
Reservere
IRQ12 74 timer
5Ch
#2/10h
PS/2-mus (reserve)
IRQ13 75 timer
5Dh
#2/20h
Matematisk coprocessor
IRQ14 76 timer
5 Eh
#2/40h
HDC - HDD controller
IRQ15 77 timer
5Fh
#2/80h
Reservere
IRQ3 0Bh
52 timer
#1/4t
COM2, COM4
IRQ4 0Ch
53 timer
#1/10h
COM1, COM3
IRQ5I 0Dh
54 timer
#1/20h
XT - HDC, AT - LPT2, lyd (reserve)
IRQ6 0Eh
55 timer
#1/40h
FDC - float drive controller
IRQ7 0Fh
56 timer
#1/80h
LPT1 - printer

*1 Afbrydelsesanmodninger 0, 1, 8 og 13 udsendes ikke til udvidelsesbusser.
*2 Vektornumre er angivet, når du arbejder i rigtig processortilstand.
*3 Vektornumre er angivet, når du arbejder i Windows OS.

Hver enhed, der kræver afbrydelser for at understøtte dens drift, skal tildeles sit eget afbrydelsesnummer. Afbrydelsesnummertildelinger foretages fra to sider: For det første skal adapteren, der kræver afbrydelser, konfigureres til at bruge en specifik buslinje (enten med jumpere eller software). For det andet skal softwaren, der understøtter adapteren, informeres om det anvendte vektornummer. PnP-systemet til ISA- og PCI-busser kan deltage i processen med at tildele interrupts; specielle CMOS-opsætningsparametre bruges til at fordele anmodningslinjer mellem busser. Moderne operativsystemer har mulighed for at ændre tildelingen af ​​anmodninger vedrørende tildeling foretaget gennem CMOS-opsætning.

Efter afbrydelsessystemet er konfigureret (afbrydelsescontrolleren er initialiseret, anmodningslinjer er tildelt til enheder, og pointere til behandlingsprocedurer er indstillet), behandles maskerbare hardwareafbrydelser som følger:

  • ved en afbrydelseshændelse exciterer enheden den afbrydelsesanmodningslinje, der er tildelt den;
  • controlleren modtager anmodningssignaler fra afbrydelseskilder (IRQx-signaler) og sender, hvis der er en umaskeret anmodning, et generelt afbrydelsesanmodningssignal (INTR-signal) til x86-processoren;
  • processoren, der reagerer på en anmodning (når afbrydelser med IF-flaget er aktiveret), gemmer indholdet af flagregisteret og returadressen på stakken, hvorefter den genererer en INTA (Interrupt Acknowledge) buscyklus, som leveres til afbrydelsescontrolleren;
  • i det øjeblik INTA-signalet modtages, registrerer interrupt-controlleren tilstanden af ​​sine anmodningsinputs - på dette tidspunkt kunne deres tilstand have ændret sig: nye anmodninger kunne dukke op, eller en anmodning fra en "utålmodig" enhed kunne forsvinde. Styreenheden analyserer indkommende anmodninger i overensstemmelse med det programmerede prioritetsskema og sender processoren en afbrydelsesvektor svarende til den afmaskede anmodning med højeste prioritet, der er til stede ved styreenhedens input på det tidspunkt, INTA-buskommandoen udsendes. Samtidig udfører controlleren også nogle handlinger i overensstemmelse med den etablerede prioritetspolitik under hensyntagen til hvilken vektor der blev sendt (hvilken af ​​anmodningerne gik til service);
  • Efter at have modtaget en afbrydelsesvektor, kalder processoren den tilsvarende afbrydelseshåndteringsprocedure ved hjælp af dens nummer. Hvis en given interrupt-vektor ikke kun bruges til hardware-interrupts, men også til undtagelser og/eller software-interrupts, så skal rutinen først bestemme, hvilken af ​​disse typer hændelsen er. For at gøre dette kan proceduren kontakte PIC-controlleren (læs ISR-registret) og analysere tilstanden af ​​processorregistrene. Yderligere trin overvejes i det tilfælde, hvor en hardwareafbrydelse detekteres;
  • Afbrydelseshåndteringsproceduren skal identificere kilden til afbrydelsen - bestemme den enhed, der forårsagede det. I tilfælde af delt brug af et givet anmodningsnummer (og derfor vektor) af flere enheder, kan afbrydelseskilden kun identificeres ved sekventiel adgang til registrene for hver af disse enheder. I dette tilfælde bør man tage højde for muligheden for at modtage anmodninger fra flere enheder samtidigt eller under behandling af en afbrydelse fra en af ​​dem;
  • proceduren skal servicere afbrydelseskildeenheden - udføre "nyttige" handlinger relateret til den hændelse, som enheden signalerede. Denne tjeneste bør også sikre, at signalet om afbrydelsesanmodning fra denne enhed fjernes. I tilfælde af delte afbrydelser kan der være flere kilder, og alle kræver vedligeholdelse;
  • hvis afbrydelsesbehandling tager en betydelig mængde tid, hvor systemet skal reagere på anmodninger med højere prioritet, er der efter den kritiske sektion inkluderet en STI-instruktion i behandleren, som sætter interrupt-aktiveringsflaget (IF) i processoren . Fra dette øjeblik er indlejrede afbrydelser mulige, der afbryder en given handlers arbejde med en anden procedure med højere prioritet;
  • Afbrydelseshåndteringsproceduren skal sende controlleren en kommando om at fuldføre afbrydelsesbehandling EOI (End Of Interrupt), hvorved controlleren vil tillade efterfølgende modtagelse af et signal fra den servicerede input og lavere prioritet. Dette skal gøres efter at have fjernet afbrydelsessignalet fra de servicerede enheder, ellers sender controlleren en anden anmodning efter EOI. En interrupt-handler, for hvilken der er kommet en anmodning fra en slavecontroller, skal sende en EOI til både slave- og mastercontrolleren. Sektionen af ​​handleren, der starter fra udstedelsen af ​​EOI-instruktionen til opsigelsen (IRET-instruktion), skal være uafbrydelig, det vil sige, at det er den kritiske sektion. Hvis handleren tillod indlejrede afbrydelser, skal en CLI-instruktion, der deaktiverer afbrydelser, være til stede, før EOI-kommandoen udsendes;
  • afbrydelsesbehandling afsluttes med IRET-instruktionen, hvorved processoren vender tilbage til at udføre det afbrudte instruktionsflow, efter at have tidligere hentet indholdet af flagregisteret fra stakken. I dette tilfælde vil hardwareafbrydelser blive aktiveret igen.

Denne sekvens er beskrevet i forhold til en regulær interrupt-controller (PIC), systemer med APIC ændrer måden, hvorpå interruptvektoren leveres fra controlleren til processoren, og MSI-interrupts ændrer måden, signalet leveres fra enheden til APIC-controlleren. . Disse nuancer er beskrevet i de efterfølgende afsnit.

generel information

PCI Bridges (PCI Bridge) er speciel hardware til at forbinde PCI (og PCI-X) busser til hinanden og til andre busser. Host Bridge bruges til at forbinde PCI til midten af ​​computeren (systemhukommelse og processor). Den "ærede pligt" for hovedbroen er at generere opkald til konfigurationsrummet under kontrol af den centrale processor, hvilket gør det muligt for værten (centralprocessoren) at konfigurere hele PCI-busundersystemet. Systemet kan også have flere hovedbroer, hvilket gør det muligt at levere højtydende kommunikation med centret til et større antal enheder (antallet af enheder på én bus er begrænset). Af disse busser er en betinget udpeget som den vigtigste (bus 0).

PCI peer-broer (PeertoPeer Bridge) bruges til at forbinde yderligere PCI-busser. Disse broer introducerer altid ekstra dataoverførselsoverhead, så den effektive ydeevne af enhed-til-hub-kommunikation falder med hver bro, der kommer i vejen.

For at forbinde PCMCIA-, CardBus-, MCA-, ISA/EISA-, X-Bus- og LPC-busser bruges specielle broer, som indgår i bundkortchipsættene eller er separate PCI-enheder (chips). Disse broer konverterer grænsefladerne på de busser, de forbinder, synkroniserer og buffer dataudvekslinger.

Hver bro er programmerbar - den får adresseområderne i hukommelsen og I/O-rum allokeret til enhederne på dens busser. Hvis CPU-adressen for den aktuelle transaktion på den ene bus (side) af broen refererer til bussen på den modsatte side, oversætter broen transaktionen til den relevante bus og sikrer busprotokolforhandling. En samling af PCI-broer udfører således routing af anmodninger langs de tilknyttede busser. Hvis systemet har flere hovedbroer, er ende-til-ende-routing mellem enheder på forskellige busser muligvis ikke mulig: Hovedbroerne kan kun forbindes med hinanden gennem hukommelsescontrollerens backbone-stier. Understøttelse af oversættelsen af ​​alle typer PCI-transaktioner gennem hovedbroerne viser sig i dette tilfælde at være for kompleks og er derfor ikke strengt påkrævet af PCI-specifikationen. Alle aktive enheder på alle PCI-busser kan således få adgang til systemhukommelsen, men muligheden for peer-to-peer-kommunikation kan afhænge af, om disse enheder tilhører en eller anden PCI-bus.

Brugen af ​​PCI-broer giver muligheder som:

  • øge det mulige antal tilsluttede enheder, overvinde begrænsningerne af bus elektriske specifikationer;
  • opdeling af PCI-enheder i segmenter - PCI-busser - med forskellige karakteristika for bitdybde (32/64 bit), klokfrekvens (33/66/100/133 MHz), protokol (PCI, PC-X Mode 1, PCI-X Mode) 2, PCI Express). På hver bus er alle abonnenter lig med den svageste deltager; korrekt arrangement af enheder på busser giver dig mulighed for at bruge enhedernes og bundkortets muligheder med maksimal effektivitet;
  • organisering af segmenter med "varm" tilslutning/afbrydelse af enheder;
  • organisering af samtidig parallel eksekvering af transaktioner fra initiativtagere placeret på forskellige busser.

Hver PCI-bro forbinder kun to busser: den primære bus, der er placeret tættere på toppen af ​​hierarkiet, med den sekundære bus; De brogrænseflader, hvormed den er forbundet med disse busser, kaldes henholdsvis primær og sekundær. Kun en rent trælignende konfiguration er tilladt, det vil sige, at to busser er forbundet med hinanden med kun én bro, og der er ingen "sløjfer" af broer. Busser forbundet til den sekundære grænseflade af en given bro af andre broer kaldes underordnede busser. PCI-broer danner et hierarki af PCI-busser, hvor øverst masterbussen, nummereret nul, er forbundet med masterbroen. Hvis der er flere hovedbroer, så af deres busser (lige i rang), vil den vigtigste være den, der er tildelt nulnummeret.

Broen skal udføre en række obligatoriske funktioner:

  • servicere bussen forbundet til dens sekundære grænseflade:
  • udføre voldgift - modtage REQx# anmodningssignaler fra busmastere og give dem ret til at styre bussen med GNTx# signaler
  • parker bussen - send et GNTx#-signal til en enhed, når busstyring ikke er påkrævet af nogen af ​​masterne;
  • generere konfigurationscyklusser af type 0 med dannelse af individuelle IDSEL-signaler til den adresserbare PCI-enhed;
  • "træk" styresignaler til et højt niveau;
  • bestemme mulighederne for tilsluttede enheder og vælg en busdriftstilstand, der tilfredsstiller dem (frekvens, bitdybde, protokol);
  • generere en hardwarenulstilling (RST#) ved nulstilling fra den primære grænseflade og ved kommando, rapportering af den valgte tilstand med en speciel alarm.
  • vedligeholde kort over ressourcer placeret på modsatte sider af broen;
  • reagere under dække af en målenhed på transaktioner initieret af en master på en grænseflade og adresseret til en ressource placeret på en anden grænseflade; udsende disse transaktioner til en anden grænseflade, der fungerer som en masterenhed, og transmitter deres resultater til den sande initiativtager.

Broer, der udfører disse funktioner, kaldes transparente broer; For at arbejde med enheder placeret bag sådanne broer kræves ingen yderligere brodrivere. Det er disse broer, der er beskrevet i PCI Bridge 1.1-specifikationen, og for dem er der som PCI-enheder en særlig klasse (06). I dette tilfælde er en "flad" ressourceadresseringsmodel (hukommelse og I/O) underforstået: hver enhed har sine egne adresser, unikke (ikke krydser andre) inden for et givet system (computer).

Der er også uigennemsigtige broer (ikke-gennemsigtig bro), som giver dig mulighed for at organisere separate segmenter med deres egne lokale adresserum. En uigennemsigtig bro udfører adresseoversættelse (konvertering) for transaktioner, hvor initiatoren og målenheden er placeret på modsatte sider af broen. Ikke alle ressourcer (adresseområder) på den modsatte side er muligvis tilgængelige gennem en sådan bro. Uigennemsigtige broer bruges for eksempel, når en computer har et "intelligent input/output" (I20) undersystem med sin egen I/O-processor og lokalt adresserum.

generel information

PCI-bussen inkluderer i starten muligheden for automatisk at konfigurere systemressourcer (hukommelses- og I/O-rum og interrupt request-linjer). Automatisk enhedskonfiguration (valg af adresser og interrupts) understøttes af BIOS- og OS-værktøjer; den er fokuseret på PnP-teknologi. PCI-standarden definerer et konfigurationsrum for hver funktion på op til 256 registre (8-bit), der ikke er tildelt hverken hukommelsesplads eller I/O-plads. De tilgås ved hjælp af specielle buskommandoer Configuration Read og Configuration Write, genereret ved hjælp af en af ​​hardware- og softwaremekanismerne beskrevet nedenfor. I dette rum er der områder, der er nødvendige for alle enheder, og specifikke. En given enhed har muligvis ikke registre på alle adresser, men skal understøtte normal fuldførelse for operationer adresseret til dem. I dette tilfælde skal læsning af ikke-eksisterende registre returnere nuller, og skrivning skal udføres som en tomgang.

Konfigurationsrummet for en funktion begynder med en standardoverskrift, som indeholder identifikatorer for producenten, enheden og dens klasse, samt en beskrivelse af de nødvendige og besatte systemressourcer. Header-strukturen er standardiseret til konventionelle enheder (type 0), PCI-PCI-broer (type 1), PCI-CardBus-broer (type 2). Header-typen bestemmer placeringen af ​​de velkendte registre og formålet med deres bits. Efter overskriften kan der være enhedsspecifikke registre. For standardiserede kapaciteter (kapacitet) af enheder (for eksempel energistyring) i konfigurationsrummet er der blokke af registre med kendte formål. Disse blokke er organiseret i kæder, den første blok er refereret til i standardoverskriften (CAP_PTR); i det første register i blokken er der et link til den næste blok (eller 0 hvis denne blok er den sidste). Ved at scanne kæden modtager konfigurationssoftwaren således en liste over alle tilgængelige enhedsegenskaber og deres positioner i funktionskonfigurationsrummet. PCI 2.3 definerer følgende CAP_ID'er, hvoraf nogle vil vi se på:

  • 01 - energistyring;
  • 02 - AGP-port;
  • 03 - VPD (Vital Product Data), data, der giver en omfattende beskrivelse af hardware (muligvis også software) egenskaber af enheder;
  • 04 — nummerering af slots og chassis;
  • 05 - MSI afbryder;
  • 06 - Hot Swap, hot-tilslutning til Compact PCI;
  • 07 - PCI-X protokoludvidelser;
  • 08 - forbeholdt AMD;
  • 09 - efter producentens skøn (leverandørspecifik);
  • 0Ah — debug port (Debug Port);
  • 0Bh - PCI Hot Plug, standard levering af "hot plug".

I PCI-X til Mode 2-enheder er konfigurationspladsen udvidet til 4096 bytes; i det udvidede rum kan der være udvidede ejendomsbeskrivelser.

Efter en hård nulstilling (eller tænding) reagerer PCI-enheder ikke på hukommelses- og I/O-pladsadgange og er kun tilgængelige for konfigurationslæsning og -skrivning. I disse operationer vælges enheder ved hjælp af individuelle IDSEL-signaler, og ved at læse registre lærer konfigurationssoftwaren om ressourcekrav og mulige enhedskonfigurationsmuligheder. Efter ressourceallokering er udført af konfigurationsprogrammet (under POST- eller OS-opstart), skrives konfigurationsparametre (basisadresser) til enhedskonfigurationsregistrene. Først efter dette sættes enheder (mere præcist, funktioner) til bits, der giver dem mulighed for at reagere på kommandoer for at få adgang til hukommelse og I/O-porte samt selv styre bussen. For altid at være i stand til at finde en brugbar konfiguration, skal alle ressourcer optaget af kort være flytbare i deres rum. For multifunktionsenheder skal hver funktion have sit eget konfigurationsrum. Enheden kan tilknytte de samme registre til både hukommelse og I/O-plads. I dette tilfælde skal begge deskriptorer være til stede i deres konfigurationsregistre, men driveren skal kun bruge én adgangsmetode (helst gennem hukommelsen).

Konfigurationsrummets header beskriver behovene for tre typer adresser:

  • registre i I/O Space);
  • I/O-registre tilknyttet hukommelse (Memory Mapped I/O). Dette er et hukommelsesområde, der skal tilgås i nøje overensstemmelse med, hvad udvekslingsinitiatoren anmoder om. Adgang til disse registre kan ændre den interne tilstand af perifere enheder;
  • hukommelse, der tillader forhåndshentbar hukommelse. Dette er et hukommelsesområde, hvor "ekstra" læsning (med ubrugte resultater) ikke fører til bivirkninger, alle bytes læses uafhængigt af BE#-signaler, og skrivninger af individuelle bytes kan slås sammen (det vil sige, det er hukommelse i sin reneste form).

Adressekrav er angivet i basisadresseregistre - BAR (Base Address Register). Konfigurationsprogrammet kan også bestemme størrelsen af ​​de nødvendige områder. For at gøre dette, efter en hardwarenulstilling, skal den læse og gemme værdierne for basisadresserne (disse vil være standardadresserne), skrive FFFFFFFFh til hvert register og læse deres værdi igen. I de modtagne ord skal du nulstille typedekodningsbittene (bits til hukommelse og bits til I/O), invertere og inkrementere det resulterende 32-bit ord - resultatet vil være længden af ​​området (ignorer bits for porte ). Metoden antager, at længden af ​​regionen er udtrykt som 2n, og at regionen er naturligt justeret. Standardhovedet rummer op til 6 basisadresseregistre, men ved brug af 64-bit adressering reduceres antallet af beskrevne blokke. Ubrugte BAR-registre skal altid returnere nuller, når de læses.

PCI har understøttelse af ældre enheder (VGA, IDE), som erklærer sig selv som sådan ved hjælp af klassekoden i headeren. Deres traditionelle (faste) portadresser er ikke erklæret i konfigurationsrummet, men når portadgangsaktiveringsbitten er indstillet, får enheder også lov til at svare på disse adresser.