Vlákno názorů k článku Podrobnější popis sběrnice PCI od Medvěd - Pořád mně není úplně jasné, jak na PCI...

  • Článek je starý, nové názory již nelze přidávat.
  • 16. 10. 2008 11:14

    Medvěd (neregistrovaný)
    Pořád mně není úplně jasné, jak na PCI sběrnici proběhne taková typická činnost jako třeba čtení a zápis do portu, které procesor realizuje pomocí instrukcí IN a OUT.
    Představme si, že máme PCI kartu - třeba adaptér pro paralelní port, jaké se ještě používají na tiskárnách. Kartu dáme do slotu, pustíme počítač a paralelní port je tam vidět na nějakých adresách portů, normálně s tím pracujeme pomocí IN a OUT, jakoby ty registry byly připojeny přímo k lokální sběrnici procesoru. Kdo toto zařídí ? BIOS nějak ve spolupráci s chipsetem základní desky vyčte z karty na jakých adresách mají být ty porty/registry vidět ? A chipset pak podle toho nějak na lokální sběrnici emuluje pro procesor existenci těch portů ? Jak tohle vlastně funguje ?
  • 16. 10. 2008 12:02

    anonymní
    Podle meho nazoru je to podobne jako pri ISA sbernici. Pri zapnuti PC BIOS nebo OS nakonfiguruje PCI kartu tak ze jeji adresny dekoder bude reagovat na vybranou hodnotu ktera se objevi na zbernici. Pro tohle je na karte EEPROM kde je ulozena default PCI konfigurace, kterou BIOS a OS precte.
    Potom zapis/cteni probiha zhruba nasledovne: na sbernici se objevi adresa, jestli existuje karta ktera spada do nastaveneho adresniho prostoru tak se provede cteni/zapis. Karta muze mit namapomavanou interni pamet a/nebo HW registry nebo do pametoveho prostoru v PC ve dvou modech: v adresnim a v registrovem modu, v prvnim pripade se do karty zapisuji data pres instrukci mov, etc a v druhem pripade pres instrukce procesoru in a out.
  • 16. 10. 2008 13:21

    Medvěd (neregistrovaný)
    Nojo, ale PCI je prece od adresni sbernice procesoru oddelena (!!) Karta, pripojena k PCI prece nemuze detekovat spravnou adresu, ktera se objevi na adresni sbernici procesoru. To by musel nejak delat chipset, ve kterem je zaroven i nejaky "radic PCI" ~ bridge. Chipset by detekoval na sbernici procesoru spravnou adresu a pak by nalezite na PCI vygeneroval cykly pro presun dat - jenze to uz je neco docela jineho nez na sbernici procesoru.
    A prave toto me zajima - jak presne to funguje ?
    Na ISA sbernici je to predstavitelne docela dobre - ta je totiz ke sbernici procesoru mnohem blize.
  • 16. 10. 2008 18:43

    atarist (neregistrovaný)
    Podle me to prave takto funguje, ovsem s tim rozdilem, ze spravna karta je dopredu vybrana svoji pozici v PCI slotu. Prime mapovani instrukci IN a OUT procesoru je tak rozlozeno na dve casti - cesta od mikroprocesoru k north bridge a nasledne cesta od north bridge k PCI karte.

    Mimochodem, dnes je ISA prave dal od procesoru nez byla v dobach 88/86/286/386, v podstate je cela emulovana v south bridgi.
  • 16. 10. 2008 19:05

    anonymní
    Kazda karta ma BAR registry ktere nakonfiguruje OS. Tyhle BAR registry se prave pouzivaji k urceni toho, jake fyzicke I/O porty a memory regiony bude karta pouzivat. Pak je tam jeste PCI configuration space jestli si dobre pamatuji, s fixnimi adresami, ktere se prave pouziva pro zjisteni pevne danych informaci o PCI karte (a taky jake prostredky potrebuje priradit)
  • 16. 10. 2008 22:12

    Medvěd (neregistrovaný)
    Pochopitelně. Měl jsem na mysli ISA v její ryzí podobě. Mimochodem se takto vyskytovala i na základních deskách s 486 - ano, zpočátku se desky pro 486 dělaly pouze s ISA sběrnicí.
  • 16. 10. 2008 19:31

    Pavel Tišnovský
    Zlatý podporovatel
    Pokusím se to popsat podrobněji:

    Každá PCI karta má přístupné PCI konfigurační registry. Jedním z těchto registrů je i PCI command register neboli PCICMD, v něm se dá nastavit, zda má karta reagovat (a správně dekódovat) paměťové adresy a adresy IO portů (konfigurace jsou nezávislé, možné jsou všechny čtyři kombinace).

    Dále jsou zde umístěny v článku popsané registry Base Address Registers neboli BADR (BADR0-BADR5). V těchto registrech jsou po resetu karty umístěny požadované rozsahy adres, například grafická karta bude požadovat dejme tomu v BADR0 rozsah 16 MB. Kromě toho je v nultém bitu flag, zda se jedná o paměťový region nebo o I/O region. To znamená, že nějaká karta může mít například tři paměťové regiony a tři regiony I/O. Kromě toho je prvním bitem nastaveno, zda se má region mapovat pod 1 MB či ne - opět se u grafických karet minimálně jeden region mapuje pod 1 MB do rozsahu a0000-b0000, tj. tam kde očekává video RAM jak BIOS, tak i DOSové programy.

    Takže typicky se třeba pro paralelní port na PCI kartě vytvoří I/O region mapovaný pod 1 MB.
  • 16. 10. 2008 19:36

    Pavel Tišnovský
    Zlatý podporovatel
    ještě pokračujeme:

    Jak se provádí vlastní adresování?

    Na PCI sběrnici neexistují signály typu memory-read, memory-write, IO-read, IO-write apod. Vše se místo toho - jak je u universálních sběrnic zvykem - řeší příkazy, které jsou posílány po vodičích C/BE0 až C/BE3. Díky tomu je možné rozeznat 16 příkazů, mezi jinými i:

    I/O READ
    I/O WRITE
    Memory READ
    Memory WRITE
    Configuration Read
    atd.

    Nás zajímají I/O READ a I/O WRITE. Právě ty slouží k adresování I/O portů. O překlad mezi instrukcí IN a OUT mikroprocesoru a vysláním nějakého příkazu na PCI kartu, se musí postarat north bridge. Ten je z jedné strany připojený na mikroprocesor a zdetekuje vykonávání příslušné instrukce (hlídá si adresovací "nožičky" :-) a provede překlad.
  • 16. 10. 2008 22:10

    Medvěd (neregistrovaný)
    Díky. Docela mě potěšilo, že jsem nebyl ve svých úvahách příliš daleko od pravdy. Už léta jsem občas přemýšlel, jak to vlastně je a že instrukce IN a OUT musí vlastně konvertovat chipset (north bridge).