SysCVideo: fiktív grafikus kártya SystemC modulként, SDL alapú megjelenítéssel

Hasonló dokumentumok
LOGSYS LOGSYS LCD KIJELZŐ MODUL FELHASZNÁLÓI ÚTMUTATÓ november 8. Verzió

The modular mitmót system. DPY kijelző kártya C API

Perifériák hozzáadása a rendszerhez

A vezérlő alkalmas 1x16, 2x16, 2x20, 4x20 karakteres kijelzők meghajtására. Az 1. ábrán látható a modul bekötése.

Az interrupt Benesóczky Zoltán 2004

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

ELSŐ LÉPÉSEK A SZÁMÍTÓGÉPEK RODALMÁBA AMIT A SZÁMÍTÓGÉPEKRŐL TUDNI ÉRDEMES

BELÉPTETŐ RENDSZER TERVEZÉSE

2. Számítógépek működési elve. Bevezetés az informatikába. Vezérlés elve. Külső programvezérlés... Memória. Belső programvezérlés

Bevezetés az elektronikába

A mikroprocesszor felépítése és működése

Digitális technika (VIMIAA01) Laboratórium 9

MSP430 programozás Energia környezetben. LED mátrix vezérlése MAX7219 IC-vel

Digitális technika (VIMIAA01) Laboratórium 9

Digitális technika VIMIAA hét

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r

Budapesti Műszaki és Gazdaságtudományi Egyetem. A Verilog HDL II. Nagy Gergely. Elektronikus Eszközök Tanszéke (BME) szeptember 26.

Számítógép felépítése

MPLAB IDE - SIM - - Rövid ismertető a használathoz - Kincses Levente 3E22 89/ November 14. Szabadka

Programozási segédlet DS89C450 Fejlesztőpanelhez

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

A feladatokat önállóan, meg nem engedett segédeszközök használata nélkül oldottam meg. Olvasható aláírás:...minta VIZSGA...

XXI. Országos Ajtonyi István Irányítástechnikai Programozó Verseny

7.hét: A sorrendi hálózatok elemei II.

Bevezetés a számítástechnikába

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Számítógép architektúrák

Mikrorendszerek tervezése

SZORGALMI FELADAT. 17. Oktober

Periféria kezelési módszerek. programozott megszakításos DMA-s - közvetlen szoftver ütemezés - lekérdezéses ütemezés

_INVHU000_WriteReadParameter.cxf Frekvenciaváltók

Bevezetés a mikrovezérlők programozásába: A PM6025 (7 és 16 szegmenses) LCD kijelző vezérlése

Programozott soros szinkron adatátvitel

Pénzügyi algoritmusok

DKÜ ZRT. A Portál rendszer felületének általános bemutatása. Felhasználói útmutató. Támogatott böngészők. Felületek felépítése. Információs kártyák

A billentyűzet a legfontosabb adatbeviteli eszköz, mely szinte rögtön a számítógép bekapcsolása után,,életre kel. Segítségével az operációs rendszer

AC-MF1W. RFID kártyaolvasó és kódzár. Felhasználói leírás

A Memory Interface Generator (MIG) beállítása a Logsys Kintex-7 FPGA kártyához

A tervfeladat sorszáma: 1 A tervfeladat címe: ALU egység 8 regiszterrel és 8 utasítással

Mutatók és mutató-aritmetika C-ben március 19.

LOGSYS LOGSYS SPARTAN-3E FPGA KÁRTYA FELHASZNÁLÓI ÚTMUTATÓ szeptember 19. Verzió

Grafikus csővezeték és az OpenGL függvénykönyvtár

Mikrorendszerek tervezése

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

Informatika érettségi vizsga

Programozási nyelvek 6. előadás

A számítógép egységei

Digitális technika (VIMIAA02) Laboratórium 4

Mrend X Extra 3.0 b. - menetrendszerkesztő program leírása -

Programozás alapjai. 10. előadás

Digitális rendszerek. Mikroarchitektúra szintje

Bevezetés a programozásba I.

Digitális rendszerek. Digitális logika szintje

A/D és D/A konverterek vezérlése számítógéppel

JIM JM.3, JM.4 garázskapu mozgató szett CP.J3 vezérléssel

JIM garázskapu mozgató szett JIM. JM.3, JM.4 garázskapu mozgató szett CP.J3 vezérléssel

Karakteres LCD kijelző használata MiniRISC processzoron

18. Szövegszerkesztők

Digitális technika (VIMIAA02) Laboratórium 4

XXI. Országos Ajtonyi István Irányítástechnikai Programozó Verseny

elektronikus adattárolást memóriacím

A LOGSYS GUI. Fehér Béla Raikovich Tamás, Laczkó Péter BME MIT FPGA laboratórium

Bevezetés a mikrovezérlők programozásába: MAX6958: Hétszegmenses LED kijelző vezérlő

A számítógépek felépítése. A számítógép felépítése

A LOGSYS rendszer ismertetése

Digitális technika II. (vimia111) 5. gyakorlat: Tervezés adatstruktúra-vezérlés szétválasztással, vezérlőegység generációk

1. ábra: Perifériára való írás idődiagramja

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Pontfelhő létrehozás és használat Regard3D és CloudCompare nyílt forráskódú szoftverekkel. dr. Siki Zoltán

Felhasználói kézikönyv

Mesh generálás. IványiPéter

Útmutató EDC kézivezérlőhöz

Megnevezés Leírás Megjegyzés Irodai PC

6. óra Mi van a számítógépházban? A számítógép: elektronikus berendezés. Tárolja az adatokat, feldolgozza és az adatok ki és bevitelére is képes.

Az egér, a botkormány (joystick) és a nyomtató programozása DOS-ban

PLC Versenyfeladat. XIV. Országos Irányítástechnikai Programozó Verseny Budapest, március Összeállította az EvoPro Kft.

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Mikroprocesszor CPU. C Central Központi. P Processing Számító. U Unit Egység

MODULATOR Számítógépes program Commodore 64-re a párhuzamos rezgések összetételének tanulmányozására

TestLine - GINOP teszt Minta feladatsor

Digitális technika (VIMIAA01) Laboratórium 10

2. modul - Operációs rendszerek

Rendszerszintű tervezés: SystemC I.

Számításelmélet. Második előadás

prolan rcm Felhasználói kézikönyv

HTML é s wéblapféjlészté s

ELTE SAP Excellence Center Oktatóanyag 1

Balaton Marcell Balázs. Assembly jegyzet. Az Assembly egy alacsony szintű nyelv, mely a gépi kódú programozás egyszerűsítésére született.

I. C8051Fxxx mikrovezérlők hardverfelépítése, működése. II. C8051Fxxx mikrovezérlők programozása. III. Digitális perifériák

A számítógép. A számítógép olyan, mint az ószövetségi Isten számos szabály, és semmi könyörület! A számítógép olyan, mint az ószövetségi Isten

assume CS:Code, DS:Data, SS:Stack Start mov dl, 100 mov dh, 100 push dx Rajz

Nyíregyházi Egyetem Matematika és Informatika Intézete. Input/Output

Használati utasítás Prestigio Nobile PER3562. Alapvető műveletek

Operációs rendszerek. 3. gyakorlat. Jogosultságkezelés, linkelés, csővezeték UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

0 0 1 Dekódolás. Az órajel hatására a beolvasott utasítás kód tárolódik az IC regiszterben, valamint a PC értéke növekszik.

A számítógép fő részei

MSP430 programozás Energia környezetben. Kitekintés, további lehetőségek

Funkcionális áramkörök vizsgálata

Átírás:

SysCVideo: fiktív grafikus kártya SystemC modulként, SDL alapú megjelenítéssel Czirkos Zoltán 2015. augusztus 26. Kivonat Az ismertetett SystemC modul egy mikroprocesszoros rendszerhez illeszthető megjelenítő perifériaként működik szimulációban. 40 25-ös szöveges és ugyanekkora felbontású grafikus módot támogat (tetrishez, kukacos játékhoz ez épp elég.) Egy mikroprocesszoros rendszerhez könnyen illeszthető: 12 bites címbusszal, 8 bites adatbusszal rendelkezik, és a szokásos chip select, read enable, write enable és reset bemenetekkel. A megjelenítéshez az SDL grafikus könyvtárat használja. A modul a billentyűzet kezelését is segíti: az egyes billentyűk lenyomott állapota ellenőrizhető, illetve a gépelt szöveg pufferelődik, és karakterenként visszaolvasható. A modul használható önállóan is, függvényhívásokon keresztül. 1. Bevezetés A bemutatott SystemC modul arra való, hogy egy szimulált mikroprocesszoros rendszer perifériájaként működjön, lehetővé téve azt, hogy videókimenetet produkáljon a rendszer a szimuláció közben. Nem egy valós, létező perifériát utánoz, hanem kitalált vezérléssel rendelkezik. Szintetizálni nem lehet. A modul a következő képességekkel rendelkezik: 40 25-ös szöveges képernyő, amely 256 beépített karakterrel rendelkezik, és a VGA kártyákról ismert az IBM437-es kódlapot használja. Fehér alapon fekete betűkkel rajzol. A szöveges képernyő tartalma bájtonként elérhető, írható és olvasható. Kurzor is használható, amelynek pozíciója tetszőlegesen írható és olvasható. A szöveges képernyőre szöveg folytonosan, bájtonként írható. Ebben a módban a modul a kurzor pozícióját automatikusan változtatja, és görgeti is a képernyőt, ha az elérte annak alját. 1

1. ábra. Képernyőkép egy futó programról A 40 25-ös grafikus képernyő mérete megegyezik a szöveges képernyőével. A nagyított pixelek 256 különböző színnel rendelkezhetnek, amelyek a VGA palettát használják. A modul néhány paranccsal is rendelkezik (pl. képernyőtörlés.) A billentyűk lenyomva tartott állapota egyesével lekérdezhető. Rendelkezik továbbá egy karakter pufferrel, amelybe a lenyomott billentyűk kerülnek. Innen a lenyomott billentyűk kódjai egyesével visszaolvashatóak. A kártya a szimulációs idő szerinti 20 ms-onként, azaz szimulációs időbeli másodpercenként 50-szer rajzolja ki a képet. 2. A kártya illesztése A kártya vezérlő jelei a 2. ábrán láthatóak. Az egyes jelek magyarázata a következő: ADDRESS Címbusz, 12 bites bemenet. DATA Adatbusz, 8 bites ki- és bemenet. CSNEG Chip select bemenet, amellyel íráskor és olvasáskor a chip engedélyezhető. Aktív L szintű ez is. READNEG Read bemenet, olvasás engedélyezése. Ennek aktív szintjével a kártya regiszterei és memóriája olvashatók. WRITENEG Chip select bemenet, aktív L szinttel. Engedélyezésével a regiszterek és memória írhatóak. A kártya 12 bites címtartománnyal rendelkezik, azaz 4096 címezhető regisztere van. Illesztésére példát a 2. ábra mutat. 2

SysCVideo ADDRESS[0..11] DATA[0..7] CSNEG READNEG WRITENEG 2. ábra. A periféria vezérlő jelei CPU DATA[0..7] ADDRESS[0..15] A[12..15] SysCVideo DATA[0..7] ADDRESS[0..11] READNEG WRITENEG CSNEG READNEG WRITENEG 3. ábra. A periféria illesztése az 0xE000-0xEFFF címre. A SystemC programban a modult nem feltétlenül szükséges ilyen módon illeszteni; a regiszterir() és a regiszterolvas() metódusain keresztül közvetlenül is vezérelhető. 3

2.1. Reset jel A reset jel hatására szöveges módba vált az eszköz. Más inicializáció nem történik, és egyébként ez is elhagyható. Ha a jel aktív, akkor más jeleknek nincsen hatása. 2.2. Regiszter írása portműveletekkel Regiszterek írásához ezeket a lépéseket kell tenni: 1. A címbuszra kell tenni a kiválasztott regiszter vagy memóriaterület címét. 2. Engedélyezni, vagyis L szintbe kell állítani a chip select (CSNEG) jelet. (Ez általában a perifériaillesztés módja miatt automatikusan megtörténik.) 3. Az adatbuszra kell tenni az írandó értéket. 4. Engedélyezni kell a write enable (WRITENEG) jelet. A regiszterbe írás a WRITENEG jel lefutó élére történik meg. Ilyenkorra a CSNEG jelnek már aktívvá kell válnia, vagyis a két lefutás nem történhet időben egyszerre. Ezek után a vezérlőjelek visszavehetőek, és a buszokra tett értékekre már nincsen szükség. Például a 0x400 címre az 57 érték a következő SystemC kódrészlettel írható: address. write (0 x400 ) ; csneg. write ( 0 ) ; // chip s e l e c t = aktiv data. write ( 5 7 ) ; writeneg. write ( 0 ) ; // write enable aktiv writeneg. write ( 1 ) ; // write enable i n a k t i v csneg. write ( 1 ) ; 2.3. Regiszter olvasása portműveletekkel Az olvasás lépései: 1. A címbuszra kell tenni a kiválasztott regiszter vagy memóriaterület címét. 2. Engedélyezni kell a chip select (CSNEG) jelet. 3. Engedélyezni kell a read enable (READNEG) jelet, a CSNEG után nem nulla idővel. Amíg a READNEG jel aktív, a regiszterből kapott érték olvasható. Itt is figyelni kell arra, hogy a CSNEG és a READNEG aktívvá válása között kell valamekkora időnek eltelnie. Példaként a 0x400 cím olvasása: 4

address. write (0 x400 ) ; csneg. write ( 0 ) ; // chip s e l e c t = aktiv readneg. write ( 0 ) ; // read enable std : : cout << data. read ( ). to_uint ( ) ; // kepernyore readneg. write ( 1 ) ; csneg. write ( 1 ) ; 3. A kártya illesztés nélküli használata A modul használható önállóan is, szignálók bekötése nélkül. Ebben az esetben a SysCVideoStandalone osztályt kell használni, és a perifériaillesztési művelet teljes egészében elhagyható. A kommunikáció a regiszterir() és regiszterolvas() függvények segítségével működik: int sc_main ( int argc, char argv [ ] ) { SysCVideoStandalone scvs ; scvs. r e g i s z t e r i r ( SysCVideo : : ParancsRegCim, 0 ) ; / sz ö veges mód s e t / } /... / A SystemC-t ebben az esetben is a programhoz kell linkelni, de semmi teendő nincsen vele, mindent elintéz a SysCVideoStandalone osztály. 4. A regiszterek címei és használatuk A regiszterek címei a 4. táblázatban láthatóak. Használatuk: Parancs regiszter. Az ide írt bájtok parancsokként működnek, amelyeket a modul végrehajt. Ez a regiszter nem olvasható. Kurzor regiszterek. A kurzor pozíciója állítható be vagy olvasható vissza ezeken keresztül. Lehetséges értékeik X=0... 39 és Y=0... 24; a (0;0) pont a bal felső sarokban van. Karakter írás regiszter. Az ide írt karaktereket a modul az aktuális kurzorpozícióba írja, és a pozíciót balra, illetve szükség esetén lefelé növeli (mint egy C-s printf.) A képernyő aljára érve a görgetés is automatikusan történik. Az egyetlen értelmezett karakter a 10-es kódú sörtörés (C-ben \n ), amelynek hatására a modul új sort kezd. 5

cím név a kódban regiszter olv./írh. 0x000 ParancsRegCim parancs regiszter R 0x001 KurzorXRegCim kurzor x pozíció R/W 0x002 KurzorYRegCim kurzor y pozíció R/W 0x003 KarakterIrCim karakter írás regiszter W 0x004 BillentyuPufCim billentyűzet puffer LSB R 0x005 BillentyuPuf256Cim billentyűzet puffer MSB R 0x100-0x128 BillentyuMatrCim billentyű nyomvatartás R 0x400-0x7E8 SzovegesCim szöveges memória R/W 0x800-0xBE8 GrafikusCim grafikus memória R/W 1. táblázat. A regiszterek címei 4. ábra. Az IBM 437-es kódtábla és a VGA paletta 6

Billentyűzet puffer. Az LSB-t olvasva a billentyűzet pufferben eltárolt következő karaktert kapjuk meg. Ha nem volt lenyomott karakter, akkor 0-t ad a regiszter. A billentyűk kódolása az SDL keysym-eknek megfelelő ez Linux rendszereken általában az /usr/include/sdl/sdl_keysym.h fájlban megtalálható, de a legtöbb kód úgy van megválasztva, hogy az ASCII kódoláshoz illeszkedjen. Mivel a vezérlőgombok (nyilak stb.) kódolása 255 feletti értékeket is használ, azok nem férnek el egy bájtban: az LSB regiszter olvasása után a felső bitek az MSB regiszterbe kerülnek, és onnan olvashatóak ki. Billentyű nyomvatartás. A 40 bájtos memóriaterület bitjei az egyes billentyűk lenyomva tartott állapotát mutatják, ahol 1-es bit jelenti a nyomva tartott gombot. Egy adott gombhoz a KEYSYM/8. bájt KEYSYM%8. bitje tartozik, pl. az A billentyűhöz tartozó SDLK_a kódja 93, így a 11. bájt alulról 5. bitje tárolja a hozzá tartozó állapotot. Szöveges memória. A karakteres képernyőn tárolt jelek kódjai, a a 4. ábrának megfelelően. Grafikus memória. A grafikus memória pixeljei a 4. ábra színeinek megfelelően. 4.1. A parancsregiszter A 0x000 (ParancsRegCim) című regiszterbe írt bájtokkal különféle parancsok adhatók az eszköznek: 0 Váltás szöveges módba. 1 Váltás grafikus módba. 2 A szöveges képernyő törlése (szóközökkel feltöltése). 3 A kurzor bal felső sarokba állítása, a (0;0) koordinátába. 4 Grafikus képernyő törlése (feketével feltöltése). 4.2. Szöveg kiírása: helló világ Az alábbi, hosszabb példában egy szöveget írunk ki a képernyőre, a bal felső sarokba. A szöveg kiírása a karakter író regiszteren keresztül történik, így nincsen szükség a képernyő koordináták számítására. A regiszter minden egyes írásakor egy új karakter jelenik meg a képernyőn. csneg. write ( 0 ) ; // c r s r home parancs address. write ( SysCVideo : : ParancsRegCim ) ; data. write ( 3 ) ; 7

writeneg. write ( 0 ) ; writeneg. write ( 1 ) ; char const s t r =" Hello v i l a g! \ nez egy uj sor. " ; for ( int i =0; s t r [ i ]! = 0 ; ++ i ) { address. write ( SysCVideo : : KarakterIrCim ) ; data. write ( s t r [ i ] ) ; writeneg. write ( 0 ) ; writeneg. write ( 1 ) ; } 4.3. Regiszter írása és olvasása metódushívással A regisztereket nem feltétlenül kell portműveleteken keresztül elérni. Ha nem szükséges ilyen alacsony szintű modell, akkor a SyscVideo modul regiszterir() és regiszterolvas() tagfüggvényei közvetlenül is hívhatóak: SC_MODULE( SysCVideo ) { unsigned char r e g i s z t e r o l v a s ( unsigned address ) ; void r e g i s z t e r i r ( unsigned address, unsigned char data ) ; } ; SysCVideo video ( " video " ) ; video. r e g i s z t e r i r (0 x004, 0x12 ) ; Arra figyelni kell, hogy hasonlóan ahhoz, mint amikor portműveletekkel ér el adatot a processzor, ezek a metódushívások sem idempotensek. Több egymás utáni írás vagy olvasás más eredményt adhat, pl. a karaktert író vagy a billentyűt olvasó parancsregiszter esetén. 8