Laboratorní úloha z předmětu Periferní zařízení



Úloha F

Měření na PCI sběrnici


Vypracovali:

Jiří Trávníček

Tomáš Uko

Martin Bruchanov

Miloš Hrdý



Obsah:

Zadání

  1. Měření Průběhů signálů

  2. Zjištění připojených PCI adaptérů

Teoretická část

  1. Signály sběrnice

  2. Příkazy (operace)

Praktická část

  1. Měření průběhu signálu

  2. Zjištění připojených PCI adaptérů:

Závěr


Zadání:

  1. Změřte průběhy signálů základních cyklů na PCI sběrnici.

  2. Pomocí programu dumpci 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.


Postup měření:

Počítač, který je vybaven měřící kartou, restartujte v módu MS-DOS. Přejděte do adresáře e:\testpci, resp. c:\testpci (dle měřícího počítače). V tomto adresáři je umístěn program testpci, který generuje sběrnicové cykly. Na počítači s měřícím programem najděte na ploše ikonu PCI Analyzátor a měřící program spusťte. V hlavní nabídce vyberte Soubor – Nové měření. Ponechejte nastavenou volbu měření „Bez podmínky“. Na druhém počítači spusťte testpci s určitým parametrem. V zápětí na měřícím počítači stiskněte tlačítko Start. Po chvíli můžete zastavit měření tlačítkem Stop nebo vyčkat, až se zaplní paměť vzorků. Aktuální měření uložte do souboru. Obsah obrazovky si můžete uložit také jako obrázek bmp pomocí nabídky Soubor – Uložit jako obrázek (Pozor: Okno s výběrem souboru odsuňte mimo okno s navzorkovanými signály. Pokud okno výběru překrývá hlavní okno, objeví se v místě překryvu díky chybě v programu v uloženém obrázku bílý obdélník).


Program testpci je napsán v assembleru. Zdrojový kód máte k dispozici. Prostudujte jej. 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


Poznámky k měření:

POZN.: Operace čtení a zápis do paměti se provádějí do videopaměti.

Sejměte průběhy všech cyklů, které program umí generovat (mimo iack). Uveďte je do protokolu a patřičně okomentujte.


Č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 Host-to-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.


POZN.: Cykly v jednotlivých podprogramech jsou realizovány instrukcí loop. Jde tedy o cykly s pevným počtem opakování. Program se neukončuje stiskem libovolné klávesy, jak tomu většinou bývá.


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.


Pro zájemce: Konfigurační registr COMMAND obsahuje bit Memory Space. Nastavením tohoto bitu na hodnotu log. 0 zakážeme příslušnému zařízení akceptovat příkazy přistupující k paměťovému prostoru (memory read/write). Upravte smyčku cfgread na zápis tak, aby byl nulován tento bit na VGA kartě (nejprve musíte zjistit její ID z výpisu všech zařízení). Pozorujte její chování.


Teoretická část:

Sběrnice PCI Local Bus (Peripheral Component Interconnect) je pseudosynchronní 32 nebo 64-bitová sběrnice. Ač se v názvu vyskytuje označení Local Bus, její postavení v architektuře PC neodpovídá lokální sběrnici. Mezi její přednosti patří zejména blokový přenost dat (burst mód) a podpora PnP. Umožňuje (podobně jako u sběrnice ISA) prodloužit sběrnicový cyklus. Na rozdíl od sběrnice ISA je přívlastek označující vlastnost synchronnosti skutečně na místě, neboť všechny události jsou vztaženy k vzestupným hranám synchronizačních (hodinových) pulsů. Přidělování sběrnice je centralizované. Zařízení, kterému je sběrnice přidělena, se nazývá master (iniciátor), „partner“ komunikace s iniciátorem je target (cíl). Základní frekvence hodinového signálu je 33 Mhz, norma definuje i verzi PCI 66 MHz. Špičkově je možné přenést data na každou hranu hodinového signálu.

Na běžných deskách je implementována verze 32bitů/33 MHz, verze 66MHz je základem rozhraní AGP, 64 bitovou sběrnici nalezneme díky vyšší ceně implementace pouze na deskách určených pro serverové aplikace.

1. Signály sběrnice:

Norma PCI definuje 47 (resp. 49 pro zařízení typu Master) povinných signálů, které musejí být implementovány na každém zařízení PCI. Další signály jsou volitelné.

Základní signály, se kterými se pracuje v rámci laboratorního cvičení. (znak # označuje inverzní signál, tj. aktivní v log. 0):


CLK Clock je hodinový (synchronizační) signál

RST# 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.


Signály k řízení sběrnicového cyklu:


FRAME# Cycle Frame řídí transakci (sběrnicový cyklus). Určuje její začátek a konec.

IRDY# Initiator ready oznamuje, že iniciátor je připraven k datovému přenosu. V případě zápisu to znamená, že jsou na datové sběrnici platná data, v případě čtení indikuje, že přečte přenášená data.

TRDY# Target ready oznamuje, že cílové zařízení je připraveno k datovému přenosu.

STOP# Signál Stop je řízen cílem (targetem). Žádá iniciátor o zastavení probíhající transakce.

IDSEL# Initialization Device Select je dvoubodový spoj, vedoucí od řadiče sběrnice ke každému zařízení. Slouží k výběru zařízení (jako chip-select) při konfiguraci zařízení.

DEVSEL# Device Select je výstup adresového dekodéru zařízení. Indikuje aktuálnímu masteru, zda bylo nějaké zařízení vybráno (adresou na sběrnici).

LOCK# Umožňuje zamknout sběrnici pro provedení atomické transakce.


Signály k řízení přidělování sběrnice:


REQ# Signál Request je dvoubodový signál. Pomocí něj žádá zařízení (potenciální master) přidělovač sběrnice o její přidělení.

GNT# Signál Grant je opět dvoubodový. Přidělovač sběrnice oznamuje tímto žádajícímu zařízení, že mu sběrnice byla přidělena (odpověď na signál REQ#).


Hlášení chyb:


PERR# Parity Error se používá k hlášení chyby parity. Řídí jej příjemce dat.

SERR# System Error je generován při chybě parity během speciálního cyklu nebo při jiné chybě, např. přetečení adresy.


Přerušení:


INTA# Signály žádosti o přerušení (nepovinné). Každé konstruované zařízení by mělo primárně využít signál INTA#, pouze u tzv. multifunkčních zařízeních (více zařízení v jednom čipu s jedním rozhraním nebo více zařízení na jednom adaptéru) mohou být zapojeny také signály další.


2. Příkazy (operace):

Řízení sběrnice PCI je určeno příkazem přenášeným k zařízení pomocí vodičů C/BE#.

Seznam příkazů :


C/BE[3::0]#

Typ příkazu

0000

Potvrzení přerušení (Interrupt Acknowledge)

0001

Speciální cyklus (Special Cycle)

0010

Čtení z portu (I/O Read)

0011

Zápis na port (I/O Write)

0100

Rezervováno (Reserved)

0101

Rezervováno (Reserved)

0110

Čtení z paměti (Memory Read)

0111

Zápis do paměti (Memory Write)

1000

Rezervováno (Reserved)

1001

Rezervováno (Reserved)

1010

Konfigurační čtení (Configuration Read)

1011

Konfigurační zápis (Configuration Write)

1100

Memory Read Multiple

1101

Dual Address Cycle

1110

Memory Read Line

1111

Memory Write and Invalidate


Praktická část:

1. Měření průběhu signálu:

  1. Memread – čtení z paměti
    Čtení 1B z adresy B8000h. Na CB BUSu je nejprve příkaz pro čtení z paměti – 06h, poté maska určující které data jsou platná – 0Eh, v našem případě se přečte 20h.


  1. Memwrite – zápis 1B
    Podobné jako memread, pouze je příkaz pro zápis do paměti – 07h a maska, která data jsou platná – 0Eh, v našem případě 23h.


  1. Memwrite – zápis 1B na lichou adresu
    Zápis 1B na adresu B8001h (lichou adresu). Podobné jako na sudou, jen se změní maska platnosti dat – 0Dh.


  1. Memwrite – zápis 2B (slova)
    Podobné jako memwrite 1B, akorát maska určuje platné 2B – 0Ch, v našem případě 2323h.


  1. Memwrite – zápis 2B (slova) na lichou adresu
    Stejné jako memwrite 1B na licho adresu, s tím, že se zase změnila maska platnosti dat. – 09h, tedy 420Fh.


  1. Memwrite – zápis 4B (dvojslova)
    Zápis do paměti s platností všech dat. Maska 00h, tedy 4107410Fh.


  1. Memwrite – zápis 2B (slova) na lichou adresu
    Zde je vidět, že zápis proběhne nadvakrát. Nejprve se zapíšou horní tři byty v jednom cyklu (maska 01h), potom teprve spodní byte v dalším cyklu (maska 0Eh).


  2. Bytemerge
    Zapisujeme postupně 2 bajty. Můstek Host-to-PCI by se tento zápis mel pokusit optimalizovat (spojit do blokového přenosu). Námi měřený to však neučinil.


  1. Longwrite
    Zde je znázorněn blokový přenos, kdy na jednu adresovou fázi připadá několik datových. V tomto případě dochází k autoinkrementaci adresy (o hodnotu 4). ). Špičkově je možné přenést blok dat na každou vzestupnou hranu hodin. V našem případě se tak neděje kvůli nepřipravenosti cíle(videopaměti).


  1. Cfgread – čtení konfiguračního registru
    Zde jsme měli číst ze systémového registru aktivovaného speciálním příkazem na sběrnici. Bohužel toto měření proběhlo bez jakéhokoliv výsledku, což se nám nepodařilo vyřešit ani za účasti cvičícího.

  2. Special
    Speciální cyklus se vyvolá kódem operace $01. Data na adresové sběrnici jsou v případě speciálního cyklu bezvýznamná. Speciální cyklu zajistí, že jsou data rozeslána každému zařízení. Jde o tzv. broadcast.


2. Zjištění připojených PCI adaptérů:


http://www.pcidatabase.com

výpis připojených PCI adaptérů – dumppci.txt


Dev. #

Vendor ID

Device ID

Vendor Name

Chip Description

Class Code

Devsel Timing

0

8086

7190

Intel Corporation

440BX/ZX AGPset Host Bridge

06,00,00

1

1

8086

7191

Intel Corporation

440BX/ZX AGPset PCI-to-PCI bridge

06,04,00

1

2

-

-

-

-

-

-

3

-

-

-

-

-

-

4

-

-

-

-

-

-

5

-

-

-

-

-

-

6

-

-

-

-

-

-

7

8086

7110

Intel Corporation

PIIX4/4E/4M ISA Bridge

06,01,00

1

8

-

-

-

-

-

-

9

-

-

-

-

-

-

10

-

-

-

-

-

-

11

-

-

-

-

-

-

12

-

-

-

-

-

-

13

-

-

-

-

-

-

14

-

-

-

-

-

-

15

-

-

-

-

-

-

16

5333

8a01

S3 Graphics Co., Ltd.

Virge /DX & /GX

03,00,00

1

17

-

-

-

-

-

-

18

10b7

9055

3Com Corporation

Fast Etherlink 10/100 PCI TX NIC

02,00,00

1

19

-

-

-

-

-

-

20

-

-

-

-

-

-


Závěr:

Při tomto měření jsme si vyzkoušeli práci s PCI sběrnicí. Vyzkoušeli jsme si různé druhy zápisu a čtení dat z PCI sběrnice. Jejich průběhy jsou zobrazeny výše. Průběhy vypadají podle teoretických předpokladů, pouze čtení z konfiguračního registru se nám (z neznámých důvodů) nepodařilo.

Také jsme zjistili výrobce a typy připojených zařízení.