Table of Contents

8. I/O prostor mapovaný do paměti a PCI sběrnice

Osnova cvičení

  1. Zápis na I/O bránu
  2. Čtení z I/O brány
  3. Zápis řetězce na sériový port
  4. Volání služby operačního systému
  5. Zpracování přerušení
  6. Sběrnice, základní pojmy
  7. Obvodové řešení V/V adaptéru
  8. Sběrnice PCI

Co bych si měl na cvičení zopakovat/připravit

  1. MipsIt simulátor
  2. Rozumět programům z předchozích cvičení
  3. Rozumět přednáškám (I/O podsystém I a II)
  4. Základy logických systémů - hradla, klopné obvody, apod.

Náplň cvičení

Cílem je z programu přistupovat na periferie procesorového zařízení.

Úkoly

S problematikou se seznamte nejdříve v simulátoru QtMips. Jednoduchá vstupně výstupní periferie je mapovaná od adresy 0xffffc100.

Zápis hodnoty na výstupní port

  1. Napište program, který zobrazí 32-bitové číslo z registru na výstupní periferii - registr SPILED_REG_LED_LINE. Jedná se o řádku 32 LED diod na desce MZ_APO (fyzická adresa 0x43c40004) nebo ekvivalentním výstupu v simulátoru QtMips (přímo přístupná adresa 0xffffc104).
  2. Rozšiřte program tak, aby v nekonečné smyčce stále dokola zobrazoval na výstupu sekvenci následujících čísel, dále prodlužte efekt na celých 32 bitů.

pole:
.word  1, 2, 4, 8, 16, 32, 65, 48, 66, 51, 54, 65, 80, 79, 1, 2, 3

lui $t0, 0xffff
ori $t0, $t0, 0xc100

addi $t1, $0, 5
addi $t2, $0, 30
addi $t3, $0, 1

loop:
  sw $t1, 4($t0)
  sll $t1, $t1, 1
  addi $t2, $t2, -1
  bne $t2, $0, loop
  nop
  break

lui $t0, 0xffff
ori $t0, $t0, 0xc000

addi $t1, $0, 48
addi $t6, $0, 1234
addi $t2, $0, 10
loop:
  lw $t3, 0x08($t0)
  andi $t3, $t3, 1
  beq  $t3, $0, loop  
  nop 
  sw $t1, 0x0c($t0)
  addi $t1, $t1, 1
  addi $t2, $t2, -1
  bne $t2, $0, loop
  nop
  break
  

Čtení ze vstupního portu

  1. Napište program, který do registru načte 32-bitovou hodnotu ze vstupní periferie (trojice otočných voličů). Na desce MZ_APO je stav voličů k přečtení z fyzické adresy 0x43c40024). V simulátoru QtMips je nastavení voličů dostupné na adrese 0xffffc124.
  2. Rozšiřte program tak, že ze vstupu přečte číslo a na výstup zobrazí hodnotu z odpovídající pozice ve výše uvedeném poli. Pokud je zadáno číslo, překračující rozsah pole, zobrazí program na výstupu samé jedničky (rozsvítí všechny LED).

Čtení a zápis z programu v jazyce C

Kompletní popis periferií implementovaných v simulátoru QtMips naleznete na stránce třetího cvičení v odstavci periferie mapované do paměťového adresního prostoru případně přímo v souboru README.md přímo z projektu. Součástí třetího cvičení je i ukázka překladu z jazyka C do assembleru s rozborem generovaného kódu. Nalézá se tam také archiv s programem. Program naleznete in v adresáři /opt/apo/qtmips_binrep. Program se shodnou funkcí pro desku MZ_APO naleznete v adresáři /opt/apo/binrep/mzapo_binrep. Porovnání analýzy kódu zkompilovaného pro architekturu ARM naleznete na konci dnešního cvičení.

Zápis řetězce na sériový port

Volání služby operačního systému

Grafický výstup v emulátoru QtMips

Zpracování přerušení

Sběrnice a mapování periferií v PC

Základní pojmy

  1. Sběrnice vs. dvoubodový spoj
    1. Co mají tyto technické prostředky společného a v čem se liší?
    2. Uveďte příklady dvoubodového spoje.
    3. Uveďte příklady sběrnice.
  2. V/V adaptér
    1. Z jakých základních bloků se skládá obecný V/V adaptér na sběrnici? (nápověda: na sběrnici je takových adaptérů více, komunikace je obousměrná)
    2. Dokážete stručně popsat rozdíl v realizaci vstupní a výstupní brány?
  3. Adresace
    1. Vysvětlete pojmy individuální a skupinová adresace.
    2. Vysvětlete pojem dvouúrovňová adresace, k čemu se používá? Dokážete uvést příklad z praxe, kde se používá?
    3. Co je to relokovatlenost adaptéru a jak se realizuje?
    4. Co je to zrcadlení adresového prostoru? Kdy k němu dochází?

Obvodové řešení V/V adaptéru (pro zájemce)

Obvodové řešení V/V adaptéru již na PCI a modernějších sběrnicích není prakticky realizovatelné. Pro pochopení problematiky (před návrhem V/V adaptéru pro PCI) je však jednoduché obvodové řešení např. na sběrnici typu ISA vhodné.

Adresový dekodér:

Jednoduchý V/V adaptér:

  1. Navrhněte adresový dekodér. Máte 16b adresovou sběrnici, zařízení má 64 V/V registrů. Úkol: umístit registrové pole do V/V prostoru od adresy 0x1480, k dispozici je jeden obvod 74LS688.
  2. Diskutujte zrcadlení v tomto případě.
Příklad kompletního řešení

  1. Je tento adaptér relokovatelný?
  2. Na jaké adrese ve V/V prostoru bude přístupný?
  3. Dochází zde k zrcadlení?

Sběrnice PCI

  1. Pomocí programu lspci zobrazte PCI zařízení v počítači.
  2. Zobrazte podrobnosti o PCI zařízeních, adresy v paměti a V/V prostoru, které obsazují.
  3. Pomocí lspci -xxx zobrazte konfigurační prostor PCI a pro vybraná zařízení určete pomocí tohoto výpisu:
    • typ zařízení
    • výrobce zařízení
    • jaké adresy ve V/V prostoru obsazuje
    • jaké adresy v paměťovém prostoru obsazuje

Na přednáškách jste viděli příklad jednotlivých bloků adaptéru na PCI sběrnici, včetně řídicího konečného automatu. Rozšiřte tento návrh o možnost konfiguračního čtení a konfiguračního zápisu. (Časový diagram konfiguračního čtení:)

Odkazy