Кіріспе
Періферлік компоненттік интерфейсі (PCI) – компьютердегі аппараттық құрылғыларды қосуға арналған жергілікті компьютерлік шина және PCI жергілікті шина стандартының бөлігі. PCI шинасы процессор шинасында кездесетін функцияларды қолдайды, бірақ кез келген процессордың туасты шинасынан тәуелсіз, стандартталған форматта. PCI шинасына қосылған құрылғылар шина шеберіне тікелей өз шинасына қосылғандай көрінеді және процессордың адрестік кеңістігінде мекенжайлар тағайындалады. Бұл бір шина сағатына синхронды параллель шина. Қосылған құрылғылар негізгі платаға орнатылған интегралдық схема түрінде (PCI спецификациясында жазықты құрылғы деп аталады) немесе ұяға салынатын кеңейту картасы түрінде болуы мүмкін. PCI жергілікті шинасы алғаш рет IBM PC-ге үйлесімді компьютерлерде іске асырылды, онда ол бірнеше баяу Industry Standard Architecture (ISA) ұяларының және бір жылдам VESA Local Bus (VLB) ұясының комбинациясын автобустық конфигурация ретінде ығыстырды. Кейіннен ол басқа компьютер түрлері үшін де қабылданды. PC-де қолданылатын типтік PCI карталарына мыналар жатады: желілік карталар, дыбыс карталары, модемдер, Universal Serial Bus (USB) немесе тізбекті порттар сияқты қосымша порттар, теледидар тюнерлік карталары және қатты дискінің хост-адаптерлері. PCI бейнекарталары ISA және VLB карталарын ауыстырды, дейін PCI-дің өткізу қабілетінің қажеттіліктері артты. Видеокарталар үшін басым интерфейс PCI-дің суперсеті – үдетілген графикалық порт (AGP) болды, кейіннен PCI Express-ке жол берді. PCI-дің бөлшек компьютерлерде табылған алғашқы нұсқасы 32 биттік шина болып, 33 МГц шина сағаты мен 5 В сигналдауын қолданды, бірақ PCI 1.0 стандарты 64 биттік нұсқаны да қарастырды. Бұл карталарда бір орналасу тірегі бар. PCI стандартының 2.0 нұсқасы 5 В карталарды кездейсоқ қосуды болдырмау үшін физикалық түрде өзгешеленетін 3.3 В ұяларын енгізді. Кез келген кернеуде жұмыс істей алатын универсалды карталарда екі тірек бар. PCI стандартының 2.1 нұсқасы 66 МГц жиілігінде жұмыс істеу мүмкіндігін енгізді. PCI Extended (PCI X) – серверге бағытталған PCI нұсқасы, PCI X 1.0 үшін 133 МГц-ке дейін және PCI X 2.0 үшін 533 МГц-ке дейін жиіліктерде жұмыс істеді. Ноутбук карталары үшін ішкі жалғауыш Mini PCI деп аталады, ол PCI спецификациясының 2.2 нұсқасында енгізілді. PCI шинасы сонымен қатар сыртқы ноутбук жалғауыш стандарты CardBus үшін де қабылданды. Бірінші PCI спецификациясын Intel әзірледі, бірақ стандартты одан әрі дамыту PCI Special Interest Group (PCI SIG) жауапкершілігіне көшті. PCI және PCI X кейде параллель PCI немесе дәстүрлі PCI деп аталады, оларды технологиялық тұрғыдан жаңадан пайда болған PCI Express-тен ажырату үшін, ол сериялық, жолақты архитектураны қабылдады. PCI-дің үстелдік компьютерлер нарығындағы өркендеу кезеңі шамамен 1995-2005 жылдар аралығында болды. PCI және PCI X көптеген мақсаттар үшін қолданыстан шығып, 2013 жылдан бастап көптеген заманауи негізгі платалардан жоғалып кетті; алайда олар әлі де кейбір заманауи жұмыс станцияларында 2020 жылға дейін артқа қарай үйлесімділік және салыстырмалы түрде төмен өндіріс құны үшін қолданылады. Параллель PCI-дің тағы бір кең таралған заманауи қолданылуы – өнеркәсіптік компьютерлерде, онда қолданылатын көптеген мамандандырылған кеңейту карталары, ISA карталары сияқты, PCI Express-ке көшкен жоқ. Көптеген құрылғылар, бұрын PCI кеңейту карталарында қол жетімді болған, қазір негізгі платаларға енгізілген немесе USB және PCI Express нұсқаларында қол жетімді.
Peripheral Component Interconnect (PCI) is a local computer bus for attaching hardware devices in a computer and is part of the PCI Local Bus standard. The PCI bus supports the functions found on a processor bus but in a standardized format that is independent of any given processor's native bus. Devices connected to the PCI bus appear to a bus master to be connected directly to its own bus and are assigned addresses in the processor's address space. It is a parallel bus, synchronous to a single bus clock. Attached devices can take either the form of an integrated circuit fitted onto the motherboard (called a planar device in the PCI specification) or an expansion card that fits into a slot. The PCI Local Bus was first implemented in IBM PC compatibles, where it displaced the combination of several slow Industry Standard Architecture (ISA) slots and one fast VESA Local Bus (VLB) slot as the bus configuration. It has subsequently been adopted for other computer types. Typical PCI cards used in PCs include: network cards, sound cards, modems, extra ports such as Universal Serial Bus (USB) or serial, TV tuner cards and hard disk drive host adapters. PCI video cards replaced ISA and VLB cards until rising bandwidth needs outgrew the abilities of PCI. The preferred interface for video cards then became Accelerated Graphics Port (AGP), a superset of PCI, before giving way to PCI Express. The first version of PCI found in retail desktop computers was a 32 bit bus using a 33 MHz bus clock and 5 V signaling, although the PCI 1.0 standard provided for a 64 bit variant as well. These have one locating notch in the card. Version 2.0 of the PCI standard introduced 3.3 V slots, physically distinguished by a flipped physical connector to prevent accidental insertion of 5 V cards. Universal cards, which can operate on either voltage, have two notches. Version 2.1 of the PCI standard introduced optional 66 MHz operation. A server oriented variant of PCI, PCI Extended (PCI X) operated at frequencies up to 133 MHz for PCI X 1.0 and up to 533 MHz for PCI X 2.0. An internal connector for laptop cards, called Mini PCI, was introduced in version 2.2 of the PCI specification. The PCI bus was also adopted for an external laptop connector standard the CardBus. The first PCI specification was developed by Intel, but subsequent development of the standard became the responsibility of the PCI Special Interest Group (PCI SIG). PCI and PCI X sometimes are referred to as either Parallel PCI or Conventional PCI to distinguish them technologically from their more recent successor PCI Express, which adopted a serial, lane based architecture. PCI's heyday in the desktop computer market was approximately 1995 to 2005. PCI and PCI X have become obsolete for most purposes and has largely disappeared from many other modern motherboards since 2013; however they are still common on some modern desktops as of 2020 for the purposes of backward compatibility and the relative low cost to produce. Another common modern application of parallel PCI is in industrial PCs, where many specialized expansion cards, used here, never transitioned to PCI Express, just as with some ISA cards. Many kinds of devices formerly available on PCI expansion cards are now commonly integrated onto motherboards or available in USB and PCI Express versions.
Тоқтатулар
Құрылғылар үзіліс сұранысы (IRQ) желілерін ортақтастыру үшін белгілі бір хаттаманы сақтау қажет. PCI шинасы INTA# арқылы INTD# дейін төрт үзіліс желісін қамтиды, олардың барлығы әр құрылғыға қолжетімді. APIC қосылған x86 жүйелерінде сегіз PCI құрылғысы бірдей IRQ желісін (LNKA арқылы LNKH) пайдаланады. Үзіліс желілері басқа PCI шина желілері сияқты параллель түрде қосылмайды. Үзіліс желілерінің орналасуы слоттар арасында ауысады, сондықтан бір құрылғыға INTA# желісі ретінде көрінетін нәрсе келесі құрылғыға INTB#, ал одан кейінгіге INTC# болып көрінеді. Әдетте, бір функциялық құрылғылар өздерінің INTA# желісін үзіліс сигналы үшін пайдаланады, осылайша құрылғы жүктемесі қолжетімді төрт үзіліс желісіне тең бөлінеді. Бұл үзілістерді ортақтастырумен байланысты жиі кездесетін мәселені азайтады. PCI үзіліс желілерін жүйелік үзіліс желілерімен PCI хост көпірі арқылы байланыстыру, жүзеге асыруға байланысты болады. Платформаға тән микробағдарлама немесе операциялық жүйе коды мұны білуге тиіс және әр құрылғының конфигурациялық кеңістігіндегі "үзіліс желісі" өрісін орнатып, ол қандай IRQ-мен байланысқан екенін көрсетеді. PCI үзіліс желілері деңгейлік түрде іске қосылады. Бұл ортақ үзіліс желісіне қызмет көрсету кезінде артықшылық алу және сенімділік үшін таңдалды, себебі шеттік үзілістерді жіберіп алу оңай. PCI спецификациясының кейінгі нұсқалары хабарлама арқылы берілетін үзілістерді қолдайды. Бұл жүйеде құрылғы арнайы желіні пайдаланудың орнына жадқа жазу арқылы қызмет көрсету қажеттілігін хабарлайды. Бұл үзіліс желілерінің жетіспеушілігі мәселесін азайтады. Үзіліс векторлары ортақ болса да, ол деңгейлік үзілістердің бөлісу проблемаларына ұшырамайды. Сонымен қатар, бұл маршрутизация мәселесін де шешеді, себебі жадқа жасалған жазу құрылғы мен хост арасында күтпеген өзгерістерге ұшырамайды. Соңында, хабарлама сигнализациясы жолақта болғандықтан, жарияланған жазулармен және жолақтан тыс үзіліс желілерімен байланысты синхронизация мәселелерін де шешеді. PCI Express-те физикалық үзіліс желілері мүлдем жоқ. Ол тек хабарлама арқылы берілетін үзілістерді пайдаланады.
Картаның кернеуі және кілті
Типтік PCI карталарында сигнал беру кернеуіне қарай бір немесе екі тілік (кілт) болады. 3,3 вольтты қажет ететін карталардың артқы панелінен 56,21 мм қашықтықта тілік орналасқан, ал 5 вольтты қажет ететіндердің артқы панелінен 104,41 мм қашықтықта болады. Бұл карталарды олар қолдайтын кернеуге сай келетін слоттарға ғана орнатуға мүмкіндік береді. Екі кернеуді де қабылдайтын "әмбебап карталар" екі тілікке ие.
32 және 64 биттік PCI карталарын әртүрлі ені бар слоттарда араластыру
Көптеген 32 биттік PCI карталары 64 биттік PCI X слоттарында қалыпты жұмыс істейді, бірақ шина сағатының жылдамдығы ең баяу картаның сағаттық жиілігімен шектеледі, бұл PCI-дың ортақ шина топологиясының ішкі шектеуі. Мысалы, PCI 2.3, 66 МГц перифериялық құрылғысы 133 МГц мүмкіндігі бар PCI X шинасына орнатылса, шинаның барлық артқы бөлігі 66 МГц-ке дейін шектеледі. Бұл шектеуден қашу үшін көптеген аналық платаларда екі немесе одан көп PCI/PCI X шиналары бар, олардың бірі жоғары жылдамдықты PCI X перифериялық құрылғыларымен, ал екіншісі жалпы мақсаттағы перифериялық құрылғыларымен пайдалануға арналған. Көптеген 64 биттік PCI X карталары қысқа 32 биттік жалғауыштарға орнатылғанда, өнімділіктің азаюымен 32 биттік режимде жұмыс істеуге арналған. Мысалы, Adaptec 29160 64 биттік SCSI интерфейс картасын қарастыруға болады. Дегенмен, кейбір 64 биттік PCI X карталары стандартты 32 биттік PCI слоттарында жұмыс істемейді. 64 биттік PCI X картасын 32 биттік слотқа орнату картаның жиек жалғауышының 64 биттік бөлігін қосылмаған және ілгері созылған күйде қалдырады. Бұл үшін аналық платаның компоненттері картаның жиек жалғауышының ілгері созылған бөлігін механикалық түрде кедергілемеуі керек.
Installing a 64 bit PCI X card in a 32 bit slot will leave the 64 bit portion of the card edge connector not connected and overhanging. This requires that there be no motherboard components positioned so as to mechanically obstruct the overhanging portion of the card edge connector.
Шағын ПТИ
Mini PCI ноутбуктер мен кейбір маршрутизаторларда қолдану үшін PCI нұсқасы 2.2-ге қосылды; ол 32 биттік, 33 МГц шинаны қуатты қосылымдармен (тек 3.3 В; 5 В 100 мА-ға дейін шектелген) және шина басқаруы мен DMA қолдауымен пайдаланады. Mini PCI карталарының стандартты мөлшері, толық өлшемді әріптестерінің шамамен төрттен бір бөлігін құрайды. Коннекторлары бар жақшалары бар десктоптық PCI карталарынан айырмашылығы, картаға корпус сыртынан қол жеткізу мүмкін емес. Бұл Mini PCI картасының орындай алатын функцияларын шектейді. Wi-Fi, Fast Ethernet, Bluetooth, модемдер (көбінесе Winmodem), дыбыс карталары, криптографиялық үдеткіштер, SCSI, IDE-ATA, SATA контроллерлері және комбиналды карталар сияқты көптеген Mini PCI құрылғылары жасалды. Mini PCI карталарын Mini PCI-ден PCI-ге түрлендіргіштерді пайдалана отырып, стандартты PCI жабдықтарымен де қолдануға болады. Mini PCI-нің орнына әлдеқайда тар PCI Express Mini Card келді.
Mini PCI-нің техникалық мәліметтері
Mini PCI карталарының максималды қуат тұтынуы 2 Вт құрайды, бұл осы формат факторында іске асырылатын мүмкіндіктерді шектейді. Олар сонымен қатар қуатты басқару мақсатында PCI сағатын қосу және тоқтату үшін қолданылатын CLKRUN# PCI сигналын қолдауға міндетті. Картаның үш түрі бар: I, II және III типті карталар. Әр тип үшін қолданылатын картаның қосылымы: I және II типтері 100 контактілі жиектелген қосылымды пайдаланады, ал III тип 124 контактілі жиек қосылымын пайдаланады, яғни I және II типтеріндегі қосылым III типтегісінен өзгеше, онда қосылым SO DIMM сияқты картаның жиегінде орналасқан. Қосымша 24 контакт жүйелік қосылым арқылы (аудио, AC Link, LAN, телефондық желі интерфейсі) I/O-ны қайта бағыттау үшін қажетті қосымша сигналдарды қамтамасыз етеді. II типті карталарда RJ11 және RJ45 ұңғыштары орнатылған. Бұл карталар компьютердің немесе док станциясының жиегінде орналасуы керек, осылайша RJ11 және RJ45 порттары сыртқы қолжетімділік үшін орнатылуы мүмкін. ТипіКартаның хост жүйесінің сыртқы жиегіҚосылымыӨлшемі (мм × мм × мм)ЕскертулерIAЖоқ100 контактілі жиектелу7.5 × 70 × 45Үлкен Z өлшемі (7.5 мм)IB5.5 × 70 × 45Кіші Z өлшемі (5.5 мм)IIAИә17.44 × 70 × 45Үлкен Z өлшемі (17.44 мм)IIB5.5 × 78 × 45Кіші Z өлшемі (5.5 мм)IIIAЖоқ124 контактілі жиек2.4 × 59.6 × 50.95Үлкен Y өлшемі (50.95 мм)IIIB2.4 × 59.6 × 44.6Кіші Y өлшемі (44.6 мм)
Mini PCI, 144 контактілі Micro PCI-ден ерекшеленеді.
PCI шиналық операциялар
PCI автобус трафигі PCI автобус операцияларының сериясынан тұрады. Әрбір операция адрестік фазадан басталады, одан кейін бір немесе бірнеше дерек фазалары келеді. Дерек фазаларының бағыты бастаушыдан нысанаға (жазу операциясы) немесе керісінше (оқу операциясы) болуы мүмкін, бірақ барлық дерек фазалары бір бағытта болуы тиіс. Кез келген тарап кез келген уақытта дерек фазаларын тоқтата немесе күдіреттеуі мүмкін. (Мысалы, жарылыс операцияларын қолдамайтын және әрқашан бірінші дерек фазасынан кейін операцияны тоқтататын төмен өнімділіктегі PCI құрылғысы.) Кез келген PCI құрылғысы операцияны бастауы мүмкін. Біріншіден, ол аналық платадағы PCI автобус төрешісінен рұқсат алуы керек. Төреші өтініш білдірген құрылғылардың біріне рұқсат береді. Бастаушы 32 биттік адресті және 4 биттік командалық кодты тарату арқылы адрестік фазаны бастайды, содан кейін нысананың жауабын күтеді. Басқа құрылғылар осы адресті тексеріп, бірнеше циклдан кейін олардың бірі жауап береді. 64 биттік адрестеу екі кезеңді адрестік фаза арқылы жүзеге асырылады. Бастаушы арнайы «қос адрес циклы» командалық кодымен бірге 32 биттік төменгі адресті таратады. 64 биттік адрестеуді қолдамайтын құрылғылар бұл командалық кодқа жауап бермейді. Келесі циклда бастаушы 32 биттік жоғарғы адресті және нақты командалық кодты жібереді. Осы уақыттан бастап операция бірдей жүзеге асырылады. 32 биттік PCI құрылғыларымен үйлесімділікті қамтамасыз ету үшін, қажет болмаса, яғни жоғарғы ретті адрестің биттерінің барлығы нөл болса, қос адрес циклын пайдалануға тыйым салынады. PCI шинасы дерек фазасында 32 битті жібергенде, бастаушы 4 белсенді төмен байтты қосу сигналын жібереді, осы арқылы қай 8 биттік байттар маңызды екенін көрсетеді. Атап айтқанда, жазу нысаналық PCI құрылғысындағы қосылған байттарға ғана әсер етуі керек. Олар жадтан оқу үшін маңызды емес, бірақ I/O оқулары жанама әсерлерге ие болуы мүмкін. PCI стандарты байттар қосылмаған дерек фазасын рұқсат етеді, ол ешқандай операция жасамауы тиіс.
PCI мекенжай кеңістіктері
PCI-де үш адрес кеңістігі бар: жад, I/O адресі және конфигурация. Жад адрестері 32 биттік (немесе 64 биттік) болып келеді, кэштеуді қолдайды және бірнеше транзакцияларды жүзеге асыруға мүмкіндік береді. I/O адрестері Intel x86 архитектурасының I/O порттар кеңістігімен үйлесімділік үшін пайдаланылады. PCI шинасының спецификациясы кез келген адрес кеңістігінде бірнеше транзакцияларды қолдаса да, көптеген құрылғылар оны тек жад адрестері үшін ғана, ал I/O үшін емес қолдайды. Соңында, PCI конфигурациялық кеңістігі әрбір PCI құрылғысы үшін 256 байттық арнайы конфигурациялық тізілімдерге қол жеткізуді қамтамасыз етеді. Әрбір PCI слот өзінің конфигурациялық кеңістігінің адрес диапазонына ие. Тізілімдер құрылғылардың жад және I/O адрес диапазондырын конфигурациялау үшін қолданылады, олар транзакцияны бастаушылардан жауап алуы керек. Компьютер алғаш қосылғанда, барлық PCI құрылғылары тек өз конфигурациялық кеңістігіне ғана жауап береді. Компьютердің BIOS құрылғыларды іздеп, оларға жад және I/O адрес диапазондырын тағайындайды. Егер ешбір құрылғы адрес талап етпесе, транзакция бастаушының адрес фазасы уақыты бітіп, бастаушы операцияны тоқтатуға мәжбүр болады. Оқу кезінде, осы жағдайда оқылған дерек мәні ретінде барлық бірліктерді (0xFFFFFFFF) беру қалыпты жағдай. Сондықтан PCI құрылғылары маңызды статус тізілімдерінде барлық бірліктерді пайдаланудан көбінесе аулақ болады, осылайша мұндай қате бағдарламалық жасақтама арқылы оңай анықталады.
PCI шинасының кідіріс уақыты
PCI спецификациясы жарияланғаннан кейін көп ұзамай, кейбір құрылғылардың баяу растаулар, ұзақ деректер ағындары немесе олардың комбинациясы салдарынан ұзақ транзакциялар жасауы, басқа құрылғыларда буфердің толуына немесе асып кетуіне әкелуі мүмкін екендігі анықталды. 2.0 нұсқасындағы жеке кезеңдердің уақытына қатысты ұсыныстар 2.1 нұсқасында міндетті етілді: мақсатты құрылғы транзакция басталғаннан бастап 16 цикл ішінде бастапқы дерек кезеңін (TRDY# және/немесе STOP# белгілеу) аяқтауы керек. Бастамашы әрбір дерек кезеңін (IRDY# белгілеу) 8 цикл ішінде аяқтауы керек. Сонымен қатар, 2.1 нұсқасынан бастап, екі дерек фазасынан артық дерек ағынын жүзеге асыра алатын барлық бастамашылар бағдарламаланатын кешігу таймерін қолдануға міндетті. Таймер транзакция басталғанда (бастамашы FRAME# белгілейді) сағаттық циклдарды санауды бастайды. Егер таймердің мерзімі бітіп, төреші GNT#-ны жойса, бастамашы келесі мүмкіндікте транзакцияны тоқтатуы керек. Әдетте бұл келесі дерек фазасы болады, бірақ жадқа жазу және жарамсыз ету транзакциялары кэш жолының соңына дейін аяқталуы тиіс.
A target must be able to complete the initial data phase (assert TRDY# and/or STOP#) within 16 cycles of the start of a transaction. An initiator must complete each data phase (assert IRDY#) within 8 cycles. Additionally, as of revision 2.1, all initiators capable of bursting more than two data phases must implement a programmable latency timer. The timer starts counting clock cycles when a transaction starts (initiator asserts FRAME#). If the timer has expired and the arbiter has removed GNT#, then the initiator must terminate the transaction at the next legal opportunity. This is usually the next data phase, but Memory Write and Invalidate transactions must continue to the end of the cache line.
Келесіде көрсетілген
Осы уақыт шектеулерін орындай алмайтын құрылғылар жадқа жазу үшін жарияланған жазуларды және басқа жазулар мен барлық оқулар үшін кешіктірілген транзакцияларды пайдалануы керек. Кешіктірілген транзакцияда, мақсат операцияны (жазу деректерін қоса алғанда) ішкі түрде тіркейді және бірінші дерек фазасын тоқтатады (TRDY# орнына STOP# белгісін қояды). Бастамашы дәл сол транзакцияны кейін қайтадан жіберуі тиіс. Осы уақыт аралығында мақсат ішкі түрде транзакцияны орындайды және қайта жіберілген транзакцияны күтеді. Қайта жіберілген транзакция анықталғанда, буферленген нәтиже жіберіледі. Құрылғы бір кешіктірілген транзакцияны аяқтағанда басқа транзакциялардың мақсаты бола алады; ол транзакция түрін, мекенжайын, байт таңдауларын және (жазу болған жағдайда) дерек мәнін есте сақтауы керек және тек дұрыс транзакцияны аяқтауы керек. Егер мақсат ішкі түрде тіркей алатын кешіктірілген транзакциялар санына шектеу болса (қарапайым мақсаттар 1 шегін қоюы мүмкін), ол оларды тіркемей қайта жіберуге мәжбүрлейді. Олар ағымдағы кешіктірілген транзакция аяқталғаннан кейін қарастырылады. Егер екі бастамашы бірдей транзакцияны орындауға тырысса, біреуі бастаған кешіктірілген транзакцияның нәтижесі екіншісіне жіберілуі мүмкін; бұл қауіпсіз. Мақсат кешіктірілген транзакциядан бас тартады, егер қайта жіберу буферленген нәтижені жеткізе алса, шина қайта орнатылса немесе 215=32768 сағаттық цикл (шамамен 1 мс) өткенде қайта жіберу көрінбесе. Соңғы жағдай қалыпты жұмыс кезінде болмауы керек, бірақ егер бір бастамашыны қайта орнату керек болса немесе ол бұзылса, бүкіл шинаның тұйықталуына жол бермейді.
PCI шиналық көпірлері
PCI стандарты бірнеше тәуелсіз PCI шиналарын шина көпірлері арқылы байланыстыруға мүмкіндік береді, олар қажет болған жағдайда бір шинадағы операцияларды екінші шинаға жібереді. PCI көбінесе көп шина көпірлерін қолданбаса да, PCI Express жүйелері PCI Express Root Port деп аталатын көптеген PCI-ден PCI көпірлерін пайдаланады; әрбір PCI Express ұясы жеке шина ретінде көрінеді және басқаларымен көпір арқылы байланыстырылады. PCI хост көпірі (әдетте x86 платформаларында солтүстік көпір – northbridge) процессор, негізгі жад және PCI шинасы арасындағы байланысты қамтамасыз етеді.
Жазылған жазбалар
Әдетте, автобус көпірі бір автобуста екіншісіне жіберілуі тиіс транзакцияны көргенде, бастапқы транзакция нәтиже дайын болғанға дейін жіберілген транзакция аяқталғанша күтуі керек. Жад жазулар (memory writes) жағдайында бір ерекшелік бар. Бұл жағдайда көпір жазу деректерін ішкі жадта сақтап (егер орын болса) және жіберілген жазу аяқталмас бұрын, тіпті басталмас бұрын-ақ жазу аяқталғанын хабарлай алады. Мұндай "жіберілген, бірақ әлі жетпеген" жазулар пошта арқылы жіберілген хатқа ұқсас, сондықтан "поштаға жіберілген жазулар" деп аталады. Олар өнімділікті арттыруға зор мүмкіндік берсе де, рұқсат етілген нәрсені анықтайтын ережелер біршама күрделі.
Бірлесу, бірігу және құлдырау
PCI стандарты белгілі бір жағдайларда бірнеше шина транзакцияларын бір үлкен транзакцияға түрлендіруге рұқсат етеді. Бұл PCI шинасының жұмыс тиімділігін жақсартуға мүмкіндік береді.
Бірлескен
Бірінен соң бірі жазылатын адрестерге жасалған жазу операцияларын, егер жазулардың бастапқы реті сақталса, ұзақ жазу импульсіне біріктіруге болады. Жазулар дерлік тікелей болған жағдайда, барлық байттық каналдар өшірілген қосымша дерек фазаларын қосуға рұқсат етіледі.
Бірігу
Бір сөздің әртүрлі бөліктеріне жасалған бірнеше жазу бірнеше байтты қосу арқылы бір жазуға біріктірілуі мүмкін. Мұндай жағдайда, автобус көпіріне белгілі бір ретпен жіберілген жазулар, алға жіберілген кезде бір уақытта орындалу үшін біріктіріледі.
Құлап кету
Бір байтқа немесе байттарға бірнеше жазу операциясын біріктіруге болмайды, мысалы, бірінші жазуды өткіріп, тек екінші жазуды орындау арқылы. Себебі PCI спецификациясы жазу операцияларының жанама әсерлеріне мүмкіндік береді.
PCI шина сигналдары
PCI шиналық операциялар бес негізгі басқару сигналымен реттеледі, олардың екеуі транзакцияны бастаушы құрылғымен (FRAME# және IRDY#) басқарылады, ал үшеуі – мақсатты құрылғымен (DEVSEL#, TRDY# және STOP#). Транзакцияны бастауға рұқсат алу үшін тағы екі төрелік сигналы (REQ# және GNT#) пайдаланылады. Барлығы белсенді төмен, яғни белсенді немесе күшіне енген күйдегі сигнал төмен вольтты болады. Аналық платадағы (негізгі платадағы) тартылған резисторлар, егер ешбір құрылғы сигналды өзгерте алмаса, олардың жоғары (белсенді емес) күйде қалуын қамтамасыз етеді, бірақ PCI шинасы сигнал деңгейін өзгерту үшін резисторларға тәуелді емес; барлық құрылғылар сигналды басқаруды тоқтату алдында бір циклға жоғары деңгейге көтереді.
Сигналдың уақыты
Барлық PCI шина сигналдары сағаттың өсу жиегінде (көтерілу жиегінде) сыналады. Сигналдар номиналды түрде сағаттың төмендеу жиегінде өзгереді, бұл әрбір PCI құрылғысына сағат циклының жартысын өсу жиегінде байқаған сигналдарға қалай жауап беру керектігін шешуге, ал жарты сағат циклын өз жауабын екінші құрылғыға жіберуге мүмкіндік береді. PCI шинасы, PCI шина сигналын басқаратын құрылғы өзгерген кезде, бір құрылғы сигналды басқаруын тоқтатқаннан бастап екінші құрылғы басқаруды бастағанға дейін бір айналым циклының өтуін талап етеді. Әйтпесе, екі құрылғы да сигналды бір уақытта басқарып, шина жұмысына кедергі келтіруі мүмкін. Осы айналым циклының талабы және басқару желісін басқаруын тоқтату алдында бір цикл бойы жоғары деңгейде ұстау қажеттілігі, иесі ауысқанда әрбір негізгі басқару желісінің кем дегенде екі цикл бойы жоғары деңгейде болуын қамтамасыз етеді. PCI шина протоколы осы талапты орындау үшін қосымша кешігуді енгізу қажет болатын сирек жағдайларға (әсіресе, өте жылдам тізбектелген транзакциялар) арналған, сондықтан бұл көбінесе шектеу тудырмайды.
Төрелік
PCI шинасындағы кез келген құрылғы шинаның бас операторы ретінде жұмыс істей алады. Бір уақытта тек бір транзакция басталуын қамтамасыз ету үшін, әрбір бас оператор алдымен аналық платада орналасқан төрешіден GNT# автобус беру сигналын күтуі керек. Әрбір құрылғыда автобусқа сұраныс жіберу үшін жеке REQ# желісі бар, бірақ төреші ағымдағы сұраныс болмаған жағдайда, кез келген құрылғыда автобус беру сигналын «ұстап» тұра алады. Төреші кез келген уақытта GNT# сигналын жоюға құқылы. GNT# сигналын жоғалтқан құрылғы ағымдағы транзакциясын аяқтауға болады, бірақ GNT# сигналы келесі циклда белсенді екенін байқамаса, жаңа транзакцияны (FRAME# сигналын жіберу арқылы) бастамауы керек. Төреші GNT# сигналын кез келген уақытта, тіпті басқа бас оператор транзакция жасап жатқан кезде де беруге болады. Транзакция кезінде FRAME# немесе IRDY# немесе екеуі де белсенді болуы мүмкін; егер екеуі де белсенді болмаса, шина бос болады. Құрылғы GNT# белсенді және шина бос болған кезде кез келген уақытта транзакцияны бастауға болады.
Адрестік кезең
PCI шинасының транзакциясы адрестік фазадан басталады. Инициатор (әдетте чипсет), GNT# белгісінің бар екенін және шина бос екенін көріп, мақсатты мекенжайды AD[31:0] желілеріне, байланысты команданы (мысалы, жадтан оқу немесе I/O-ға жазу) C/BE[3:0]# желілеріне жібереді және FRAME# белгісін төмен түсіреді. Басқа әрбір құрылғы мекенжай мен команданы қарап, DEVSEL# белгісін орнату арқылы нысана ретінде жауап беруге болатынын немесе жоқ екенін шешеді. Құрылғы 3 цикл ішінде DEVSEL# белгісімен жауап беруі керек. 1 немесе 2 цикл ішінде жауап беретін құрылғылар тиісінше «жылдам DEVSEL» немесе «орта DEVSEL» деп аталады. (Шындығында, жауап беру уақыты 2,5 циклды құрайды, себебі PCI құрылғылары барлық сигналдарды үш циклден кейін қабылдау үшін жарты циклға ертерек жіберуі керек.) Құрылғы адресті бірінші циклда бекітуі керек; инициатор келесі циклда адресті және команданы шинадан алып тастауы керек, тіпті DEVSEL# жауабын алудан бұрын. Қосымша уақыт тек адресті және команданы түсіргеннен кейін оларды түсіндіру үшін қолданылады. Адрестік фазаның бесінші циклында (немесе басқа құрылғылардың барлығы орташа DEVSEL немесе жылдам жауап беретін болса, одан ертерек) кейбір мекенжай диапазондары үшін «субтрактивті декодтау» рұқсат етіледі. Бұл көбінесе ISA шиналық көпірінің өзінің диапазонындағы мекенжайлар үшін қолданылады (жад үшін 24 бит және I/O үшін 16 бит). Алтыншы циклда, егер жауап келмесе, инициатор FRAME# белгісін жою арқылы транзакцияны тоқтатуға болады. Бұл «мастер тоқтату» деп аталады және мұндай жағдайда PCI шиналық көпірлер барлық бірліктерден тұратын деректерді (0xFFFFFFFF) қайтарады. Сондықтан PCI құрылғылары маңызды жағдай тізілімдерінде барлық бірліктердің мәнін пайдаланудан аулақ болу үшін жасалады, осылайша мұндай қателік бағдарламалық жасақтама арқылы оңай анықталады.
Конфигурациямен қатынау
PCI конфигурациялық кеңістігіне қатынау мекенжайлары ерекше кодтауды қолданады. Олардың ішінде, төменгі реттік адрес жолдары қажетті PCI конфигурациялық тіркегішінің ығысуын (офсетін) көрсетеді, ал жоғары реттік адрес жолдары назардан тыс қалады. Оның орнына, қосымша адрес сигналы, IDSEL кірісі, құрылғы DEVSEL#-ті белсенді ету үшін жоғары деңгейде болуы тиіс. Әрбір слот IDSEL пинін әртүрлі жоғары деңгейдегі адрес жолымен байланыстырады және жоғарғы адрес жолдарында "бір ыстық" (one-hot) кодтау арқылы таңдалады.
Тез DEVSEL# оқу
Жылдам DEVSEL қолдайтын нысана, теориялық тұрғыдан алғанда, мекенжай ұсынылғаннан кейінгі циклде оқу сұрауына жауап беруге бастауы мүмкін. Алайда, бұл цикл AD шинасының қайта бағытталуына (turnaround) арналған. Сондықтан, нысана транзакцияның екінші циклінде AD шинасын басқара алмайды (және де TRDY# сигналын белсенділендіре алмайды). Көптеген нысаналар мұндай жылдамдыққа ие болмайды және бұл шартты сақтау үшін ешқандай арнайы логика қажет болмайды.
Транзакцияларды аяқтау
Кез келген тарап ағымдағы деректер фазасынан кейін импульстік жіберуді тоқтатуды сұрауға құқылы. Көп сөзді импульстік жіберуді қолдамайтын қарапайым PCI құрылғылары оны әрқашан дереу сұрайды. Тіпті импульстік жіберуді қолдайтын құрылғылардың да қолдай алатын максималды ұзындығына шектеулер болуы мүмкін, мысалы, олардың адрестелетін жадының соңы сияқты.
Бастауыш жарылыс аяқталуы
Бастамашы кез келген дерек фазасын, IRDY# белгісін орнатқанда FRAME# белгісін жою арқылы, транзакциядағы соңғысы ретінде тағайындай алады. Мақсат TRDY# белгісін орнатқаннан кейінгі циклда соңғы деректерді беру аяқталады, екі тарап та тиісті RDY# сигналдарын жояды және шина қайтадан бос күйге енеді. Бастаушы IRDY# белгісін орнатпас бұрын FRAME# белгісін жоюға болмайды, сондай-ақ IRDY# белгісі орнатылған күйде, мақсат TRDY# белгісін орнатқанша FRAME# белгісін жоюға да болмайды. Бір ғана ерекше жағдай – бастаушының тоқтатуы, онда мақсат DEVSEL# арқылы жауап бермейді. Мұндай жағдайда TRDY#-ны күтудің қажеті жоқ. Дегенмен, тіпті осы жағдайда да бастаушы FRAME# белгісін жойғаннан кейін кем дегенде бір цикл бойы IRDY# белгісін орнатып тұруы керек. (Көбінесе бастаушы DEVSEL# белгісін алудан бұрын IRDY# белгісін орнатады, сондықтан ол IRDY# белгісін бір циклға ұзартуы керек.) Бұл FRAME# желісінде шинаның айналу уақытының ережелері сақталуын қамтамасыз ету үшін жасалады.
Бэрст адрестеу
Жад кеңістігіне қол жеткенде, бір реттік сөздерге бірнеше тәртіппен қол жеткізілуі мүмкін. Қажетсіз төменгі ретті AD[1:0] адрес біттері бастаушының сұранылған тәртібін жеткізу үшін пайдаланылады. Белгілі бір тәртіпті қолдамайтын мақсат, бірінші сөзден кейін жарылысты тоқтатуы керек. Кейбір осы тәртіптер барлық PCI құрылғыларында конфигурацияланатын кэш желісінің мөлшеріне байланысты. +PCI жарылыс тәртібі A[1] A[0] Жарылыс тәртібі (16 байттық кэш желісімен) 0 0 Сызықтық арттыру (0x0C, 0x10, 0x14, 0x18, 0x1C,) 0 1 Кэш желісін ауыстыру (0x0C, 0x08, 0x04, 0x00, 0x1C, 0x18,) 1 0 Кэш желісін орау (0x0C, 0x00, 0x04, 0x08, 0x1C, 0x10,) 1 1 Резервтелген (бірінші трансферден кейін үзілу) Егер кэш желісі ішіндегі бастапқы смещение нөл болса, барлық осы режимдер бірдей тәртіпке дейін тоғады. Кэш желісін ауыстыру және кэш желісін орау режимдері – бұл бірінші кэш желісін алудың екі түрі. Ауыстыру режимі берілген адресті арттыратын санаумен XOR операциясы арқылы қайтарады. Бұл Intel 486 және Pentium процессорларының бастапқы тәртібі. Оның артықшылығы – оны жүзеге асыру үшін кэш желісінің мөлшерін білудің қажеті жоқ. PCI 2.1 нұсқасы ауыстыру режимін ескірген және кэш желісін орау режимін қосты, онда алу сызықтық түрде жалғасады, әр кэш желісінің соңында оралады. Бір кэш желісі толық алынғанда, келесі кэш желісіндегі бастапқы смещениеге секіреді. Көптеген PCI құрылғылары тек қана әдеттегі кэш желісінің мөлшерінің шектеулі диапазонын қолдайды; егер кэш желісінің мөлшері күтпеген мәнге бағдарламаланса, олар бір сөздік қол жеткізуді күштеп іске қосады. PCI сонымен қатар I/O және конфигурациялық кеңістікке жарылыспен қол жеткізуді де қолдайды, бірақ тек сызықтық режим қолдалады. (Бұл сирек қолданылады және кейбір құрылғыларда қате болуы мүмкін; олар оны қолдамауы мүмкін, бірақ бір сөздік қол жеткізуді де дұрыс күштеп іске қоспауы мүмкін.)
If the starting offset within the cache line is zero, all of these modes reduce to the same order. Cache line toggle and cache line wrap modes are two forms of critical word first cache line fetching. Toggle mode XORs the supplied address with an incrementing counter. This is the native order for Intel 486 and Pentium processors. It has the advantage that it is not necessary to know the cache line size to implement it. PCI version 2.1 obsoleted toggle mode and added the cache line wrap mode, where fetching proceeds linearly, wrapping around at the end of each cache line. When one cache line is completely fetched, fetching jumps to the starting offset in the next cache line. Most PCI devices only support a limited range of typical cache line sizes; if the cache line size is programmed to an unexpected value, they force single word access. PCI also supports burst access to I/O and configuration space, but only linear mode is supported. (This is rarely used, and may be buggy in some devices; they may not support it, but not properly force single word access either.)
Теңдік
PCI шинасы паритет қателерін анықтайды, бірақ оларды операцияларды қайталап түзетуге тырыспайды; бұл тек қателік туралы хабарлама. Осыған байланысты, паритет қатесі орын алғанға дейін анықтаудың қажеті жоқ, ал PCI шинасы оны бірнеше циклдан кейін анықтайды. Деректер фазасында AD[31:0] желілерін басқаратын құрылғы олардың және C/BE[3:0]# желілерінің жұп паритетін есептеп, оны PAR желісі арқылы бір циклдан кейін жібереді. AD шинасының барлық кіру ережелері мен айналым циклдары PAR желісіне де қолданылады, бірақ бір цикл кешіктіріліп. AD шинасын тыңдап отырған құрылғы алынған паритетті тексереді және одан кейін бір цикл өткен соң PERR# (паритет қатесі) желісін белсендіреді. Бұл әдетте процессор үзілісін тудырады, содан кейін процессор PCI шинасында қате анықтаған құрылғыны іздей алады. PERR# желісі тек дерек фазасында қолданылады, мақсат таңдалғаннан кейін. Егер адрестік фазада (немесе Арнайы циклдің дерек фазасында) паритет қатесі анықталса, оны байқаған құрылғылар SERR# (Жүйелік қате) желісін белсендіреді. C/BE# желілерімен жасырылған және қолданылмаған байттардың да белгілі бір мәні болуы керек, және осы мән паритетті есептеу үшін пайдаланылуы тиіс.
64-бит PCI
2.1 нұсқасынан бастап PCI спецификациясы 64 биттік қолдау мүмкіндігін қамтиды. Бұл мүмкіндік кеңейтілген коннектор арқылы жүзеге асырылады, ол 64 биттік шина кеңейтімдерін – AD[63:32], C/BE[7:4]# және PAR64 – сондай-ақ қосымша қуат және жер тіректерін қамтамасыз етеді. 64 биттік PCI коннектор 32 биттік коннектордан қосымша 64 биттік сегментімен ерекшеленеді. 64 биттік құрылғылар арасындағы жад операциялары деректерді жіберу жылдамдығын екі есе арттыру үшін барлық 64 битті пайдалана алады. Жад емес операциялар (конфигурация және кіріс-шығыс кеңістігіне кірулерді қоса алғанда) 64 биттік кеңейтімді пайдаланбауы мүмкін. 64 биттік бірнеше жіберу кезінде адрестеу 32 биттік жіберудегідей жұмыс істейді, бірақ адрестің мәні дерек фазасында екі рет өседі. Бастапқы адрес 64 биттік шегітке сәйкес келуі керек, яғни AD2 0-ге тең болуы керек. Аралық адрестерге сәйкес келетін деректер (AD2 = 1) AD шинасының жоғарғы жартысында жіберіледі. 64 биттік транзакцияны бастау үшін бастаушы AD шинасына бастапқы адресті жібереді және FRAME# сигналымен бір уақытта REQ64# сигналын белсенді етеді. Егер таңдалған қабылдаушы бұл транзакция үшін 64 биттік жіберуді қолдай алса, ол DEVSEL# сигналымен бірге ACK64# сигналын белсенді етеді. Қабылдаушы әр транзакция бойынша 64 биттік жіберуге рұқсат беру туралы шешім қабылдауы мүмкін. Егер REQ64# сигналы адрестік фаза кезінде белсенді болса, бастаушы адрестің жоғары 32 битін және шина командасының көшірмесін шинаның жоғарғы жартысына жібереді. Егер адреске 64 бит қажет болса, екі адрестік цикл қажет, бірақ шинаның жоғарғы жартысы адрестің жоғарғы жартысын және екі адрестік цикл кезінде соңғы командалық кодты тасымалдайды; бұл 64 биттік қабылдаушыға толық адресті көруге және ертерек жауап беруге мүмкіндік береді. Егер бастаушы DEVSEL# сигналын ACK64# белгісіз болса көрсе, ол 32 биттік дерек фазаларын орындайды. Бірінші дерек фазасында шинаның жоғарғы жартысында жіберілетін деректер екінші дерек фазасында жіберіледі. Әдетте, бастаушы DEVSEL# сигналын көрер алдында барлық 64 бит деректі жібереді. Егер ACK64# сигналы болмаса, ол дерек шинасының жоғарғы жартысын жіберуді тоқтатуы мүмкін. REQ64# және ACK64# сигналдары соңғы дерек фазасынан басқа барлық транзакция үшін белсенді күйде сақталады және сәйкесінше FRAME# және DEVSEL# сигналдарымен бір уақытта белсенді емес күйге түседі. PAR64 сигналы PAR сигналы сияқты жұмыс істейді, бірақ AD[63:32] және C/BE[7:4]# үшін жұптық тексеруді қамтамасыз етеді. Бұл сигнал REQ64# белсенді болған жағдайда ғана адрестік фазалар үшін жарамды. PAR64 сигналы тек REQ64# және ACK64# сигналдары екеуі де белсенді болған жағдайда ғана дерек фазалары үшін жарамды.
Кэшке шырмау (көрнекі емес)
PCI бастапқыда кері жазу кэшінің үйлесімділігін қолдау мүмкіндігін қамтыды. Бұл шинадағы кэштен екі сигналды (SDONE – snooping аяқталды, SBO# – snooping тоқтату) тыңдайтын кэштелмелі жадты қолдауды қажет етті. Бұл практикада сирек іске асырылғандықтан, PCI спецификациясының 2.2 нұсқасынан алынып тасталды, ал сигналдар 2.3 нұсқасында SMBus қолжетімділігі үшін қайта пайдаланылды. Кэш DEVSEL# белгісіз барлық жадқа қолжетімділікті бақылайды. Егер ол кэштелген болуы мүмкін қолжетімділікті байқаса, SDONE сигналын төмендетіп (snooping аяқталмады) жібереді. Үйлесімділікті қолдайтын жад SDONE сигналы жоғары болғанша дерек фазасын (TRDY#) аяқтамайды. Кэште таза деректерге жазу жағдайында, кэш тек өзінің көшірмесін жарамсыз деп таниды және SDONE орнатылғаннан кейін ғана оны қолдайды. Бірақ, егер кэште өзгертілген деректер болса, қолжетімділікті жалғастыру үшін оны қайта жазу қажет болады. Сондықтан, SDONE сигналын көтергенде SBO# сигналын қосады. Бұл белсенді жадты TRDY# орнына STOP# сигналын беруге мәжбүрлейді, соның салдарынан бастаушы қосылысты үзеді және операцияны кейінірек қайталайды. Осы уақыт аралығында кэш шинаны иеленеді және деректерін жадқа жазады. Кэш үйлесімділігін қолдайтын жадтар, кэш жолдарынан өтуге дейін пакеттерді тоқтатуға да міндетті.
Даму құралдары
PCI шинасын әзірлеу және/немесе жұмыс істемейтін жағдайларды жою кезінде аппараттық сигналдарды қарастыру өте маңызды. Логикалық анализаторлар және шина анализаторлары – бұл сигналдарды жинап, талдап, пайдаланушыларға оларды пайдалы форматта көрсетуге мүмкіндік беретін құралдар.