Moderní komponenty pro osobní počítače mají stále vyšší nároky na rychlost komunikace a široce rozšířené rozhraní ISA, dříve přítomné v každém PC, bylo už dávno vytlačeno sběrnicí PCI. Není již tak jednoduché navrhnout aplikační desku do PC, jak tomu bylo u sběrnice ISA. Jeden z našich produktů – desku do PC s pracovním názvem Archiv bylo nutno redesignovat po hardwarové stránce ze sběrnice ISA na PCI s požadavkem na maximální možnou kompatibilitu s již existujícím softwarem běžícím v PC.Jak se vývojáři ve firmě Ryston s tímto problémem vyrovnali, je popsáno v následujícím článku.
Původní produkt
Archiv je vestavná deska do technologického počítače, sloužící jednak pro archivování záznamů o událostech nastalých při běhu programu, jednak pro připojení specifického zařízení přes 8-bitový port s galvanickým oddělením. Deska měla rozhraní sběrnice ISA (8-bitů, kompatibilní s PC XT/AT).
Jednotka obsahuje zálohovanou statickou RAM s kapacitou původně 4 až 16 MB, připojenou přes rozhraní podobné řadiči pevného disku, kde adresa „sektoru“ je tvořena třemi přednastavitelnými čítači. Do těchto čítačů je možno programem vstoupit jako do paralelních registrů.
Galvanicky oddělený osmibitový výstupní port a LED diody indikující probíhající přístup ze sběrnice, byly spolu s rozhraním sběrnice provedeny obvody řady 74HCT střední integrace, později byly nahrazeny programovatelným logickým obvodem. Zálohovací obvod s baterií v době výpadku externího napájení zaručuje uchování dat ve statické RAM podobu až několika let.
Karta se chová jako 8 registrů v I/O adresním prostoru PC, jejichž bázová adresa je určena nastavením přepínače DIP v rozsahu adres 1C0 až 1F8, zpravidla neobsazených žádnou periferií. Každý registr je přístupný na adrese bázová adresa + offset podle následující tabulky.
Offset |
Registr |
přístup |
Popis |
---|---|---|---|
0x00 |
Data |
R/W |
Čtení z/zápis do RAM, inkrementuje Adresu(31:0) |
0x01 |
Adresa(15:8) |
R/W |
Adresa do paměti RAM, zápis nuluje registr Adresa(7:0) |
0x02 |
Adresa(23:16) |
R/W |
Adresa do paměti RAM |
0x03 |
ID desky |
R |
ID desky = 1100 011w (bin) pro old Archiv_ISA |
0x04 |
Adresa(7:0) |
R/W |
Adresa do paměti RAM(nejnižší byte) |
0x05 |
Battery Status |
R |
xxxxxxx1 … je nutné vyměnit záložní baterii |
0x06 |
8-bitový port/firmware |
R/W |
zápis: výstupní port, čtení: verze firmware |
0x07 |
Adresa(31:24) |
R/W |
Adresa do paměti RAM |
Tabulka 1: Registry desky
Zápisem do 4 registrů se nastaví až 32-bitová adresa (počátek „sektoru“ – oblasti přístupu), a následujícím zápisem nebo čtením datového registru se zapíše nebo přečte 1 byte dat z této adresy. Adresa se automaticky inkrementuje po každém zápisu nebo čtení datového registru. Adresa se skládá ze 4 registrů na offsetech 0x07, 0x04, 0x01, 0x02. Výstupy těchto registrů řídí lokální adresovou sběrnici. Datová sběrnice, využívaná přístupem do adresy 0x00, je obousměrná. Registry Status a ID jsou pouze čtecí.
Rozdíly ISA versus PCI
Sběrnice ISA má šířku dat 8 nebo 16 bitů a adresní prostor 20 nebo 24 bitů. Data jsou přenášena během aktivace příslušného signálu Read nebo Write. Transakce sběrnice nejsou synchronní s taktovacími hodinami, které mají typicky kmitočet 4,77 až 8,3MHz. Případné konflikty periferií, které by obsazovaly stejné adresy, se řeší nastavováním propojek určujících bázovou adresu desky, anebo u moderních desek metodou Plug and Play (PnP), která je z hardwarového pohledu poměrně složitá. Sběrnice ISA nebyla nikdy celosvětově standardizována, a rozdílné realizace výrobců tak nemusí být vždy kompatibilní a funkční. Ze sběrnice ISA pochází několik derivátů s rozšířenou adresací (Vesa apod.), které se krátkodobě používaly, ale byly opuštěny.
Specifikace PCI protokolu byla vyvinuta a je udržována společenstvím PCI-SIG, které má globální rozsah a respekt. Tato sběrnice je orientována na přenos zpráv (transakcí) místo přímého zápisu a čtení dat, a používá multiplexaci adresních a datových signálů. Každá transakce obsahuje inicializaci, adresní část, datovou část s případnými čekací cykly a zakončení. Jednotlivé části transakce probíhají synchronně rychlostí 33MHz nebo 66MHz (určeno nejpomalejším zařízením) a šířkou dat 32 nebo 64 bitů.
V zařízení (periferní desce) musí být implementována konfigurační paměť, která slouží pro uložení bázové adresy, podporované šíře datové sběrnice, počtu čekacích cyklů, identifikaci výrobce apod. Tento mechanismus je podstatně lepší než ISA PnP.
Sběrnice PCI je sice řádově rychlejší než ISA, její plné lokální rozhraní však vyžaduje velmi specificky pracující složitý řadič. Existuje řada provedení integrovaných řadičů s lokální sběrnicí, ale jsou poměrně drahé a nesplňují požadavek kompatibility s původní deskou. Pokoušeli jsme se použít například obvod PSB4610 PITA-2 výrobce Infineon, nebylo však dosaženo kompatibility, a výrobce mezitím výrobu ukončil a prodal tuto divizi firmě Lantiq.
Implementace jednoduchého PCI rozhraní
Rozhraní mezi deskou Archiv a PC bylo průběžně modernizováno a u poslední verze je realizováno v hradlovém poli typu CPLD. V případě ISA sběrnice je realizace několika 8 bitových registrů a řídicí logiky nenáročná na prostředky hradlového pole, a tak bylo možné použít obvod EPM3064 (od firmy Altera).
Vývoji desky Archiv nové verze předcházel podrobný základní výzkum rozhraní PCI až na úroveň bitů konfiguračního prostoru a jejich významu, i nedokumentovaného v originální specifikaci [1], avšak podporovaného PCI BIOSem a popsaného v další literatuře [2]. Deska se z pohledu PC chová jako PCI zařízení podporující pouze 8-bitový přístup do I/O prostoru. Jádro firmware vychází ze specifikace PCI 2.1 [1].
Obr. 1: Blokové schéma rozhraní PCI
Popsané rozhraní je typu Target, což znamená, že je vždy podřízeno sběrnici. Proto je většina řídicích signálů znázorněna jako vstupy do rozhraní (z levé strany). Na pravé straně (lokální) je 8-bitová obousměrná datová sběrnice a výstupy adres a řídicích signálů do desky.
V rozhraní se nachází sekvenční automat, taktovaný signálem PCICLK, který reaguje na oslovení desky ze strany sběrnice signály FRAME#, C/BE# a AD, odpoví aktivací signálu DEVSEL#, vloží několik čekacích period a potvrdí transakci aktivací signálu TRDY#. Rozhraní generuje a kontroluje paritu přes signály AD a C/BE# a případnou chybu hlásí přes PERR#. Typ transakce (např. zápis do portu) je určen kombinací čtveřice signálů C/BE#. Podrobný popis chování sběrnice PCI přesahuje rozsah tohoto článku, - odkazujeme na [1].
Na straně lokální sběrnice je vygenerován cykl odpovídající demultiplexované sběrnici Intel, a dekódují se příslušné adresy paměti nebo zápisové impulsy do portu. Tato lokální strana je do jisté míry konkrétně modelována podle požadavků obvodů na desce (zálohovací mechanismus pomocí signálu CE skrz obvod Dallas, zde neznázorněno), ale může být snadno modifikována podle jiných uživatelských požadavků, například konvertována do signálů sběrnice Motorola nebo multiplexovaných signálů Intel, či sériové sběrnice SPI apod.
Co se děje v počítači po zapnutí
Deska vložená do PCI slotu je po zapnutí napájení nebo resetu rozeznána PCI Biosem, který má přístup do konfiguračního prostoru desky. V něm je viditelná datová struktura s několika pozicemi, popisujícími výrobce a typ desky/řadiče a další vlastnosti: Device ID, Vendor ID, Class Code.
PCI Bios automaticky nastaví kartě bázovou adresu (čtecím / zápisovým mechanismem do registru BAR v konfiguračním prostoru zařízení), avšak na rozdíl od „čisté“ specifikace je v našem designu (volitelně) BAR hodnota předdefinována a nastavena jako read-only, a tak je BIOSu „vnucena“ deskou stejná bázová adresa jako měla původní deska ISA Archiv.
Obr. 2 Konfigurační prostor desky PCI
Pro implementaci stavového automatu, který realizuje protokol transakcí sběrnice PCI, bylo nutné použít modernější obvod EPM570.
Specifikace PCI [1] předepisuje na svých 400 stranách řadu mechanických a elektrických parametrů. Jedním z nejdůležitější je délka přívodů mezi konektorem a obvodem řadiče, a zejména je předepsána délka vodiče signálu PCICLK (synchronní hodiny sběrnice) a jeho impedanční přizpůsobení sériovým rezistorem pro potlačení zákmitů. U signálů sběrnice, delších na desce než cca 5cm, jsou doporučeny rovněž sériové rezistory 22 Ohmů. V našem případě byla pečlivým návrhem plošného spoje dodržena minimální délka vodivého obrazce, a proto rezistory nejsou třeba, s výjimkou hodinového signálu.
Pro snížení spotřeby v zálohovacím (spacím) režimu je na lokální straně přizemněna datová a adresová sběrnice. Zjistili jsme, že statické paměti dramaticky zvyšují svoji spotřebu ve spacím režimu, pokud jejich sběrnice není trvale v nízké logické úrovni. Protože při výpadku napájení jsou výstupy obvodu CPLD nedefinovány, byly doplněny tyto pull-down odpory, zajišťující stálou úroveň L i v zálohovaném režimu.
Zpětná kompatibilita
Specifické požadavky zákazníka na absolutní zpětnou kompatibilitu se softwarem, který byl napsán pro přístup k Archivu s rozhraním ISA, bylo nutné maličko porušit specifikaci, jak bylo popsáno výše, či přesněji využít nedokumentované možnosti, kterou však podporuje BIOS. Dle standardu PCI musí být možné každé PCI zařízení umístit do adresního prostoru PC na jakoukoli BIOSem zvolenou bázovou adresu kvůli odstranění možných kolizí různých zařízení. Může se tak stát, že po každém resetu sběrnice a nové inicializaci sběrnice se deska objeví na nějaké, pokaždé různé, Biosem zvolené bázové adrese, a tedy nebude čitelná existujícím softwarem, který chodí na pevnou adresu. Proto jsme zvolili dvě možnosti: buď čistou implementaci, anebo v hradlovém poli hodnotu bázového registru realizovat jako "read-only" s přednastavenou hodnotou, což je v rozporu se specifikací (avšak ke spokojenosti zákazníka).
Výsledkem je deska, která obsahuje stejnou nebo větší kapacitu paměti než verze ISA (nyní až 128MB), ale po proběhnutí inicializace a využití „nuceného“ obsazení bázové adresy se tato deska vůči aplikačnímu softwaru tváří identicky jako původní deska. Aplikační SW tak bylo možno ponechat bez jakékoli změny. Návrh CPLD však variantně umožňuje i zcela čisté chování při identifikaci. Dosud však nebyl zaregistrován žádný konflikt ani na schválených modelech počítače, ani jinde.
Co bylo nerealizováno, a co naopak přidáno
Především nebyl realizován přenos dat v plné šíři 32 bitů. Přesněji řečeno přístup do samotného obvodu řadiče je 32-bitový, ale data do paměti jsou v souladu s původní specifikací jen 8-bitová. Znamená to, že datový přístup do desky skrz řadič je umožněn jen z adresy, jež je dělitelná 4, ale tomu naštěstí vyhovuje původní struktura registrů, kdy data jsou na adrese base+0.
Pro pole Vendor Id a Device jsme ponechali původní hodnoty obvodu Infineon, který je Biosem poznán jako I/O Controller.
Samotný software samozřejmě je poněkud nekorektní, protože by měl přistupovat do desky prostřednictvím ovladače pod operačním systémem – to však je přesně to, co uživatelé nechtěli.
Museli jsme přidat několik Wait-stavů, aby cykl přístupu do pamětí byl v souladu s požadavky těchto obvodů. Na podobné desce s komunikačním řadičem Kom-PP tyto vložené čekací stavy byly potřebné proto, že bez nich původní program běžel „příliš rychle“ a občas hlásil chyby.
Dále nebyla implementována funkce PCI „Master“, kdy lokální procesor na desce se skrze řadič zmocní sběrnice a provádí na ní svoje transakce. Naše deska však takovou činnost nikdy neprovádí, protože na sobě ani nemá žádný procesor.
A konečně, nebyla realizována funkce „spánku“ počítače – úsporného režimu, který podporuje i specifikace PCI 2.2 . Ale v dané aplikaci počítač běží neustále v aktivním režimu, takže to nevadí.
Protože po implementaci velmi minimalistické verze PCI protokolu zbyly v hradlovém poli ještě nějaké nevyužité prostředky, rozhodli jsme se dle přání zákazníka rozšířit zařízení Archiv o přístup přes populární rozhraní USB. To umožňuje provádět stejné operace (čtení archivu) např. pomocí externího notebooku při přítomnosti Archivu ve vypnutém či odešlém PC nebo i mimo něj, a získat tak archivovaná data.
Možnosti dalšího využití
Popsané PCI rozhraní „chudého muže“ je asi to nejjednodušší, co lze vytvořit, aby to prošlo testem PCI Biosu. Od té doby jsme vyvinuli řadu modifikací a vylepšení pro dosažení větší průchodnosti, s větší šířkou sběrnice a s integrovanou aplikační logikou v stejném pouzdru CPLD. Při vývoji byl vytvořen Projekt pro prostředí MaxII od firmy Altera a zdrojový kód byl napsán v jazyce VHDL.
Poznatky a techniky využité v rozhraní PCI sběrnice desky Archiv je nyní možno využít ke konstrukci jednoduchých aplikačních desek do počítačů třídy PC, jako speciální převodníky, datová komunikace, kryptografie, laboratorní přístroje a další vědecko-výzkumné aplikace.
Použitý obvod CPLD je poměrně levný a má dostatečnou kapacitu pro realizaci dodatečné logiky nebo automatu, potřebného pro činnost vnitřku desky. I když v desce Archiv se používá 4-vrstvý plošný spoj, bylo odzkoušeno i použití 2-vrstvého materiálu, vhodného pro vývoj i téměř amatérských desek plošných spojů.
Obr. 3: Foto desky PCI archivu s řadičem CPLD a další I/O desky s řadičem PITA-2
Odkazy:
[1] PCI Local Bus Specification rev. 2.1s, PCI Special Interest Group, P.O.B.14070, Portland, OR97214, USA
[2] Goodrum, A.: PCI Hot-Plug Application and Design. Annabooks, 11838 Bernardo Plaza, San Diego, CA 92128, USA.