2. Typy magistral

2.2. PCI

W momencie kiedy na rynku pojawiły się komputery 32 bitowe, 16 bitowa magistrala okazała się niewystarczająca. Zaczęto poszukiwać innych rozwiązań, które by ją zastąpiły. Pojawił się standard EISA (ang. Extended Industry Standard Architecture), w którym możliwe były transfery 32 bitowe, z zachowaniem pełnej kompatybilności ze starszym 16 bitowym rozwiązaniem. Kompatybilność wymusiła zachowanie taktowania 8.33 MHz. Magistrala była kosztowna i nie zapewniała znacznej poprawy osiągów, przez co nie była stosowana powszechnie. Innym rozwiązaniem była architektura MCA (ang. Micro Channel Architecture). Tu z kolei wszystko zostało zaprojektowane od początku. Nie było zachowania kompatybilności. Magistrala MCA taktowana była zegarem 20 MHz. Maksymalny transfer po magistrali wynosił 20MB/s. Transfery odbywały się w jednym cyklu zegara. Jednak twórca standardu, firma IBM, wszystko opatentowała i żądała od innych opłat za jego stosowanie. To nie przyczyniło się do popularności tego standardu. W międzyczasie powstał standard VESA Local Bus. Stanowiły go dołączone do płyty głównej zazwyczaj jedno, czy dwa gniazda. Można było do nich dołączyć najszybsze urządzenia. Zazwyczaj była to jedynie karta graficzna. Standard ten wykorzystywał lokalną 32 bitową magistralę procesorów Intel 386/486 łączącą procesor z pamięcią cache. Magistrala ta była taktowana z taką szybkością jak procesor (nie szybciej jednak niż 40 MHz) i umożliwiała transfer z prędkością do 120 MB/s. Jak można zauważyć było to znacznie więcej niż w przypadku EISA czy MCA. Jednak VESA Local Bus nie była uniwersalna i była związana z procesorami Intel 386 /486.
Następny procesor Intela, Pentium, wymagał opracowania nowej magistrali systemowej. W 1992 roku wprowadzono magistralę PCI (ang. Peripherial Component Interconnect). Była to zupełnie nowa 32 bitowa magistrala taktowana zegarem 33 MHz. Maksymalny transfer wynosił 132 MB/s. Każdy transfer był realizowany z jednym cyklu zegarowym (tryb burst). Magistrala PCI jest uniwersalną magistralą równoległą, która daje możliwość tworzenia złożonych systemów. Nie jest też ona zależna od stosowanego procesora. Wkrótce zdobyła dużą popularność i do chwili obecnej jest stosowana, chociaż w dużej mierze została już wyparta z rynku przez jej następcę – magistralę PCI Express. Należy nadmienić, że został również zdefiniowany 64 bitowy wariant PCI. Od wersji 2.1 możliwe jest również stosowanie taktowania 66 MHz. Rozszerzenia te były bardzo rzadko stosowane.
W wersji podstawowej (33 Mhz, 32 bity) sygnały transferowane po magistrali można zaliczyć do podstawowych grup:
1.    systemowe,
2.    adresu i danych – 32 linie multipleksowane,
3.    przebiegu transmisji (FRAME, TRDY, IRDY, …),
4.    arbitrażu,
5.    sygnalizacji błędów,
6.    sygnalizacji przerwań,
7.    sterowania pamięcią cache.
Po magistrali mogą być wykonywane różne czynności, które są zdefiniowane dekodowaną komendą:
1.    zezwolenie na przerwanie – odczyt wektora przerwań,
2.    cykl specjalny – przesyłanie komunikatów do wszystkich urządzeń,
3.    zapis/odczyt z urządzenia wejścia-wyjścia (ang. I/O write/read),
4.    zapis/odczyt z pamięci (ang. memory write/read),
5.    zapis/odczyt z pamięci konfiguracyjnej PCI (ang. configuration memory write/read),
6.    cykl adresowania 64 bitowego (ang. dual address cycle).
Do magistrali PCI mogą być podłączone urządzenia nadrzędne (inicjatory transmisji), które mogą rozpoczynać transmisję danych i urządzenia podrzędne (nasłuchujące). Typowy przebieg transmisji danych jest przedstawiony na rysunku 1. Na początku urządzenie będące inicjatorem wystawia aktywny sygnał FRAME oraz jednocześnie adres (ADDRESS) urządzenia docelowego i komendę (BUS CMD). Urządzenie docelowe ma jeden cykl zegarowy, aby odczytać swój adres i zdekodować komendę. Sygnał IRDY wskazuje, że inicjator jest gotowy do rozpoczęcia transmisji danych. Urządzenie docelowe wystawia sygnał DEVSEL. Od tego czasu w każdym takcie zegara jest transferowane jedno 32 bitowe słowo danych. W każdej chwili inicjator lub urządzenie docelowe mogą wstrzymać transmisję wystawiając sygnały IRDY lub TRDY. Transmisję danych kończy zdjęcie sygnału FRAME i DEVSEL.

 
Rys. 1. Sygnały na magistrali PCI podczas operacji odczytu danych

Magistrala PCI ma swoją własną przestrzeń adresową. Poprzez wpisy danych do tej przestrzeni można konfigurować samą magistralę, jak i urządzenia do niej dołączone. Ta przestrzeń adresowa jest różna od przestrzeni adresów pamięci RAM. Pamięć magistrali PCI zawiera 256 bajtów dla jednego urządzenia. Pierwsze 64 bajty stanowią nagłówek o jednakowej strukturze dla wszystkich urządzeń. Pozostałe 192 bajty to rejestry specyficzne dla urządzenia.