Periferní zařízení
Laboratorní úloha F. Měření na PCI sběrnici
Vypracovali: Josef Hajas Přemysl Jiřík Ota Korbel
Letní semestr školního roku 2004/2005 Skupina 103 ve středu od 11:00
I. Zadání: 1. Změřte průběhy signálů základních cyklů na PCI sběrnici. 2. Pomocí programu dumppci zjistěte informace o PCI sběrnici a typy připojených adaptérů.
1. Měření průběhů signálů Měření průběhů proveďte pomocí dvou počítačů PC. Jeden z dvojice počítačů je vybaven měřící kartou PCI sběrnice. Měřící karta je osazena obvodem XILINX, který snímá průběhy jednotlivých signálů a ukládá je do dynamické paměti (DIMM moduly umístěné přímo na měřící kartě). Měřící karta je propojena s druhým počítačem přes paralelní port. Tento počítač je vybaven sběrným softwarem, který zobrazí snímané průběhy. Pro měření se používá program testpci. Program se spouští vždy s parametrem; podle něj se generují sběrnicové cykly. Parametry programu jsou následující: mread......čtení jednoho bytu z paměti mwrite.....zápis jednoho bytu do paměti ioread.....čtení 8-bitového portu iowrite....zápis 8-bitového portu bytemerge..spojování několika 8-bitových zápisů cfgread....čtení konfiguračního registru longwrite..zápis několika po sobě následujících dwordů iack.......potvrzováni přerušení, vyslání vektoru special....vyvolání speciálního cyklu Sejměte průběhy všech cyklů, které program umí generovat (mimo iack). Uveďte je do protokolu a patřičně okomentujte. Poznámky k měření:
Čtení/zápis do paměti
Smyčka pro tento parametr zapisuje jednu slabiku do videopaměti (na adresu A000h:0000h). Vyzkoušejte různé varianty zápisu, zejména zápis slabiky na lichou adresu, zápis na adresu, která není dělitelná čtyřmi, zápis slova (word), dvojslova (double word). Pozorujte, jak se změny v programu projeví na přenášené adrese a signálech C/BE#.
Varianty zápisu s parametrem bytemerge, longwrite Zjistěte, pro jaké typy přenosu dat (jaké části kódu) optimalizuje můstek Hostto-PCI zápisy (spojení do blokového přenosu apod.). Zjistěte, co se stane, změníte-li adresy zápisu v případě varianty longwrite (např. posun offsetu všech adres o 1).
Čtení konfiguračního registru
Analyzujte kód programu a zjistěte, z kterého zařízení (jaké ID) a jaké konfigurační registry jsou čteny. Z přenášených dat na sběrnici dekódujte obsah těchto registrů. Speciální cyklus Zasílaná zpráva během speciálního cyklu je z množiny rezervovaných kódů, tj. bez významu. Popište sled signálů. Upravte kód programu tak, aby byla zasílána zpráva SHUTDOWN. Pozorujte chování počítače.
2. Zjištění připojených PCI adaptérů Prostudujte zdrojový kód programu dumppci.c, zejména využití jednotlivých služeb PCI BIOSu. Program spusťte a zjistěte informace o PCI sběrnici a připojených zařízeních. Na základě výpisu uveďte do protokolu tabulku s dekódovanými informacemi: výrobce zařízení a typ výrobku (číselné označení i jméno výrobce – vyhledejte na internetu), třídu zařízení podle přílohy D normy PCI, přidělenou adresu počátku paměťového a V/V prostoru, přerušovací vektor, časování signálu DEVSEL. Signály sběrnice V dalším textu jsou podrobněji popsány pouze základní signály, se kterými se pracuje v rámci laboratorního cvičení. Na obrázku 1 je uveden přehled těchto signálů (znak # označuje inverzní signál, tj. aktivní v log. 0). CLK RST#
Clock je hodinový (synchronizační) signál Reset je asynchronní reset
Datové signály: AD[31::00] Address and Data jsou multiplexované adresové a datové vodiče. Stav sběrnicového cyklu určuje, zda je na těchto vodičích právě přenášena adresa či data. C/BE[3:0]# Bus Command and Byte Enables jsou opět multiplexované signály. Po těchto vodičích se přenáší příkaz nebo příznak platnosti dat. Význam je opět určen stavem sběrnicového cyklu. PAR Parity je sudá parita. Zabezpečuje společně signály AD a C/BE. Příkazy (operace): Řízení
sběrnice PCI je navrženo inteligentněji než např. u sběrnice ISA. Typ cyklu (čtení/zápis do paměti, na port ...) není určen speciálními signály (MEMW, IOW), ale příkazem přenášeným k zařízení pomocí vodičů C/BE#. Seznam příkazů je v následující tabulce:
C/BE[3::0]# 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Typ příkazu Potvrzení přerušení (Interrupt Acknowledge) Speciální cyklus (Special Cycle) Čtení z portu (I/O Read) Zápis na port (I/O Write) Rezervováno (Reserved) Rezervováno (Reserved) Čtení z paměti (Memory Read) Zápis do paměti (Memory Write) Rezervováno (Reserved) Rezervováno (Reserved) Konfigurační čtení (Configuration Read) Konfigurační zápis (Configuration Write) Memory Read Multiple Dual Address Cycle Memory Read Line Memory Write and Invalidate Tabulka 2: Přehled příkazů
Interrupt Acknowledge je žádost o potvrzení přerušení. Na základě tohoto příkazu vysílá zařízení na datovou sběrnici číslo přerušení (IRQx), které mu bylo přiděleno v rámci PnP. Speciální cyklus představuje mechanismus „broadcastu“ na sběrnici. V datech je posílána zpráva pro všechna zařízení. Význam zpráv definuje příloha A normy. Konfigurační čtení a zápis slouží ke zařízení. Využívá zejména v rámci PnP.
čtení/zápisu
konfiguračních registrů
Dual Address Cycle umožňuje adresovat zařízení se šířkou sběrnice 32 bitů pomocí 64 bitové adresy, která se zapisuje pomocí tohoto cyklu ve dvou fázích. Memory Read Multiple, Memory Read Line, Memory Write and Invalidate se liší od normálního čtení/zápisu podporou vyrovnávací paměti.
II. Výsledky měření Čtení jednoho bytu z paměti:
V okamžiku pádu FRAME# do nuly začíná adresová fáze sběrnice – Na CB je příkaz „Čtení z paměti“, na AD je adresa odkud budeme číst. Následuje datová fáze sběrnice. Dále končí Frame–bude už jen jeden přenos. DEVSEL# jde do nuly a data jsou připravena pro přenos. Konečně po změně TRDY# jsou data přenesena. Uvedený kód popisuje čtení jednoho byte z paměti. Na C/BE# je nastavena hodnota 06 znamenající čtení. Na A/D bus je adresa místa paměti, odkud budeme číst: B8000h. Poté několik hodinových taktů nejsou data na sběrnici platná. Probíhá vybavování paměti. Jakmile i TARGET ohlásí, že je READY, proběhne samotný přenos dat. Po datových vodičích je přenášena čtveřice bajtů. Který byte z této čtveřice obsahuje námi přenášená data určíme podle C/BE#. To má hodnotu 0Eh, neboli 1110b. Tím zjišťujeme že platný je pouze poslední byte a námi přenášená data jsou 7Eh.
Tento průběh je obdobný, nyní jen chceme číst z adresy B8001h. Ta není dělitelná 4. Přenosy s takovouto adresou se řeší tím, že se použije adresa jiná, dělitelná 4, a příslušně se upraví bity platnosti. Opět se použije stejný příkaz čtení z
paměti i stejná adresa. Data jsou také stejná, jen maska je 0Dh, neboli 1101b. Tím pádem je platný jiný byte. Zápis do paměti
Tento průběh zachycuje zápis jednoho byte na adresu B8000h. Rozdíl oproti předchozím průběhům je jen v tom, že během adresní fáze se vysílá příkaz 07h ( Zápis do paměti).
Toto je zápis opět jednoho byte na adresu BA001h. Obdoba předchozích – lichá adresa je řešena posunem na bity platnosti na C/BE#.
Zde je zápis jednoho byte s maskou platnosti 1011.
Zápis slova (2323h) na lichou adresu. Lichá adresa je vyřešena posuvem a úpravou masky.
Zápis dvouslova. Celé dvouslovo zde nejde zapsat během jediného cyklu. Nejprve jsou zapsány 3 byte a pak 1 byte (maska 0Eh-1000b).
Čtení 8-bitového portu
Čtení z IO brány je prakticky stejné jako čtení z paměti. Rozdíl je v příkazu ( IOREAD: 02h).
Zápis 8-bitového portu
Zápis na IO bránu je opět stejný jako předešlé. Jen příkaz je IOWRITE – 03h.
Spojování několika 8-bitových zápisů
V tomto měření se zapisují 3 byty jako 3 oddělené přenosy.
Čtení konfiguračního registru
Příkaz je konfigurační čtení: 0Ah. Výběr zařízení je realizován signálem IDSEL. Přečtené údaje: DeviceID = 0x1531 (North Bridge) a VendorID = 0x10b9 (Acer Labs Inc.)
Zápis několika po sobě následujících dwordů
Zde dochází k nezoptimalizovanému přenosu, počet je transakcí dvojnásobný, mění se bity platnosti 0011 a 1100. Optimalizací by byl burst přenos. Vyvolání speciálního cyklu
Zde měl být příkaz 01h - speciální cyklus. Data jsou zde 55AA55AAh, což v daném kontextu nic neznamená. Vyslání zprávy SHUTDOWN způsobuje restartování počítače.
Informace o PCI sběrnici a typech připojených adaptérů Získané informace o PCI: PCI BIOS Dump. TE. Version: Mar 31 2002, 16:41:57 syntax: DUMPPCI [slot] PCI BIOS matches PCI Spec 2.16 1 PCI buses and bridged buses installed. Configuration access mechanisms: 1 supported. 2 NOT supported. Special Cycle mechanisms: 1 supported. 2 NOT supported. Informací o jednotlivých zařízeních: Device VendorID Výrobce DeviceID Typ výrobku Třída zařízení Zač. pam. Prostoru Zač. V/V prostoru Přerušovací vekt. Časování DEVSEL
0 0x10B9 Acer Labs Inc 0x1531 North Bridge
2 0x10B9 Acer Labs Inc 0x1533 PCI South Bridge
06h-Bridge device
06h-Bridge device
3 4 0x10EC 0x5333 S3 Graphics Realtek Co.,Ltd. Semiconductor 0x8139 0x8A01 Fast Ethernet ViRGE /DX Adapter & /GX 02h-Network controller
03h-Display controller
0xE4000000
0xE0000000
0x6401
FAST
MEDIUM
11 0x10B9 Acer Labs Inc. 0x5229 EIDE Controller 01h-Mass storage controller
0xf001
11
10
MEDIUM
MEDIUM
MEDIUM
III. Závěr: Byly naměřeny průběhy signálů základních cyklů na PCI sběrnici. K tomu byly využity krátké programy napsané v assembleru. Zjištěné průběhy byly graficky zaznamenány a uloženy. Naměřené průběhy odpovídají specifikacím.