Perifer komponentanslutning -
Peripheral Component Interconnect

Från Wikipedia, den fria encyklopedin
PCI
PCI lokal buss
PCI -kortplatser Digon3.JPG
Tre 5-volts 32-bitars PCI-expansionsplatser på ett moderkort (PC-fäste på vänster sida)
År skapat 22 juni 1992
; 29 år sedan
 (
1992-06-22
)
Skapad av Intel
Ersätter ISA , EISA , MCA , VLB
Ersatt av PCI Express (2004)
Bredd i bitar 32 eller 64
Fart Halv duplex :
133  MB /s (32-bitars vid 33 MHz-standardkonfigurationen)
266 MB/s (32-bitars vid 66 MHz)
266 MB/s (64-bitars vid 33 MHz)
533 MB/s (64 -bit vid 66 MHz)
Stil Parallell
Hotplugging -gränssnitt Frivillig
Hemsida

Component Peripheral Interconnect ( PCI ) är en lokal dator buss för att fästa maskinvaruheter i en dator och är en del av PCI Local Bus standard. PCI -bussen stöder de funktioner som finns på en processorbuss men i ett standardiserat format som är oberoende av vilken processor som helst . Enheter som är anslutna till PCI -bussen verkar för en bussmästare att anslutas direkt till sin egen buss och tilldelas adresser i processorns adressutrymme . Det är en parallellbuss , synkron med en enda bussklocka . Anslutna enheter kan antingen ha formen av en integrerad krets monterad på moderkortet (kallad en plan enhet i PCI -specifikationen) eller ett expansionskort som passar in i en kortplats. PCI Local Bus implementerades först i IBM PC -kompatibla , där det förskjutit kombinationen av flera långsamma Industry Standard Architecture (ISA) -platser och en snabb VESA Local Bus (VLB) -plats som busskonfiguration. Det har därefter antagits för andra datortyper. Typiska PCI -kort som används i datorer inkluderar: nätverkskort , ljudkort , modem , extra portar som Universal Serial Bus ( USB ) eller seriell , TV -tunerkort och hårddiskens värdadaptrar . PCI -grafikkort ersatte ISA- och VLB -kort tills ökad bandbredd måste växa ut PCI -förmågorna. Det föredragna gränssnittet för grafikkort blev sedan Accelerated Graphics Port (AGP), en superset av PCI, innan det gav vika för PCI Express.

Den första versionen av PCI som hittades i stationära datorer var en 32-bitars buss med en 33  MHz bussklocka och 5 V-signalering, även om PCI 1.0-standarden också gav en 64-bitars variant. Dessa har ett lokaliseringshack i kortet. Version 2.0 av PCI -standarden introducerade 3,3 V -kortplatser, fysiskt kännetecknade av en vänd fysisk kontakt för att förhindra oavsiktlig insättning av 5 V -kort. Universalkort, som kan fungera på endera spänningen, har två hack. Version 2.1 av PCI -standarden introducerade valfri 66 MHz -drift. En serverorienterad variant av PCI, PCI Extended ( PCI-X ) som drivs med frekvenser upp till 133 MHz för PCI-X 1.0 och upp till 533 MHz för PCI-X 2.0. En intern kontakt för bärbara kort, kallad Mini PCI , introducerades i version 2.2 av PCI -specifikationen. PCI -bussen antogs också för en extern bärbar datorkontaktstandard - CardBus . Den första PCI-specifikationen utvecklades av Intel , men efterföljande utveckling av standarden blev PCI Special Interest Group ( PCI-SIG ) ansvar .

PCI och PCI-X kallas ibland för antingen parallell PCI eller konventionell PCI för att skilja dem tekniskt från deras nyare efterträdare PCI Express , som antog en seriell , filbaserad arkitektur. PCI: s storhetstid på marknaden för stationära datorer var cirka 1995 till 2005. PCI och PCI-X har blivit föråldrade för de flesta ändamål; men 2020 är de fortfarande vanliga på moderna stationära datorer för bakåtkompatibilitet och den låga relativa kostnaden att producera. En annan vanlig modern tillämpning av parallell PCI är i industriella datorer , där många specialiserade expansionskort, som används här, aldrig övergick till PCI Express, precis som med vissa ISA -kort. Många typer av enheter som tidigare var tillgängliga på PCI -expansionskort är nu vanligtvis integrerade på moderkort eller tillgängliga i USB- och PCI Express -versioner.

Historia

Ett typiskt 32-bitars, 5 V-endast PCI-kort, i detta fall, en SCSI- adapter från Adaptec
Ett moderkort med två 32-bitars PCI-kortplatser och två storlekar av PCI Express-kortplatser

Arbetet med PCI började på Intel Architecture Labs (IAL, även Architecture Development Lab) c.

 1990
. Ett team av främst IAL -ingenjörer definierade arkitekturen och utvecklade ett bevis på konceptchipset och plattform (Saturnus) som samarbetade med team i företagets stationära PC -system och kärnlogiska produktorganisationer.

PCI togs omedelbart i bruk på servrar och ersatte Micro Channel -arkitektur (MCA) och Extended Industry Standard Architecture (EISA) som den utvalda serverutökningsbussen. I vanliga datorer var PCI långsammare att ersätta VLB och fick inte betydande marknadspenetration förrän i slutet av 1994 i andra generationens Pentium- datorer. 1996 var VLB nästan utdöd och tillverkare hade antagit PCI även för Intel 80486 (486) datorer. EISA fortsatte att användas vid sidan av PCI genom 2000. Apple Computer antog PCI för professionella Power Macintosh- datorer (ersätter NuBus ) i mitten av 1995 och konsumentens Performa- produktlinje (ersätter LC Processor Direct Slot (PDS)) i mitten av 1996.

Utanför servermarknaden förblev dock 64-bitarsversionen av vanlig PCI i praktiken, även om den till exempel användes av alla (post-iMac) G3- och G4 Power Macintosh-datorer .

Senare revideringar av PCI har lagt till nya funktioner och prestandaförbättringar, inklusive en 66  MHz 3,3  V- standard och 133 MHz PCI-X , och anpassning av PCI-signalering till andra formfaktorer. Både PCI-X 1.0b och PCI-X 2.0 är bakåtkompatibla med vissa PCI-standarder. Dessa revisioner användes på serverhårdvara men konsument-PC-hårdvara förblev nästan alla 32-bitars, 33 MHz och 5 volt.

PCI-SIG introducerade den seriella PCI Express i c.

 2004
. Sedan dess har moderkortstillverkare inkluderat successivt färre PCI -kortplatser till förmån för den nya standarden. Många nya moderkort ger inte alls PCI -kortplatser alls, i slutet av 2013.

PCI -historia
Spec År Ändra sammanfattning
PCI 1.0 1992 Originalnummer
PCI 2.0 1993 Inbyggd kontakt och tilläggskortspecifikation
PCI 2.1 1995 Införlivade förtydliganden och tillagt 66 MHz kapitel
PCI 2.2 1998 Inbyggda ECN: er och förbättrad läsbarhet
PCI 2.3 2002 Inbyggda ECN, errata och raderade 5-volts nyckelade tilläggskort
PCI 3.0 2004 Borttaget stöd för 5,0 volt nyckelad moderkortskontakt

Automatisk konfiguration

PCI tillhandahåller separata minnes- och minneskartade I/O- portadressutrymmen för x86- processorfamiljen, 64 respektive 32 bitar . Adresser i dessa adressutrymmen tilldelas av programvara. Ett tredje adressutrymme, kallat PCI Configuration Space , som använder ett fast adresseringsschema, tillåter programvara att bestämma mängden minne och I/O -adressutrymme som behövs för varje enhet. Varje enhet kan begära upp till sex områden med minnesutrymme eller in/ut (I/O) portutrymme via sina konfigurationsutrymme -register.

I ett typiskt system frågar firmware (eller operativsystemet ) alla PCI -bussar vid starttid (via PCI Configuration Space ) för att ta reda på vilka enheter som finns och vilka systemresurser (minnesutrymme, I/O -utrymme, avbrottslinjer etc. ) varje behov. Den fördelar sedan resurserna och berättar för varje enhet vad dess tilldelning är.

PCI -konfigurationsutrymmet innehåller också en liten mängd information om enhetstyp, vilket hjälper ett operativsystem att välja enhetsdrivrutiner för det, eller åtminstone att ha en dialog med en användare om systemkonfigurationen.

Enheter kan ha ett inbyggt skrivskyddsminne (ROM) som innehåller körbar kod för x86- eller PA-RISC- processorer, en öppen firmware- drivrutin eller en Option ROM . Dessa behövs vanligtvis för enheter som används under systemstart, innan drivrutiner laddas av operativsystemet.

Dessutom finns det PCI Latency Timers som är en mekanism för PCI Bus-Mastering- enheter för att dela PCI-bussen rättvist. "Rättvis" i det här fallet innebär att enheter inte kommer att använda en så stor del av den tillgängliga PCI -bussbandbredden att andra enheter inte kan få nödvändigt arbete. Observera att detta inte gäller PCI Express.

Hur detta fungerar är att varje PCI-enhet som kan fungera i buss-master-läge krävs för att implementera en timer, kallad Latency Timer, som begränsar den tid som enheten kan hålla PCI-bussen. Timern startar när enheten blir bussägare och räknar ner med hastigheten för PCI -klockan. När räknaren når noll måste enheten släppa bussen. Om inga andra enheter väntar på bussägande kan det helt enkelt ta bussen igen och överföra mer data.

Avbryter

Enheter måste följa ett protokoll så att avbrottslinjerna kan delas. PCI -bussen innehåller fyra avbrottslinjer, som alla är tillgängliga för varje enhet. De är dock inte parallellkopplade liksom de andra PCI -busslinjerna. Positionerna för avbrottslinjerna roterar mellan luckor, så det som visas för en enhet som INTA# -linjen är INTB# till nästa och INTC# till den efter det. Enfunktionsenheter använder sitt INTA# för avbrottssignalering, så enhetsbelastningen fördelas ganska jämnt över de fyra tillgängliga avbrottslinjerna. Detta lindrar ett vanligt problem med delningsavbrott.

Kartläggningen av PCI-avbrottslinjer på systemavbrottslinjer, via PCI-värdbryggan, är implementeringsberoende. Plattformsspecifik BIOS- kod ( Basic Input/Output System ) är avsedd att veta detta och ställa in fältet "avbrottslinje" i varje enhets konfigurationsutrymme som anger vilken IRQ den är ansluten till.

PCI-avbrottslinjer är nivåutlösta . Detta valdes framför kantutlösande för att få en fördel vid service av en delad avbrottslinje och för robusthet: kantutlösta avbrott är lätta att missa.

Senare revideringar av PCI-specifikationen lägger till stöd för meddelandesignalerade avbrott . I detta system signalerar en enhet sitt behov av service genom att utföra en minneskrivning, snarare än genom att hävda en dedikerad linje. Detta lindrar problemet med brist på avbrottslinjer. Även om avbrottsvektorer fortfarande delas, lider det inte av delningsproblem med nivåutlösta avbrott. Det löser också routingsproblemet, eftersom minneskrivningen inte är oförutsägbart modifierad mellan enhet och värd. Slutligen, eftersom meddelandesignaleringen är in-band , löser den några synkroniseringsproblem som kan uppstå med publicerade skrivningar och out-of-band- avbrottslinjer.

PCI Express har inte alls fysiska avbrottslinjer. Den använder uteslutande meddelandesignalerade avbrott.

Konventionella hårdvaruspecifikationer

Diagram som visar de olika nyckelpositionerna för 32-bitars och 64-bitars PCI-kort

Dessa specifikationer representerar den vanligaste versionen av PCI som används i vanliga datorer:

  • 33.33 MHz
    klocka med synkrona överföringar
  • Toppöverföringshastighet på 133  MB /s (133 megabyte per sekund) för 32-bitars bussbredd (33,33 MHz × 32 bitar ÷ 8 bitar/byte = 133 MB/s)
  • 32-bitars bussbredd
  • 32- eller 64-bitars minnesadressutrymme (4  GiB eller 16  EiB )
  • 32-bitars I/O-portutrymme
  • 256- byte (per enhet) konfigurationsutrymme
  • 5-volts signalering
  • Reflekterad vågomkoppling

PCI-specifikationen ger också alternativ för 3,3 V-signalering, 64-bitars bussbredd och 66 MHz-klockning, men dessa förekommer inte vanligt utanför PCI-X-stöd på servermoderkort.

PCI -bussarbitern utför buss skiljedom bland flera masters på PCI -bussen. Vilket antal bussmästare som helst kan bo på PCI -bussen, liksom förfrågningar om bussen. Ett par förfrågnings- och bevillingssignaler är tillägnade varje bussmästare.

Kortspänning och nyckel

Ett PCI-X Gigabit Ethernet- expansionskort med både 5 V och 3,3 V stödhak, sida B mot kameran

Typiska PCI -kort har antingen ett eller två nyckelhack, beroende på deras signalspänning. Kort som kräver 3,3 volt har ett hack 56,21 mm från kortets bakplatta; de som kräver 5 volt har ett hack 104,47 mm från bakplattan. Detta gör att kort endast kan monteras i kortplatser med en spänning som de stöder. "Universalkort" som accepterar endera spänningen har båda nyckelhackarna.

Kontaktanslutning

PCI -kontakten definieras som att ha 62 kontakter på varje sida av kantkontakten , men två eller fyra av dem ersätts med nyckelskåror, så ett kort har 60 eller 58 kontakter på varje sida. Sida A hänvisar till "lödsidan" och sida B hänvisar till "komponentsidan": om kortet hålls med kontakten pekande nedåt, kommer en vy från sidan A att ha bakplattan till höger, medan en vy över sidan B kommer att ha bakplattan till vänster. Pinout på B- och A -sidor är som följer och tittar ner i moderkortkontakten (stift A1 och B1 är närmast bakplattan).

32-bitars PCI-kontakt pinout
Stift Sida B Sida A Kommentarer
1 −12 V TRST# JTAG -portstift (tillval)
2 TCK +12 V
3 Jord TMS
4 TDO TDI
5 +5 V +5 V
6 +5 V INTA# Avbryt linjer (öppen dränering)
7 INTB# INTC#
8 INTD# +5 V
9 PRSNT1# Reserverad Dras lågt för att indikera 7,5 eller 25 W effekt som krävs
10 Reserverad IOPWR +5 V eller +3,3 V
11 PRSNT2# Reserverad Draget lågt för att indikera 7,5 eller 15 W effekt krävs
12 Jord Jord Nyckelhak för kort med 3,3 V
13 Jord Jord
14 Reserverad 3.3 V aux Standby -effekt (tillval)
15 Jord RST# Buss återställs
16 CLK IOPWR 33/66 MHz klocka
17 Jord GNT# Bussbidrag från moderkort till kort
18 REQ# Jord Bussförfrågan från kort till moderkort
19 IOPWR PME# Strömhanteringshändelse (tillval) 3,3 V, öppet avlopp, aktivt lågt.
20 AD [31] AD [30] Adress/databuss (övre halvan)
21 AD [29] +3,3 V
22 Jord AD [28]
23 AD [27] AD [26]
24 AD [25] Jord
25 +3,3 V AD [24]
26 C/BE [3]# IDSEL
27 AD [23] +3,3 V
28 Jord AD [22]
29 AD [21] AD [20]
30 AD [19] Jord
31 +3,3 V AD [18]
32 AD [17] AD [16]
33 C/BE [2]# +3,3 V
34 Jord RAM# Bussöverföring pågår
35 IRDY# Jord Initiativtagare klar
36 +3,3 V TRDY# Mål klart
37 DEVSEL# Jord Mål valt
38 PCIXCAP Jord SLUTA# PCI-X- kapabel; Målförfrågningar stannar
39 LÅSA# +3,3 V Låst transaktion
40 PERR# SMBCLK SDONE Paritetsfel; SMBus -klocka eller Snoop klar (föråldrad)
41 +3,3 V SMBDAT SBO#
42 SERR# Jord Systemfel
43 +3,3 V PAR Jämn paritet över AD [31:00] och C/BE [3: 0]#
44 C/BE [1]# AD [15] Adress/databuss (högre hälften)
45 AD [14] +3,3 V
46 Jord AD [13]
47 AD [12] AD [11]
48 AD [10] Jord
49 M66EN Jord AD [09]
50 Jord Jord Nyckelhak för 5 V-kompatibla kort
51 Jord Jord
52 AD [08] C/BE [0]# Adress/databuss (nedre halvan)
53 AD [07] +3,3 V
54 +3,3 V AD [06]
55 AD [05] AD [04]
56 AD [03] Jord
57 Jord AD [02]
58 AD [01] AD [00]
59 IOPWR IOPWR
60 ACK64# REQ64# För 64-bitars förlängning; ingen anslutning för 32-bitars enheter.
61 +5 V +5 V
62 +5 V +5 V

64-bitars PCI utökar detta med ytterligare 32 kontakter på varje sida som ger AD [63:32], C/BE [7: 4]#, PAR64 paritetssignal och ett antal ström- och jordstift.

Legend
Jordnål Noll volt referens
Strömstift Matar PCI -kortet
Utgångsstift Drivs av PCI -kortet, mottaget av moderkortet
Initiatorutgång Drivs av master/initiator, mottagen av målet
I/O -signal Kan drivas av initiativtagare eller mål, beroende på operation
Målutmatning Drivet av målet, mottaget av initiativtagaren/mästaren
Inmatning Drivs av moderkortet, mottaget av PCI -kortet
Öppna avlopp Kan dras lågt och/eller avkännas av flera kort
Reserverad Används inte för närvarande, anslut inte

De flesta linjer är parallellt anslutna till varje kortplats. Undantagen är:

  • Varje kortplats har sin egen REQ# -utgång till och GNT# -ingång från moderkortet.
  • Varje kortplats har sin egen IDSEL -linje, vanligtvis ansluten till en specifik AD -linje.
  • TDO kopplas ihop med följande kortplatsens TDI. Kort utan JTAG -stöd måste ansluta TDI till TDO för att inte bryta kedjan.
  • PRSNT1# och PRSNT2# för varje kortplats har sina egna uppdragningsmotstånd på moderkortet. Moderkortet kan (men behöver inte) känna av dessa stift för att bestämma förekomsten av PCI -kort och deras strömkrav.
  • REQ64# och ACK64# dras upp individuellt på endast 32-bitars kortplatser.
  • Avbrottslinjerna INTA# till INTD# är anslutna till alla platser i olika ordningar. (INTA# på en plats är INTB# på nästa och INTC# på den efter det.)

Anmärkningar:

  • IOPWR är +3,3 V eller +5 V, beroende på bakplanet. Spåren har också en ås på en av två platser som förhindrar att kort sätts in som inte har motsvarande nyckelhack, vilket indikerar stöd för den spänningsstandarden. Universalkort har båda nyckelhackar och använder IOPWR för att bestämma deras I/O -signalnivåer.
  • PCI SIG uppmuntrar starkt 3,3 V PCI -signalering, vilket kräver stöd för den sedan standardrevision 2.3, men de flesta PC -moderkort använder 5 V -varianten. Även om många för närvarande tillgängliga PCI-kort stöder båda och har två nyckelhackar för att indikera det, finns det fortfarande ett stort antal 5 V-only-kort på marknaden.
  • M66EN -stiftet är en extra mark för 5 V PCI -bussar som finns i de flesta PC -moderkort. Kort och moderkort som inte stöder 66 MHz -drift jordade också denna pin. Om alla deltagare stöder 66 MHz-drift höjer ett uppdragningsmotstånd på moderkortet denna signal högt och 66 MHz-drift aktiveras. Stiftet är fortfarande anslutet till jord via kopplingskondensatorer på varje kort för att bevara sin AC -skärmningsfunktion.
  • PCIXCAP -stiftet är en extra mark för PCI -bussar och kort. Om alla kort och moderkortet stöder PCI-X- protokollet höjer ett pull-up-motstånd på moderkortet denna signal högt och PCI-X-drift aktiveras. Stiftet är fortfarande anslutet till jord via kopplingskondensatorer på varje kort för att bevara sin AC -skärmningsfunktion.
  • Minst en av PRSNT1# och PRSNT2# måste jordas av kortet. Den valda kombinationen anger kortets totala effektbehov (25 W, 15 W eller 7,5 W).
  • SBO# och SDONE är signaler från en cachekontroller till det aktuella målet. De är inte initiatorutgångar, men är färgade på det sättet eftersom de är målingångar.
  • PME# (
    19 A
    ) - Energihanteringshändelse (tillval) som stöds i PCI
    version 2.2
    och senare. Det är en
    3,3 V
    , öppen dränering , aktiv låg signal. PCI-kort kan använda denna signal för att skicka och ta emot PME via PCI-uttaget direkt, vilket eliminerar behovet av en speciell Wake-on-LAN-kabel .

Blandning av 32-bitars och 64-bitars PCI-kort i olika breddplatser

Ett halvinsatt PCI-X-kort i en 32-bitars PCI-kortplats, som illustrerar behovet av det högra hacket och det extra rummet på moderkortet för att förbli bakåtkompatibelt
64-bitars SCSI-kort som fungerar i en 32-bitars PCI-kortplats

De flesta 32-bitars PCI-kort fungerar korrekt i 64-bitars PCI-X-kortplatser, men bussens klockfrekvens kommer att begränsas till klockfrekvensen för det långsammaste kortet, en inneboende begränsning av PCI: s delade busstopologi. Till exempel, när en PCI 2.3, 66-MHz kringutrustning är installerad i en PCI-X-buss som kan 133 MHz, kommer hela bussens bakplan att begränsas till 66 MHz. För att komma runt denna begränsning har många moderkort två eller flera PCI/PCI-X-bussar, med en buss avsedd att användas med höghastighets-PCI-X-kringutrustning och den andra bussen avsedd för kringutrustning för allmänna ändamål.

Många 64-bitars PCI-X-kort är utformade för att fungera i 32-bitars läge om de sätts i kortare 32-bitars kontakter, med viss prestandaförlust. Ett exempel på detta är Adaptec 29160 64-bitars SCSI- gränssnittskort. Vissa 64-bitars PCI-X-kort fungerar dock inte i vanliga 32-bitars PCI-kortplatser.

Om du installerar ett 64-bitars PCI-X-kort i en 32-bitarsplats kommer 64-bitars delen av kortkantskontakten inte att vara ansluten och överhängande. Detta kräver att det inte finns några moderkortskomponenter placerade för att mekaniskt hindra den överhängande delen av kortkantkontakten.

Fysiska dimensioner

PCI -fästen höjder:

  • Standard: 120,02 mm;
  • Låg profil: 79,20 mm.

PCI -kortlängder (standardfäste & 3,3 V):

  • Kort kort: 169,52 mm;
  • Långt kort: 313,78 mm.

PCI -kortlängder (Low Profile Bracket & 3,3 V):

  • MD1: 121,79 mm;
  • MD2: 169,52 mm;
  • MD3: 243,18 mm.

Mini PCI

En Mini PCI -kortplats
Mini PCI Wi-Fi- kort typ IIIB
PCI-till-MiniPCI-omvandlare typ III
MiniPCI- och MiniPCI Express -kort i jämförelse

Mini PCI lades till i PCI version 2.2 för användning i bärbara datorer ; den använder en 32-bitars, 33 MHz buss med strömanslutningar (endast 3,3 V; 5 V är begränsad till 100 mA) och stöd för bussmastering och DMA . Standardstorleken för Mini PCI-kort är ungefär en fjärdedel av deras motsvarigheter i full storlek. Det finns ingen åtkomst till kortet från utsidan av fodralet, till skillnad från stationära PCI -kort med fästen som bär kontakter. Detta begränsar den typ av funktioner som ett Mini PCI -kort kan utföra.

Många Mini PCI-enheter har utvecklats som Wi-Fi , Fast Ethernet , Bluetooth , modem (ofta Winmodems ), ljudkort , kryptografiska acceleratorer , SCSI , IDE - ATA , SATA controllers och kombinationskort. Mini PCI-kort kan användas med vanlig PCI-utrustad maskinvara med Mini PCI-till-PCI- omvandlare . Mini PCI har ersatts av det mycket smalare PCI Express Mini Card

Tekniska detaljer för Mini PCI

Mini PCI -kort har en maximal effektförbrukning på 2 W, vilket begränsar funktionaliteten som kan implementeras i denna formfaktor. De måste också stödja CLKRUN# PCI -signalen som används för att starta och stoppa PCI -klockan för energihanteringsändamål.

Det finns tre kort formfaktorer : typ I, typ II och typ III-kort. Kortkontakten som används för varje typ inkluderar: Typ I och II använder en 100-polig staplingskontakt, medan typ III använder en 124-polig kantkontakt, dvs kontakten för typ I och II skiljer sig från den för typ III, där kontakten är på kanten av ett kort, som med en SO-DIMM . De ytterligare 24 stiften ger de extra signaler som krävs för att leda I/O tillbaka genom systemkontakten (ljud, AC-Link , LAN , telefonlinje-gränssnitt). Typ II -kort har RJ11- och RJ45 -anslutna kontakter. Dessa kort måste vara placerade vid kanten av datorn eller dockningsstationen så att RJ11- och RJ45 -portarna kan monteras för extern åtkomst.

Typ Kort på
ytterkanten av
värdsystemet
Anslutning Storlek
(mm × mm × mm)
kommentarer
IA Nej 100-stifts
stapling
0
7,5
0
× 70
.0
× 45
.00
Stor Z -dimension (7,5 mm)
IB
0
5,5
0
× 70
.0
× 45
.00
Mindre Z -mått (5,5 mm)
IIA Ja 17,44 × 70
.0
× 45
.00
Stor Z -dimension (17,44 mm)
IIB
0
5,5
0
× 78
.0
× 45
.00
Mindre Z -mått (5,5 mm)
IIIA Nej 124-stifts
kortkant
0
2,4
0
× 59,6 × 50,95
Större Y -mått (50,95 mm)
IIIB
0
2,4
0
× 59,6 × 44,6
0
Mindre Y -mått (44,6 mm)

Mini PCI skiljer sig från 144-pin Micro PCI.

PCI -busstransaktioner

PCI -busstrafik består av en serie PCI -busstransaktioner. Varje transaktion består av en adressfas följt av en eller flera datafaser . Datafasens riktning kan vara från initiator till mål (skrivtransaktion) eller vice versa (läs transaktion), men alla datafaser måste vara i samma riktning. Vardera parten kan när som helst pausa eller stoppa datafaserna. (Ett vanligt exempel är en PCI-enhet med låg prestanda som inte stöder burst-transaktioner och alltid stoppar en transaktion efter den första datafasen.)

Varje PCI -enhet kan initiera en transaktion. Först måste den begära tillstånd från en PCI -bussarbiter på moderkortet. Arbetsmannen ger tillstånd till en av de begärande enheterna. Initiativtagaren börjar adressfasen med att sända en 32-bitars adress plus en 4-bitars kommandokod och väntar sedan på att ett mål ska svara. Alla andra enheter undersöker denna adress och en av dem svarar några cykler senare.

64-bitars adressering görs med hjälp av en tvåstegs adressfas. Initiativtagaren sänder de låga 32 adressbitarna, åtföljd av en speciell "dubbel adresscykel" kommandokod. Enheter som inte stöder 64-bitars adressering kan helt enkelt inte svara på kommandokoden. Nästa cykel sänder initiatorn de höga 32 adressbitarna plus den verkliga kommandokoden. Transaktionen fungerar identiskt från och med den tiden. För att säkerställa kompatibilitet med 32-bitars PCI-enheter är det förbjudet att använda en dubbel adresscykel om det inte behövs, det vill säga om adressbitarna med hög ordning alla är noll.

Medan PCI-bussen överför 32 bitar per datafas, sänder initiatorn 4 aktiva låga byteaktiveringssignaler som indikerar vilka 8-bitars byte som ska betraktas som signifikanta. I synnerhet måste en skrivning endast påverka de aktiverade byte i mål -PCI -enheten. De har liten betydelse för minnesläsningar, men I/O -läsningar kan ha biverkningar. PCI-standarden tillåter uttryckligen en datafas utan byte aktiverad, som måste fungera som en no-op.

PCI -adressutrymmen

PCI har tre adressutrymmen: minne, I/O -adress och konfiguration.

Minnesadresser är 32 bitar (valfritt 64 bitar) i storlek, stöder cachning och kan vara burst -transaktioner.

I/O -adresser är kompatibla med Intel x86 -arkitekturens I/O -portadressutrymme. Även om PCI -busspecifikationen tillåter burst -transaktioner i alla adressutrymmen, stöder de flesta enheter den endast för minnesadresser och inte för I/O.

Slutligen ger PCI -konfigurationsutrymme åtkomst till 256 byte speciella konfigurationsregister per PCI -enhet. Varje PCI -kortplats får sitt eget adressområde för konfigurationsutrymme. Registren används för att konfigurera enhetsminne och I/O -adressintervall som de ska svara på från transaktionsinitierare. När en dator startas första gången svarar alla PCI -enheter endast på deras konfigurationsutrymme. Dators BIOS söker efter enheter och tilldelar dem minnes- och I/O -adressintervall.

Om en adress inte gör anspråk på någon enhet kommer transaktionsinitierarens adressfas att ta slut och initieraren avbryter operationen. Vid läsningar är det vanligt att ange all-one för läsdatavärdet (0xFFFFFFFF) i det här fallet. PCI-enheter försöker därför i allmänhet undvika att använda all-one-värdet i viktiga statusregister, så att ett sådant fel lätt kan upptäckas av programvara.

PCI -kommandokoder

Det finns 16 möjliga 4-bitars kommandokoder, och 12 av dem tilldelas. Med undantag för den unika dubbla adresscykeln anger den minst signifikanta biten i kommandokoden om följande datafaser är en läsning (data skickad från mål till initiator) eller en skrivning (data skickad från en initiator till mål). PCI -mål måste undersöka såväl kommandokoden som adressen och inte svara på adressfaser som anger en kommandokod som inte stöds.

; de får inte användas förrän det har gjorts.

0000: Avbryt bekräftelse
Detta är en speciell form av läscykel som implicit adresseras till avbrottsstyrenheten, som returnerar en avbrottsvektor. 32-bitars adressfält ignoreras. En möjlig implementering är att generera en avbrottsbekräftelsecykel på en ISA -buss med hjälp av en PCI/ISA -bussbro. Detta kommando är för IBM PC -kompatibilitet ; om det inte finns någon Intel 8259 -stil avbrottsstyrenhet på PCI -bussen behöver denna cykel aldrig användas.
0001: Specialcykel
Denna cykel är en särskild sändningsskrivning av systemhändelser som PCI -kortet kan vara intresserad av. Adressfältet för en speciell cykel ignoreras, men det följs av en datafas som innehåller ett nyttolastmeddelande. De för närvarande definierade meddelanden meddelar att processorn av någon anledning stannar (t.ex. för att spara ström). Ingen enhet svarar någonsin på denna cykel; den avslutas alltid med en huvudavbrott efter att ha lämnat data på bussen i minst 4 cykler.
0010: I/O Läs
Detta utför en läsning från I/O -utrymme. Alla 32 bitar av läsadressen tillhandahålls så att en enhet (av kompatibilitetsskäl) kan implementera I/O -register med mindre än 4 byte. Om byten möjliggör förfrågningsdata som inte ligger inom det adressintervall som stöds av PCI-enheten (t.ex. en 4-bytes läsning från en enhet som endast stöder 2 byte I/O-adressutrymme) måste den avslutas med en målavbrott. Flera datacykler är tillåtna med hjälp av linjär (enkel inkrementering) burstordning.
PCI -standarden avskräcker från användning av I/O -utrymme i nya enheter, och föredrar att så mycket som möjligt görs genom huvudsaklig minneskartläggning.
0011: I/O Skriv
Detta utför ett skriv till I/O -utrymme.
010 x : Reserverad
En PCI -enhet får inte svara på en adresscykel med dessa kommandokoder.
0110: Minnesläsning
Detta utför en läscykel från minnesutrymme. Eftersom det minsta minnesutrymmet en PCI -enhet är tillåtet att implementera är 16 byte, behövs inte de två minst signifikanta bitarna i adressen under adressfasen; motsvarande information kommer fram under datafaserna i form av bytesvalsignaler. De anger istället i vilken ordning burstdata måste returneras. Om en enhet inte stöder den begärda beställningen måste den ge det första ordet och sedan koppla från.
Om ett minnesutrymme är markerat som "förhämtningsbart" måste målenheten ignorera bytesvalsignalerna på ett läst minne och alltid returnera 32 giltiga bitar.
0111: Memory Write
Detta fungerar på samma sätt som en minnesavläsning. Bytevalsignalerna är viktigare vid en skrivning, eftersom ovalade byte inte får skrivas till minnet.
Generellt är PCI -skrivningar snabbare än PCI -läsningar, eftersom en enhet kan buffra inkommande skrivdata och släppa bussen snabbare. För en läsning måste den fördröja datafasen tills data har hämtats.
100 x : Reserverad
En PCI -enhet får inte svara på en adresscykel med dessa kommandokoder.
1010: Konfiguration läst
Detta liknar en I/O -läsning, men läser från PCI -konfigurationsutrymme. En enhet måste bara svara om de låga 11 bitarna i adressen anger en funktion och ett register som den implementerar, och om den speciella IDSEL -signalen hävdas. Den måste ignorera de höga 21 bitarna. Burst -läsningar (med linjär inkrementering) är tillåtna i PCI -konfigurationsutrymme.
Till skillnad från I/O -utrymme definieras standard PCI -konfigurationsregister så att läsningar aldrig stör enhetens tillstånd. Det är möjligt för en enhet att ha konfigurationsutrymme -register utöver de vanliga 64 bytes som har lästa biverkningar, men detta är sällsynt.
Tillgångar till konfigurationsutrymme har ofta några fördröjningscykler för att IDSEL -linjerna ska stabiliseras, vilket gör dem långsammare än andra former av åtkomst. Dessutom kräver ett konfigurationsutrymme åtkomst i flera steg i stället för en enda maskininstruktion. Det är därför bäst att undvika dem under rutinmässig drift av en PCI -enhet.
1011: Konfigurationsskrivning
Detta fungerar analogt med en konfigurationsläsning.
1100: Memory Read Multiple
Detta kommando är identiskt med en generisk minnesavläsning, men innehåller antydan om att en lång lässerie kommer att fortsätta bortom slutet av den aktuella cachelinjen, och målet bör internt hämta en stor mängd data internt . Ett mål är alltid tillåtet att betrakta detta som en synonym för en generisk minnesläsning.
1101: Dubbel adresscykel
Vid åtkomst till en minnesadress som kräver mer än 32 bitar för att representera, börjar adressfasen med detta kommando och de låga 32 bitarna i adressen, följt av en andra cykel med det faktiska kommandot och de höga 32 bitarna i adressen. PCI-mål som inte stöder 64-bitars adressering kan helt enkelt behandla detta som en annan reserverad kommandokod och inte svara på den. Denna kommandokod får endast användas med ett icke ordentligt högordersadressord; Det är förbjudet att använda denna cykel om det inte behövs.
1110: Minnesläsrad
Detta kommando är identiskt med en generisk minnesavläsning, men innehåller antydan om att läsningen kommer att fortsätta till slutet av cachelinjen. Ett mål är alltid tillåtet att betrakta detta som en synonym för en generisk minnesläsning.
1111: Minneskrivning och ogiltigförklaring
Detta kommando är identiskt med en generisk minneskrivning, men kommer med garantin att en eller flera hela cachelinjer kommer att skrivas, med alla byte -val aktiverade. Detta är en optimering för att skriva tillbaka cacher som snokar bussen. Normalt måste en tillbaka-cache som innehåller smutsiga data avbryta skrivoperationen tillräckligt länge för att först kunna skriva sina egna smutsiga data. Om skrivningen utförs med det här kommandot är data som ska skrivas tillbaka garanterat irrelevanta och kan helt enkelt ogiltigförklaras i återkopplingscachen.
Denna optimering påverkar bara snooping -cacheminnet och gör ingen skillnad för målet, vilket kan behandla detta som en synonym för minneskrivkommandot.

PCI -buss latens

Strax efter offentliggörandet av PCI -specifikationen upptäcktes att långa transaktioner av vissa enheter, på grund av långsamma bekräftelser, långa dataskurningar eller någon kombination, kan orsaka buffertunderskridande eller överskridande i andra enheter. Rekommendationer om tidpunkten för enskilda faser i Revision 2.0 gjordes obligatoriska i revision 2.1:

  • Ett mål måste kunna slutföra den initiala datafasen (hävda TRDY# och/eller STOP#) inom 16 cykler efter starten av en transaktion.
  • En initiator måste slutföra varje datafas (hävda IRDY#) inom 8 cykler.

Dessutom, från och med version 2.1, måste alla initiatorer som kan spränga mer än två datafaser implementera en programmerbar latentimer. Timern börjar räkna klockcykler när en transaktion startar (initiativtagaren hävdar FRAME#). Om timern har gått ut och domaren har tagit bort GNT#, måste initiativtagaren avsluta transaktionen vid nästa juridiska tillfälle. Detta är vanligtvis nästa datafas, men Memory Write och Invalidate -transaktioner måste fortsätta till slutet av cachelinjen.

Försenade transaktioner

Enheter som inte kan uppfylla dessa tidsbegränsningar måste använda en kombination av publicerade skrivningar (för minnesskrivningar) och fördröjda transaktioner (för andra skrivningar och alla läsningar). I en fördröjd transaktion registrerar målet transaktionen (inklusive skrivdata) internt och avbryter (hävdar STOP# istället för TRDY#) den första datafasen. Initiativtagaren måste försöka exakt samma transaktion senare. Under tiden utför målet internt transaktionen och väntar på den nya försöket. När den förnyade transaktionen syns levereras det buffrade resultatet.

En enhet kan vara målet för andra transaktioner medan en fördröjd transaktion slutförs; den måste komma ihåg transaktionstyp, adress, bytesväljare och (om skriv) datavärde och endast slutföra den korrekta transaktionen.

Om målet har en gräns för antalet fördröjda transaktioner som det kan registrera internt (enkla mål kan införa en gräns på 1), kommer det att tvinga dessa transaktioner att försöka igen utan att registrera dem. De kommer att hanteras när den aktuella fördröjda transaktionen är klar. Om två initiativtagare försöker samma transaktion kan en försenad transaktion som den ena påbörjar få sitt resultat levererat till den andra. detta är ofarligt.

Ett mål överger en fördröjd transaktion när ett försök lyckas leverera det buffrade resultatet, bussen återställs, eller när 2 15 = 32768 klockcykler (cirka 1 ms) går utan att se ett försök igen. Den senare ska aldrig hända i normal drift, men det förhindrar dödläge av hela bussen om en initiativtagare återställs eller fel.

PCI bussbroar

PCI -standarden gör det möjligt att ansluta flera oberoende PCI -bussar med bussbroar som vid behov vidarebefordrar drift på en buss till en annan. Även om PCI tenderar att inte använda många bussbroar, använder PCI Express- system många PCI-till-PCI-broar som kallas PCI Express Root Port ; varje PCI Express -kortplats verkar vara en separat buss, ansluten med en bro till de andra. PCI -värdbryggan (vanligtvis nordbrygga i x86 -plattformar) sammankopplar mellan CPU, huvudminne och PCI -buss.

Postat skriver

I allmänhet, när en bussbro ser en transaktion på en buss som måste vidarebefordras till den andra, måste den ursprungliga transaktionen vänta tills den vidarebefordrade transaktionen slutförs innan ett resultat är klart. Ett anmärkningsvärt undantag inträffar när det gäller minneskrivningar. Här kan bron registrera skrivdata internt (om det har plats) och signalera slutförande av skrivningen innan den vidarebefordrade skrivningen har slutförts. Eller, faktiskt, innan det har börjat. Sådana "skickade men ännu inte kommna" skrivningar kallas "postade skrivningar", analogt med ett postmeddelande. Även om de erbjuder stora möjligheter till prestationsvinster, är reglerna för vad som är tillåtet något invecklade.

Kombinera, slå samman och kollapsa

PCI -standarden tillåter bussbroar att under vissa situationer konvertera flera busstransaktioner till en större transaktion. Detta kan förbättra PCI -bussens effektivitet.

Kombinerande
Skrivtransaktioner till på varandra följande adresser kan kombineras till en längre burst -skrivning, så länge ordningen för åtkomsterna i burst är samma som ordningen för de ursprungliga skrivningarna. Det är tillåtet att infoga extra datafaser med alla bytefunktioner avstängda om skrivningarna är nästan på varandra följande.
Sammanslagning
Flera skrivningar till olika delar av samma ord kan slås samman till en enda skrivning med flera byte möjliggörs. I detta fall slås skrivningar som presenterades för bussbron i en viss ordning samman så att de inträffar samtidigt när de vidarebefordras.
Kollapsar
Flera skrivningar till samma byte eller byte får inte kombineras, till exempel genom att bara utföra den andra skrivningen och hoppa över den första skrivningen som skrevs över. Detta beror på att PCI -specifikationen tillåter att skriv har biverkningar.

PCI -bussignaler

PCI -busstransaktioner styrs av fem huvudsakliga styrsignaler, två drivs av initiativtagaren till en transaktion (FRAME#och IRDY#), och tre drivs av målet (DEVSEL#, TRDY#och STOP#). Det finns ytterligare två skiljessignaler (REQ# och GNT#) som används för att få tillstånd att initiera en transaktion. Alla är aktiva-låga , vilket betyder att det aktiva eller påstått tillståndet är en låg spänning . Uppdragsmotstånd på moderkortet säkerställer att de kommer att förbli höga (inaktiva eller bestämda ) om de inte drivs av någon enhet, men PCI-bussen är inte beroende av motstånden för att ändra signalnivån; alla enheter driver signalerna högt under en cykel innan de slutar driva signalerna.

Signaltid

Alla PCI -bussignaler samplas på klockans stigande kant. Signalerna ändras nominellt på klockans fallande kant, vilket ger varje PCI -enhet ungefär en halv klockcykel för att bestämma hur de ska reagera på de signaler den observerade på den stigande kanten, och en halv klockcykel för att överföra sitt svar till den andra enheten .

PCI-bussen kräver att varje gång enheten driver en signal förändringar PCI-buss, en vändning cykel måste förflyta mellan den tidpunkt då en enhet slutar att driva signalen och den andra enheten startar. Utan detta kan det finnas en period då båda enheterna drev signalen, vilket skulle störa bussdriften.

Kombinationen av denna vändcykel och kravet på att köra en kontrollinje högt i en cykel innan den slutar köra betyder att var och en av huvudstyrlinjerna måste vara hög i minst två cykler vid byte av ägare. PCI -bussprotokollet är utformat så att detta sällan är en begränsning; bara i några få speciella fall (särskilt snabba back-to-back-transaktioner ) är det nödvändigt att infoga ytterligare fördröjning för att uppfylla detta krav.

Skiljedom

Varje enhet på en PCI -buss som kan fungera som en bussmaster kan initiera en transaktion med vilken annan enhet som helst. För att säkerställa att endast en transaktion initieras åt gången måste varje master först vänta på en bussbidragssignal, GNT#, från en domare som finns på moderkortet. Varje enhet har en separat förfrågningsrad REQ# som begär bussen, men domaren kan "parkera" bussbidragssignalen vid vilken enhet som helst om det inte finns några aktuella begäranden.

Arbetsmannen kan ta bort GNT# när som helst. En enhet som förlorar GNT# kan slutföra sin nuvarande transaktion, men får inte starta en (genom att hävda FRAME#) såvida den inte observerar att GNT# hävdade cykeln innan den börjar.

Arbetsmannen kan också tillhandahålla GNT# när som helst, inklusive under en annan befälhavares transaktion. Under en transaktion påstås antingen FRAME# eller IRDY# eller båda; När båda är bekräftade är bussen ledig. En enhet kan initiera en transaktion när som helst när GNT# görs gällande och bussen är inaktiv.

Adressfas

En PCI -busstransaktion börjar med en adressfas . Initiativtagaren ser att den har GNT# och bussen är inaktiv, driver måladressen till AD [31: 0] -linjerna, det associerade kommandot (t.ex. minnesläsning eller I/O -skrivning) på C/BE [3 : 0]# rader och drar FRAME# lågt.

Varannan enhet undersöker adressen och kommandot och bestämmer om de ska svara som målet genom att hävda DEVSEL#. En enhet måste svara genom att hävda DEVSEL# inom 3 cykler. Enheter som lovar att svara inom 1 eller 2 cykler sägs ha "snabb DEVSEL" respektive "medium DEVSEL". (Egentligen är tiden för att svara 2,5 cykler, eftersom PCI -enheter måste överföra alla signaler en halv cykel tidigt så att de kan tas emot tre cykler senare.)

Observera att en enhet måste låsa adressen på den första cykeln; initiativtagaren måste ta bort adressen och kommandot från bussen på följande cykel, även innan ett DEVSEL# -svar tas emot. Den extra tiden är endast tillgänglig för tolkning av adressen och kommandot efter att det har tagits.

På den femte cykeln i adressfasen (eller tidigare om alla andra enheter har medium DEVSEL eller snabbare), tillåts en "subtraktiv avkodning" för alla adressområden. Detta används vanligtvis av en ISA -bussbrygga för adresser inom dess intervall (24 bitar för minne och 16 bitar för I/O).

I den sjätte cykeln, om det inte har gjorts något svar, kan initiativtagaren avbryta transaktionen genom att återställa FRAME#. Detta är känt som master abort terminering och det är vanligt att PCI bussbroar returnerar all-one data (0xFFFFFFFF) i detta fall. PCI-enheter är därför generellt utformade för att undvika att använda all-one-värdet i viktiga statusregister, så att ett sådant fel lätt kan upptäckas av programvara.

Adress fas timing

              _  0_  1_  2_  3_  4_  5_
        CLK _/ \_/ \_/ \_/ \_/ \_/ \_/
            ___
       GNT#    \___/XXXXXXXXXXXXXXXXXXX (GNT# Irrelevant after cycle has started)
            _______
     FRAME#        \___________________
                    ___
   AD[31:0] -------<___>--------------- (Address only valid for one cycle.)
                    ___ _______________
 C/BE[3:0]# -------<___X_______________ (Command, then first data phase byte enables)
            _______________________
    DEVSEL#            \___\___\___\___
                     Fast Med Slow Subtractive
              _   _   _   _   _   _   _
        CLK _/ \_/ \_/ \_/ \_/ \_/ \_/
                 0   1   2   3   4   5

På klockans 0 stigande kant observerar initiativtagaren FRAME# och IRDY# både högt och GNT# lågt, så det driver adressen, kommandot och hävdar FRAME# i tid för den stigande kanten på klockan 1. Målen spärrar adressen och börja avkoda det. De kan svara med DEVSEL# i tid för klocka 2 (snabb DEVSEL), 3 (medium) eller 4 (långsam). Subtraktiva avkodningsenheter, som inte ser något annat svar med klockan 4, kan svara på klockan 5. Om mastern inte ser ett svar med klockan 5, kommer den att avsluta transaktionen och ta bort FRAME# på klocka 6.

TRDY# och STOP# fastställs (högt) under adressfasen. Initiativtagaren kan hävda IRDY# så snart den är redo att överföra data, vilket teoretiskt kan vara så snart klockan 2.

Dubbelcykeladress

För att tillåta 64-bitars adressering kommer en master att presentera adressen under två på varandra följande cykler. Först skickar den adresserna med låg ordning med ett speciellt "dual-cycle address" -kommando på C/BE [3: 0]#. Under den följande cykeln skickar den adresserna i hög ordning och det faktiska kommandot. Dubbla adresscykler är förbjudna om adressbitarna med hög ordning är noll, så enheter som inte stöder 64-bitars adressering kan helt enkelt inte svara på kommandon med två cykler.

              _  0_  1_  2_  3_  4_  5_  6_
        CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
            ___
       GNT#    \___/XXXXXXXXXXXXXXXXXXXXXXX
            _______
     FRAME#        \_______________________
                    ___ ___
   AD[31:0] -------<___X___>--------------- (Low, then high bits)
                    ___ ___ _______________
 C/BE[3:0]# -------<___X___X_______________ (DAC, then actual command)
            ___________________________
    DEVSEL#                \___\___\___\___
                         Fast Med Slow
              _   _   _   _   _   _   _   _
        CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
                 0   1   2   3   4   5   6

Konfigurationsåtkomst

Adresser för åtkomst till PCI -konfigurationsutrymme avkodas speciellt. För dessa anger lågordernadelinjer förskjutningen av det önskade PCI-konfigurationsregistret och adressordlinjerna för hög ordning ignoreras. Istället måste en ytterligare adressignal, IDSEL -ingången, vara hög innan en enhet kan hävda DEVSEL#. Varje kortplats ansluter en annan högorderad adressrad till IDSEL-stiftet och väljs med en-het kodning på de övre adressraderna.

Datafaser

Efter adressfasen (specifikt från och med cykeln att DEVSEL# går lågt) kommer en skur av en eller flera datafaser . I alla fall driver initiatorn aktiva låga bytesvalsignaler på C/BE [3: 0]# -linjerna, men data på AD [31: 0] kan drivas av initiativtagaren (vid skriv) mål (vid läsningar).

Under datafaser tolkas C/BE [3: 0]#-raderna som aktiv-låg byte möjliggör . I händelse av en skrivning anger de påstådda signalerna vilken av de fyra byte på AD -bussen som ska skrivas till den adresserade platsen. Vid läsning anger de vilka byte initiatören är intresserad av. För läsningar är det alltid lagligt att ignorera byteaktiveringssignalerna och helt enkelt returnera alla 32 bitar; lagringsbara minnesresurser krävs för att alltid returnera 32 giltiga bitar. Bytefunktionerna är främst användbara för I/O -utrymmeåtkomst där läsningar har biverkningar.

En datafas med alla fyra C/BE# -linjer upprätthålls är uttryckligen tillåtet av PCI -standarden och får inte ha någon effekt på målet annat än att avancera adressen i pågående burståtkomst.

Datafasen fortsätter tills båda parter är redo att slutföra överföringen och fortsätta till nästa datafas. Initiativtagaren hävdar IRDY# ( initiator ready ) när den inte längre behöver vänta, medan målet hävdar TRDY# ( target ready ). Vilken sida som helst som tillhandahåller data måste köra den på AD -bussen innan den klarar sin klarsignal.

När en av deltagarna hävdar sin klarsignal, får den inte bli oförberedd eller på annat sätt ändra sina styrsignaler förrän i slutet av datafasen. Datamottagaren måste låsa AD-bussen varje cykel tills den ser både IRDY# och TRDY#, vilket markerar slutet på den aktuella datafasen och indikerar att just låsta data är ordet som ska överföras.

För att upprätthålla full bursthastighet har datasändaren sedan en halv klockcykel efter att ha sett både IRDY# och TRDY# påstått att köra nästa ord till AD -bussen.

             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___ (Must always be valid)
            _______________      |  ___  |   |   |
      IRDY#              x \_______/ x \___________
            ___________________  |       |   |   |
      TRDY#              x   x \___________________
            ___________          |       |   |   |
    DEVSEL#            \___________________________
            ___                  |       |   |   |
     FRAME#    \___________________________________
              _   _   _   _   _  |_   _  |_  |_  |_
        CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
             0   1   2   3   4   5   6   7   8   9

Detta fortsätter adresscykeln som illustreras ovan, förutsatt en enda adresscykel med medium DEVSEL, så målet svarar i tid för klocka 3. Men vid den tiden är ingen av sidorna redo att överföra data. För klocka 4 är initiatören redo, men målet är inte. På klockan 5 är båda klara och en dataöverföring sker (som indikeras av de vertikala linjerna). För klocka 6 är målet klart att överföra, men initiativtagaren är inte det. På klockan 7 blir initiativtagaren redo och data överförs. För klockorna 8 och 9 förblir båda sidor redo att överföra data, och data överförs med maximal möjlig hastighet (32 bitar per klockcykel).

Vid läsning är klocka 2 reserverad för att vända AD -bussen, så målet är inte tillåtet att köra data på bussen även om den kan snabba DEVSEL.

Snabb DEVSEL# vid läsningar

Ett mål som stöder snabb DEVSEL kan i teorin börja svara på en läscykel efter att adressen presenterats. Denna cykel är dock reserverad för AD -bussens vändning. Således kanske ett mål inte driver AD -bussen (och därmed inte kan hävda TRDY#) på den andra cykeln av en transaktion. Observera att de flesta målen inte kommer att vara så snabba och inte behöver någon speciell logik för att genomdriva detta villkor.

Avsluta transaktioner

Vardera sidan kan begära att en burst slutar efter den aktuella datafasen. Enkla PCI-enheter som inte stöder multi-word bursts kommer alltid att begära detta omedelbart. Även enheter som stöder skurar kommer att ha en viss gräns för den maximala längden de kan stödja, till exempel slutet på deras adresserbara minne.

Initiativtagarens burst -avslutning

Initiativtagaren kan markera vilken datafas som den sista i en transaktion genom att avkräva FRAME# samtidigt som den hävdar IRDY#. Cykeln efter att målet gör gällande TRDY#, den slutliga dataöverföringen är klar, båda sidor återställer sina respektive RDY# -signaler och bussen är inaktiv igen. Befälhavaren får inte återupprätta FRAME# innan han hävdar IRDY#, inte heller kan den fastställa FRAME# medan han väntar, med IRDY# hävdad, för att målet ska hävda TRDY#.

Det enda mindre undantaget är en huvudavbrott , när inget mål svarar med DEVSEL#. Uppenbarligen är det meningslöst att vänta på TRDY# i ett sådant fall. Men även i detta fall måste befälhavaren hävda IRDY# i minst en cykel efter att ha fastställt FRAME#. (Vanligtvis kommer en master att hävda IRDY# innan han tar emot DEVSEL#, så den måste helt enkelt hålla IRDY# hävdad i en cykel längre.) Detta för att säkerställa att bussens turnaround -regler följs på FRAME# -linjen.

Target burst -avslutning

Målet begär att initiativtagaren avslutar en skur genom att hävda STOP#. Initiativtagaren kommer sedan att avsluta transaktionen genom att bekräfta FRAME# vid nästa juridiska tillfälle; Om den vill överföra mer data fortsätter den i en separat transaktion. Det finns flera sätt för målet att göra detta:

Koppla bort med data
Om målet hävdar STOP# och TRDY# samtidigt, indikerar detta att målet önskar att detta ska vara den sista datafasen. Till exempel kommer ett mål som inte stöder burst-överföringar alltid att göra detta för att tvinga PCI-transaktioner med ett ord. Detta är det mest effektiva sättet för ett mål att avsluta en burst.
Koppla från utan data
Om målet hävdar STOP# utan att hävda TRDY#, indikerar detta att målet vill stoppa utan att överföra data. STOP# anses motsvara TRDY# för att avsluta en datafas, men ingen data överförs.
Försök igen
A Koppla bort data utan att överföra data är ett försök , och till skillnad från andra PCI -transaktioner måste PCI -initiativtagare pausa något innan de fortsätter operationen. Se PCI -specifikationen för mer information.
Målavbrott
Normalt hävdar ett mål DEVSEL# under den senaste datafasen. Men om ett mål bekräftar DEVSEL# innan det kopplas bort utan data (hävdar STOP#), indikerar detta en målavbrott , vilket är ett dödligt feltillstånd. Initieraren kanske inte försöker igen och behandlar det vanligtvis som ett bussfel . Observera att ett mål kanske inte avgör DEVSEL# medan du väntar med TRDY# eller STOP# low; den måste göra detta i början av en datafas.

Det kommer alltid att finnas minst en cykel till efter en målinitierad frånkoppling, så att mastern kan återupprätta FRAME#. Det finns två delfall som tar lika lång tid, men en kräver en ytterligare datafas:

Koppla bort-A
Om initiativtagaren observerar STOP# innan han hävdar sitt eget IRDY#, kan den avsluta skuret genom att avaktivera FRAME# samtidigt som det hävdar IRDY# och avsluta skuret efter den aktuella datafasen.
Koppla bort-B
Om initiativtagaren redan har hävdat IRDY#(utan att fastställa FRAME#) när den observerar målets STOPP#, förbinder den sig till en ytterligare datafas. Målet måste vänta i ytterligare en datafas och hålla STOP# påstått utan TRDY# innan transaktionen kan avslutas.

Om initiativtagaren avslutar skuret samtidigt som målet begär koppling, finns det ingen ytterligare busscykel.

Burst -adressering

För åtkomst till minnesutrymme kan orden i en serie komma åt i flera ordningar. De onödiga lågordnade adressbitarna AD [1: 0] används för att överföra initiativtagarens begärda order. Ett mål som inte stöder en viss ordning måste avsluta skuret efter det första ordet. Några av dessa beställningar beror på storleken på cachelinjen, som kan konfigureras på alla PCI -enheter.

PCI burst -beställning
A [1] A [0] Rekommenderad serie (med 16-bytes cachelinje)
0 0 Linjär inkrementering (0x0C, 0x10, 0x14, 0x18, 0x1C, ...)
0 1 Cacheline växlar (0x0C, 0x08, 0x04, 0x00, 0x1C, 0x18, ...)
1 0 Cacheline wrap (0x0C, 0x00, 0x04, 0x08, 0x1C, 0x10, ...)
1 1 Reserverad (koppla bort efter första överföringen)

Om startförskjutningen inom cachelinjen är noll reduceras alla dessa lägen till samma ordning.

Cache line växling och cache line wrap-lägen är två former av kritisk-ord-första cache-radhämtning. Växlingsläge XOR anger den angivna adressen med en inkrementräknare. Detta är den ursprungliga ordern för Intel 486- och Pentium -processorer. Det har fördelen att det inte är nödvändigt att veta storleken på cachelinjen för att implementera den.

PCI version 2.1 föråldrat växlingsläge och lade till cachelinjeomslagsläget, där hämtningen fortsätter linjärt och sveper runt i slutet av varje cachelinje. När en cachelinje är helt hämtad hoppar hämtningen till startförskjutningen i nästa cachelinje.

Observera att de flesta PCI -enheter endast stöder ett begränsat antal typiska cachelinjer. om cachelinjestorleken är programmerad till ett oväntat värde, tvingar de till ett ord.

PCI stöder också burst -åtkomst till I/O och konfigurationsutrymme, men endast linjärt läge stöds. (Detta används sällan och kan vara buggigt i vissa enheter. De stöder inte det, men tvingar inte ordentligt åtkomst heller.)

Transaktionsexempel

Detta är den högsta möjliga hastigheten med fyra ord skrivs burst, avslutad av befälhavaren:

             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

På klockkanten 1 startar initiatören en transaktion genom att köra en adress, ett kommando och hävda FRAME# De andra signalerna är inaktiv (indikeras med ^^^), dras högt av moderkortets uppdragningsmotstånd. Det kan vara deras vändcykel. På cykel 2 hävdar målet både DEVSEL# och TRDY#. Eftersom initiatören också är redo sker en dataöverföring. Detta upprepas i ytterligare tre cykler, men före den sista (klockans kant 5) bekräftar befälhavaren FRAME#, vilket indikerar att detta är slutet. På klockans kant 6 är AD -bussen och FRAME# odriven (vändningscykel) och de andra styrledningarna körs högt under 1 cykel. På klockkant 7 kan en annan initiativtagare starta en annan transaktion. Detta är också vändningscykeln för de andra styrledningarna.

Motsvarande läseskur tar ytterligare en cykel, eftersom målet måste vänta 1 cykel för att AD -bussen ska vända innan den kan hävda TRDY#:

             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

En höghastighetsutbrott som avslutas av målet kommer att ha en extra cykel i slutet:

             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

På klockans kant 6 indikerar målet att det vill stoppa (med data), men initiativtagaren håller redan IRDY# låg, så det finns en femte datafas (klockkant 7), under vilken ingen data överförs.

Paritet

PCI -bussen detekterar paritetsfel, men försöker inte korrigera dem genom att försöka igen. det är rent av en felindikering. På grund av detta finns det inget behov av att upptäcka paritetsfelet innan det har hänt, och PCI -bussen upptäcker det faktiskt några cykler senare. Under en datafas beräknar vilken enhet som driver AD [31: 0] -linjerna jämn paritet över dem och C/BE [3: 0]# -linjerna och skickar ut den från PAR -linjen en cykel senare. Alla åtkomstregler och vändcykler för AD -bussen gäller PAR -linjen, bara en cykel senare. Enheten som lyssnar på AD -bussen kontrollerar den mottagna pariteten och hävdar linjen PERR# (paritetsfel) en cykel efter det. Detta genererar generellt ett processoravbrott, och processorn kan söka efter PCI -bussen efter enheten som upptäckte felet.

Raden PERR# används endast under datafaser när ett mål har valts. Om ett paritetsfel detekteras under en adressfas (eller datafasen för en specialcykel), gör de enheter som observerar det hävdande SERR# (systemfel) -raden.

Även om vissa byte maskeras av C/BE# -linjerna och inte används, måste de fortfarande ha ett visst definierat värde, och detta värde måste användas för att beräkna pariteten.

Snabba back-to-back-transaktioner

På grund av behovet av en vändcykel mellan olika enheter som driver PCI -bussignaler är det i allmänhet nödvändigt att ha en inaktiv cykel mellan PCI -busstransaktioner. Under vissa omständigheter är det emellertid tillåtet att hoppa över denna vilolägescykel, som går direkt från den sista cykeln för en överföring (IRDY# hävdad, FRAME# återhävd) till den första cykeln i nästa (FRAME# hävdad, IRDY# fastställd).

En initiativtagare får endast utföra back-to-back-transaktioner när:

  • de är av samma initiativtagare (eller det skulle inte finnas tid att vända C/BE# och FRAME# raderna),
  • den första transaktionen var en skrivning (så det är inte nödvändigt att vända på AD -bussen) och
  • initiativtagaren har fortfarande tillstånd (från dess GNT# -ingång) att använda PCI -bussen.

Ytterligare tidsbegränsningar kan komma från behovet av att vända är målstyrlinjerna, särskilt DEVSEL#. Målet bekräftar DEVSEL#och driver det högt i cykeln efter den sista datafasen, som vid back-to-back-transaktioner är den första cykeln i adressfasen. Den andra cykeln i adressfasen är sedan reserverad för DEVSEL# -omvändning, så om målet är annorlunda än den föregående får det inte hävda DEVSEL# förrän i den tredje cykeln (medelhög DEVSEL -hastighet).

Ett fall där detta problem inte kan uppstå är om initiatören på något sätt vet (förmodligen eftersom adresserna delar tillräckligt med högordensbitar) att den andra överföringen är adresserad till samma mål som den tidigare. I så fall kan den utföra back-to-back-transaktioner. Alla PCI -mål måste stödja detta.

Det är också möjligt för målet att hålla reda på kraven. Om det aldrig går snabbt DEVSEL, möts de trivialt. Om det gör det måste det vänta tills medelhög DEVSEL -tid om inte:

  • den aktuella transaktionen föregicks av en inaktiv cykel (är inte back-to-back), eller
  • den tidigare transaktionen var till samma mål, eller
  • den nuvarande transaktionen började med en dubbel adresscykel.

Mål som har denna förmåga indikerar det med en speciell bit i ett PCI-konfigurationsregister, och om alla mål på en buss har det kan alla initiativtagare använda back-to-back-överföringar fritt.

En subtraktiv avkodande bussbro måste veta för att förvänta sig denna extra fördröjning vid back-to-back-cykler för att annonsera back-to-back-stöd.

64-bitars PCI

Från och med version 2.1 innehåller PCI-specifikationen tillval av 64-bitars support. Detta tillhandahålls via en utökad kontakt som tillhandahåller 64-bitars bussförlängningar AD [63:32], C/BE [7: 4]#och PAR64, och ett antal ytterligare ström- och jordstift. 64-bitars PCI-kontakten kan särskiljas från en 32-bitars kontakt med det ytterligare 64-bitarsegmentet.

Minnestransaktioner mellan 64-bitars enheter kan använda alla 64 bitar för att fördubbla dataöverföringshastigheten. Transaktioner utan minne (inklusive konfiguration och åtkomst till I/O-utrymme) får inte använda 64-bitars tillägg. Under en 64-bitars burst fungerar burst-adressering precis som vid en 32-bitars överföring, men adressen ökas två gånger per datafas. Startadressen måste vara 64-bitars justerad. dvs AD2 måste vara 0. Data som motsvarar de mellanliggande adresserna (med AD2 = 1) transporteras på den övre halvan av AD -bussen.

För att initiera en 64-bitars transaktion driver initiatören startadressen på AD-bussen och hävdar REQ64# samtidigt som FRAME#. Om det valda målet kan stödja en 64-bitars överföring för denna transaktion, svarar det genom att hävda ACK64# samtidigt som DEVSEL#. Observera att ett mål kan besluta per transaktion om en 64-bitars överföring ska tillåtas.

Om REQ64# hävdas under adressfasen driver initiatorn också adressens höga 32 bitar och en kopia av busskommandot på bussens höga hälft. Om adressen kräver 64 bitar krävs fortfarande en dubbel adresscykel, men den höga halvan av bussen bär den övre halvan av adressen och den slutliga kommandokoden under båda adressfascyklerna; detta gör att ett 64-bitars mål kan se hela adressen och börja svara tidigare.

Om initiativtagaren ser DEVSEL# påstått utan ACK64#, utför den 32-bitars datafaser. Data som skulle ha överförts på den övre halvan av bussen under den första datafasen överförs istället under den andra datafasen. Vanligtvis driver initiatören alla 64 bitar data innan de ser DEVSEL#. Om ACK64# saknas kan det sluta köra den övre halvan av databussen.

REQ64# och ACK64# raderna hålls hävdade för hela transaktionen, spara den sista datafasen, och återupprättas samtidigt som FRAME# respektive DEVSEL#.

PAR64 -linjen fungerar precis som PAR -linjen, men ger jämn paritet över AD [63:32] och C/BE [7: 4]#. Det är endast giltigt för adressfaser om REQ64# har hävdats. PAR64 är endast giltigt för datafaser om både REQ64# och ACK64# hävdas.

Snabbning av cacheminnet (föråldrad)

PCI ursprungligen ingår valfri stöd för write-back cache koherens . Detta krävde stöd av cachable minnesmål, som skulle lyssna på två stift från cachen på bussen, SDONE (snoop done) och SBO# (snoop backoff).

Eftersom detta sällan genomfördes i praktiken raderades det från version 2.2 av PCI-specifikationen och stiften återanvändes för SMBus- åtkomst i version 2.3.

Cacheminnet skulle titta på alla minnesåtkomst utan att hävda DEVSEL#. Om det märkte en åtkomst som kan cachas, skulle det driva SDONE lågt (snoop inte gjort). Ett koherensstödjande mål skulle undvika att slutföra en datafas (hävdar TRDY#) tills den observerade SDONE hög.

I fallet med en skrivning till data som var ren i cacheminnet, skulle cachen bara behöva ogiltigförklara dess kopia, och skulle hävda SDONE så snart detta hade fastställts. Men om cachen innehåller smutsiga data måste cacheminnet skriva tillbaka den innan åtkomsten kunde fortsätta. så det skulle hävda SBO# när man höjer SDONE. Detta skulle signalera det aktiva målet att hävda STOP# snarare än TRDY#, vilket får initiativtagaren att koppla från och försöka igen senare. Under tiden skulle cachen arbitra för bussen och skriva tillbaka dess data till minnet.

Mål som stöder cachekoherens krävs också för att avsluta skurar innan de korsar cachelinjer.

Utvecklings verktyg

Ett PCI POST-kort som visar självtest (POST) vid start vid BIOS-start

Vid utveckling och/eller felsökning av PCI -bussen kan undersökning av hårdvarusignaler vara mycket viktig. Logiska analysatorer och bussanalysatorer är verktyg som samlar in, analyserar och avkodar signaler för användare att se på användbara sätt.

Se även

Referenser

Vidare läsning

Officiella tekniska specifikationer
Böcker
  • Abbott, Doug (2004). PCI Bus Demystified (andra upplagan). ISBN 978-0-7506-7739-4.
    250 sidor.
  • Shanley, Tom (1999). PCI System Architecture (4: e upplagan). ISBN 978-0-201-30974-4.
    832 sidor.
  • Shanley, Tom (2000). PCI-X System Architecture (1: a upplagan). ISBN 978-0-201-72682-4.
    752 sidor.
  • Solari, Ed (2001). PCI & PCI-X Hardware and Software Architecture & Design (5: e upplagan). ISBN 978-0-929392-63-9.
    1140 sidor.
  • Goodrum, Alan (1998). PCI HotPlug -applikation och design (1: a upplagan). ISBN 978-0-929392-60-8.
    162 sidor.

Officiell
Tekniska detaljer
Listor över leverantörer, enheter, ID
Tips
Linux
Utvecklings verktyg
FPGA -kärnor