Altera Nios Az első SOPC típusú rendszer
Mi is az az SoPC rendszer?
Az SoPC meghatározó elemei A paraméterezhető CPU egység A belső kommunikációs kapcsolatok és ezek topológiája A rendelkezésre álló paraméterezhető könyvtári elemek A felhasználói kiegészítések és bővítések Fejlesztői támogatás szintje
Altera (első) Nios CPU Jellemzők –Általános célú CPU egység, kifejezetten FPGA alapú SoPC alkalmazásokra optimalizálva –Fix 16 bit széles utasításkészlet, amivel 16 és 32 bit széles adatstruktúrák (adatbusz, címbusz, belső regiszterek, ALU) építhetők fel –Pipe-line utasításvégrehajtás, szétválasztott program és adatmemória kezelési lehetőség (módosított Harvard architektúra)
Utasításkészlet Alapvető cél: A C ill. C++ nyelven írt alkalmazások támogatása, az utasításkészlet kialakításánál ez a legfontosabb szempont volt. Szokásos aritmetikai és logikai utasítások, kiegészítve bit és byte műveletekkel, adatmozgató és vezérlő utasításokkal Néhány feltételesen végrehajtott utasítás (elágazások kiváltására, pl. túlcsordulás) Flexibilis utasításkészlet bővítési lehetőség
Regiszterkészlet A regiszter készlet meghatározó a CPU egységek hatékonysága, használhatósága szempontjából Az (első) Nios regiszter architektúrája egészen speciális (szélesség 16 vagy 32 bit): –Nagy méretű (konfigurálható 128 – 512) amiből egyszerre egy 32 méretű ablak látszik –néhány speciális vezérlő regiszter, < 8 –Programszámláló PC regiszter –K utasítás konstans prefix regiszter
Regiszter használat A teljes regiszterkészlet mérete: –128, 256, 512 darab 16/32 bites regiszter –Biztosan dual port blokk RAM megvalósítás –Egyszerre egy 32 méretű ablak látszik, részbeni átfedéssel –Az ablakváltás általában szubrutin hívás, megszakítás kezelés stb. miatt szükséges –Ekkor általában paraméterátadás is kell Megoldható regisztereken keresztül
Átlapolt regiszter ablakok Az ablakváltás csak 24-et lép, így az előző ablak felső 8 regisztere a következő alsó 8 regisztere lesz. Egyúttal használati konvenciót is rögzít: Regiszter használataRegiszter elnevezése INPUT regiszterR25-R32 vagy I0-I7 LOCAL regiszterR16-R24 vagy L0-L7 OUTPUT regiszterR8-R15 vagy O0-O7 GLOBAL regiszterR0-R7 vagy G0-G7
Regiszter térkép 128 regiszter esetén -> 7 ablak (Nincs átfordulás) INPUT LOCAL OUTPUT GLOBAL
Aktív regiszterek használata Általános konvenció R31 (I7) – elmentett visszatérési cím R30 (I6) – frame mutató R19-R16 (L3-L0) lokális pointerek R15 (O7) – aktuális visszatérési cím R14 (O6) – Stack pointer R7-R0 (G7-G0) – Globális regiszterek Láthatóan O7 -> I7 és O6 -> I6
Speciális regiszterek PC programszámláló –Típustól függően 16 vagy 32 bites –PC<=PC+2 mindegyikben, utasítás 16 bites –Programmemória címtartomány 64k, ill. 4G K konstans regiszter: 11 bites prefix érték a következő művelethez + 5 bit a kódból
Kivételkezelés, megszakítások 64 méretű vektoros megszakítás rendszer –A megszakítás támogatás tiltható A megszakítások forrása lehet: –Külső hardver esemény –Belső esemény –Programban előírt szoftver megszakítás A processzor a külső eszközöktől a kéréssel egyidejűleg egy 6 bites értéket is vár
Hardver utasítás kiegészítések Két fajta utasításkészlet bővítési lehetőség –Szabványos kiegészítések (tipikusan a szorzási művelet HW megvalósítására) –Felhasználó által kiválasztott (és felépített) funkciók HW támogatása
Szorzások támogatása A szorzás mindig drága művelet, ha HW szemmel nézzük ( kivéve, ha van dedikált szorzó áramkör…) Példa a szorzási opciókra: TípusHWVégr. Idő 16x16 Végr. Idő 32x32 Nincs Iteratív Teljes
Felhasználói utasításkiegészítések Transzparens módon, a CPU ALU egységével párhuzamosan (operandus 2 vagy 1 regiszter) C A P L U E F X U T N
Utasításkészlet kiegészítés Felhasználói utasítások (extra HW!) USER0RA < = RA user_op RB RR típus USERx RA < = RA user_op G0 Rw típus (x=1,2,3,4) Lehet egy vagy több órajel ciklusú, használható a PFX konstans előtét
Címzési módok 5/16 bit közvetlen (utasításkódból) Regiszter indirekt (bájt/szó) Regiszter indirekt ofszettel (bájt/szó) Olvasás mindig szavas, csak esetleg speciális utasítással ebből 1 bájt tárolódik (0-val vagy előjellel kiegészítve) Írás lehet bájtos, de ezt már a memória vezérlő feladata elrendezni
Nios blokk diagram
Nios II Teljes szakítás a korábbi megoldással –A konfigurálható CPU előnye –A konfigurálható CPU hátránya „Hagyományos” (nem különcködő) RISC architektúra (32x32 regtömb 2RD1WR) 32 bites RISC processzor utasítás + adat
Általános jellemzők 32 regiszter 32 IT forrás 32 x 32 bites szorzás, 32 bites osztás Támogatás 64 ill. 128 bites szorzáshoz Lebegőpontos műveletek lehetősége –Normál pontosság –Többlépéses shift művelet (barrelshifter) Bővített periféria készlet
Fejlesztési támogatás GNU C/C++ + Eclipse IDE Teljes kiépítettségű debug környezet Integrált Altera SignalTap logikai analizátor Kompatibilis utasításkészletek az eltérő kiépítettségű NIOS II verziók között Max 250 DMIPS teljesítmény
Tipikus Nios II rendszerfelépítés
SOPC rendszerkialakítás Minden jellemző a tervező kezében Komponensek:ingyen + pénzért + tervezés Konfigurálható perifériák –Aktuális igények szerinti modulválasztás –Aktuális igények szerinti modul paraméterezés –Aktuális igények szerinti egyedi modul tervezés –Aktuális igények szerinti rendszer címkialakítás Automatikus rendszergenerálás
Nios II alapvető jellemzők 3 eltérő tulajdonságú verzió –NiosII/e – „gazdaságos”, éppen a szükséges minimum komponensek –NiosII/s – „szokásos”, átlagos tulajdonságok, jó paraméterekkel –NiosII/f – „gyors”, minden konfigurációs opció, sok hardveres kiegészítés, nagy teljesítmény
Nios II konfi- gurá- ciós opciók
„MIPS” szerű processzorok Általános architektúra, kiegészítve a pipe-line regiszter fokozatokkal Az órajel sebesség megnő
Memória kialakítások Valódi Harvard felépítés Utasításmemória hozzáférési lehetőségek –Utasítás gyorsítómemória (512bájt – 64Kbájt) –Gyors többszörös hozzáférés (xDRAM) –Szorosan csatolt memória modulok (max. 4) Adatmemória hozzáférési lehetőségek –Adat gyorsítómemória (512bájt – 64Kbájt) –Gyors többszörös hozzáférés (xDRAM) –Szorosan csatolt memória modulok (max. 4)
Széles körű debug lehe- tősé- gek
Részletesen 1. Semmi 2. JTAG kapcsolat, letöltés, SW töréspont 3. Előző + HW töréspont Flash memóriára, adatra, címre, írásra, olvasásra, külső logikára, trigger fogadás/küldés kívülről/re 4. Nyomkövető (cím+adat+RW) memória (belső/külső), valósidejű mintavételezéssel Ennek persze növekvő erőforrásigénye van!
Debug opciók költsége
Nios II belső jellemzők
Utasításkészlet Szokásos ALU műveletek –ADD, SUB, MUL, DIV előjeles és előjel nélküli –Összehasonlítások, minden típusra/adatra –AND, OR, XOR, NOR –Shift/Rotate 0-31 pozícióra, normál/aritmetikai Teljes verzió – csökkentett verziók –Nem létező utasítások – kivételkezeléssel Felhasználói utasítások, mint korábban
Lebegőpontos utasítások IEEE előírás szerint ADD, SUB, MUL, DIV Egyszeres pontosság, 32 bit Kivételkezelés Kerekítés Normalizálás NaN
Hardver interfészek
Interfész opciók Memória hozzáférés –Független utasítás és adatmemória portok –Utasítás port: mindig 32 bit memória hozzáférés –Adatoldalon: 32/16/8 bites memória/periféria műveletek a LD/ST utasítások végrehajtásakor Lehetséges közösített memória használat is! Egységes memória, periféria kezelés –Memóriába ágyazott I/O
Gyorsító memória opciók Cache memória –Konfigurálható méret, független program/adat –Menedzsment szoftverrel, speciális utasítások Használat indokai: –Van elég belső memória –Program/adat mérete miatt külső memóriában –A kritikus kód/adat elfér a cache-ben –Adatcache kikerülési opciók: LDIO/STIO, BIT31 –TCM használat elemzése érdemes!!!
Szorosan csatolt memória (TCM) Garantált gyors elérésű tároló –Független porton (1-4), gyors belső memória –Direkt címzés, nincs betöltés, ürítés, stb. Tipikus alkalmazás –Programnál: IT kiszolgáló rutin, gyors végrehajtású kisebb rutinok (DSP) –Adatoknál: átmeneti pufferek,
Nios alkalmazások 1, 2, n darab processzor (természetesen, ha van rá erőforrás Konfigurációk: –1 CPU + általános perifériák –1 CPU + speciális funkcionális egységek –n CPU + kommunikációs csatornák NIOS FUN1 FUN3FUN2 NIOS
Integrált SoPC rendszer Normál mikroprocesszoros rendszer, csak programozható FPGA-n egyetlen áramkörön megvalósítva A Nios egy jó teljesítményű processzor, akár 16, akár 32 bites verzióban Kiépített általános perifériatámogatás, konfigurálható paraméterekkel (UART, TIMER, PIO, MEMIF, stb.) PBM Periféria Busz Modul
Periféria Busz Modul Általános célú periféria interfész generátor Megvalósított funkciók: –Cím dekódolás –Adatbemeneti multiplexer (szétválasztott ki/be) –Várakozás kérés, szinkronizáció –Buszméret (szó/félszó/bájt) –Megszakítás generálás Speciális funkciók, alkalmazás függő
Általános elrendezés Egységes rendszergenerálás NIOS ADR DMX WTG W-B IRQ PERIFÉRIA UART TIMER PIO SPI 10/100
Egy egyszerű példa Minimális külső és belső egységek Külső és belső buszrendszer PBMPBM CPUCPU IRQIRQ TIMER UART SRAM FLASH SERIAL INPUT
A Nios perifériakészlete A rendszer alapvető kommunikációs interfésze az AVALON busz Ez egy párhuzamos áramkörön belüli, konfigurálható kommunikációs interfész Részleteket később megbeszéljük, a többi belső busszal együtt (AMBA, CoreConnect) Az egyes eszközökhöz a szükséges jelek csoportját a SoPC Builder szoftver határozza meg és automatikusan generálja
Az Avalon legfontosabb jellemzői Szétválasztott adat ki és bemeneti busz –Nincs Hi-Z jel a buszáramkörben Megkülönböztet Master és Slave interfészt Szinkron busz, optimális esetben az adatátvitel 1 órajel ciklus Adatméret dinamikusan előírható Adatcsomag átvitel lehetősége, pl. DMA Logikailag egységes busz modul
Példa a busz modul kialakítására
Nios alkalmazások (2) 1, 2, n darab processzor (természetesen, ha van rá erőforrás Konfigurációk: –1 CPU + általános perifériák –1 CPU + speciális funkcionális egységek –n CPU + kommunikációs csatornák NIOS FUN1 FUN3FUN2 NIOS
Speciális adatfeldolgozó egységek 1 CPU + speciális funkcionális egységek –A feladat főképp adatfeldolgozó jellegű A processzort inkább az adminisztráció ill. magasabb szintű vezérlés indokolja –Események naplózása, riportok készítése –Felhasználói interfész, alkalmazás fejlesztési, hibakeresési kapcsolat –Egységek inicializálása, szinkronizálása, általános felügyelet
Speciális adatfeldolgozó egységek CPU minimális kiépítettség (ha nem kap más, valódi adatfeldolgozási szerepet is) A fő jellemző: –Egyszerű párhuzamos, regiszter interfész a különböző egységekhez (konfiguráció, parancs, státusz) –Egyszerű soros interfész a felhasználó felé –A 16 bites verzió bőven elegendő
Nios alkalmazások (3) 1, 2, n darab processzor (természetesen, ha van rá erőforrás Konfigurációk: –1 CPU + általános perifériák –1 CPU + speciális funkcionális egységek –n CPU + kommunikációs csatornák NIOS FUN1 FUN3FUN2 NIOS
Multi-processzoros rendszerek Tetszőleges elrendezésű többprocesszoros rendszer Az egységek között tetszőleges formájú kommunikáció (busz, port, memória) SIMD, MIMD, bármilyen keveréke Az elképzelés jó, a technológia biztosítja a lehetőséget, de a nagy kérdés: Hogyan tudjuk valóban kiaknázni? (Ez a dia 2002-ben készült…)
Kommunikációs absztrakció Kapcsolat a szoftver (programozói modell) és a hardver (fizikai megvalósítás) között A legfontosabb problémák a következők: –A közös (megosztott) adatok elnevezése –Az adatokon végezhető/elvégzendő műveletek –Milyen sorrendben és ki férhet az adatokhoz? –Esetleges többszörös másolat esetén frissítés, koherencia, hol található a legfrissebb adat?
Kommunikáció költsége Késleltetés: –Mennyi időbe telik az (első/egyetlen) átvitel? Sávszélesség: –Mennyi adat továbbítható egységnyi idő alatt? Szinkronizáció: –Hogyan (milyen ütemben) keletkeznek az adatok és milyen ütemben használják fel őket?
Osztott memória Az összes processzor hozzáfér a memória egy részéhez
Osztott memória jellemzői Bármelyik processzor közvetlenül hivatkozhat a közös területre A kommunikáció a memória műveleteken keresztül (load/store) valósul meg Az adat elhelyezése a programozó számára átlátható A teljesítmény arányos lehet a processzorok számával Hogyan skálázható (2..3 – 100? CPU) Széles alkalmazási terület
Előnyök / hátrányok Előnyök –Egyszerű programozás –Globális adat – lokális cache-ben –Viszonylag egyszerű processzor struktúra Hátrányok –Skálázhatóság: sok processzor, több ütközés –Hardver költség a koherencia figyelésre
Üzenet átadásos rendszer Explicit kommunikáció a processzorok között üzenetek küldése útján Ezek az üzenetek (és a programozó) biztosítják az adatok koherenciáját Főbb jellemzők: –Egy teljes processzor ill. rendszer egyetlen építőelem („Transputer” modell, 1985) –Közvetlen hozzáférés csak lokális adatokhoz –Üzenetek: send / receive –A kommunikáció I/O szinten jelenik meg (nem memória)
Programozói modell SEND / RECEIVE funkciók az adatokra, a program szinkronizáció is ezeken keresztül megvalósítható A memória szegmentált, nincs közös rész Az adatkoherenciát program valósítja meg Az üzenet átadáson keresztüli (párhuzamos) programozás nehezebb, mint az egyszerű szekvenciális programozás
Hardver megvalósítás Az építőelem egy komplett rendszer (CPU + teljes IO) (akár egy munkaállomás is lehet) –Nincs speciális hardver, egyforma processzorok –Nagyon fontos a kapcsolatok topológiája, a processzorok egymáshoz kapcsolódási mintája –Lehetőség: intelligens processzor IO interfész vagy –Adatirányító csomópontok (router) az áramkörön belüli kommunikációs hálózatban –Network on Chip (NoC)
Topológiai megoldások Párhuzamos konfiguráció
Topológiai megoldások Gyűrű és kocka topológiák
Előnyök / hátrányok Előnyök: –Könnyebb a rendszerfelépítés, mint az osztott memóriával –Topológiától függően jól skálázható –A programozói modell hardver független –Az adat koherencia a felhasználó felelőssége (nem rendszertechnikai probléma)
A NIOS buszrendszere Az AVALON busz module –Fő alkalmazási szempontok: SoC busz, áramkörön belüli kapcsolatokra Egyszerűség Optimalizált (minimális) erőforrásigény Szinkron működés Kicsit több mint buszspecifikáció –Magába foglal rendszerelemeket is –Arbitráció, külső kapcsolatok
Tulajdonságok 8/16/32 bites átvitelek Back-to-back átvitel, azaz minden ciklus után azonnal következhet a következő Nagykésleltetésű perifériák kezelése Burst és adatfolyam támogatás Multi-master üzemmód, Slave oldali arbitráció
Többszörös hozzáférési kérelem esetén a slave egységben dől el a prioritás –Előnyök: A multi-master környezetben a master által indított hozzáférések nem zavarják egymást (annyira) Az arbitráció nem a buszért, hanem a slave-ért folyik Az arbitrációs interfész nem része a mastereknek, (a slaveknek sem) a buszon történik, de elosztottan
Általános jellemzők Címzési tartomány: akár 4GB (32 bit) Szinkron interfész, nincs hand-shake mechanizmus Független A-D-C vonalak (nincs cím multiplexálás -> egyszerűbb perifériák) Központi címdekódolás, független CS jelek Dinamikus buszméret kezelés (ez egy kicsit komplikált lett!)
Busz topológia kialakítása
A buszmodul alapvető funkciói Minden apró kiegészítő logikát a tervezők a buszmodulba vontak össze, ezek nem kell, hogy a periféria részét képezzék –Adat vonalak multiplexelése, a master-slave kapcsolat felépítése –Címdekódolás –Várakozáskérés –Dinamikus adatméret kezelése –Megszakítás prioritások kezelése –Késleltetett átvitelek és adatfolyamok kezelése
Perifériák Alapeszközök (áttekintettük) –UART, Timer, PIO, SPI, DMA Komplex eszközök: –SDRAM vezérlő, Ethernet MAC, busz híd PCI vagy más buszhoz Dedikált felhasználói logikák, amik a buszhoz kapcsolódnak –Követik a buszinterfész előírásokat
Buszon betöltött szerep A periféria lehet Master vagy Slave Megkülönböztetünk Master ill. Slave portot –Master port: Aktív, kezdeményez, átvitelt vezérli –Slave port: Passzív, elfogad, az átvitelben részt vesz Master periféria –1..n Master port és 1..n Slave port Slave periféria –1(..n) Slave port
Rendszer konfiguráció A Master-Slave kapcsolatok az SoPC rendszer tervező szoftverben konfigurálhatók –Márix felépítésű táblázat, az egységek kapcsolatai kijelölhetők. –Paraméterek (címtartomány, hozzáférés, stb.) –Perifériák tulajdonságai –Portok tulajdonságai (read, write) –Arbitrációs mechanizmus
Paraméterek beállítása
Busz átvitelek (1) A buszciklusok szinkron működésűek, A buszjelek viszont nem feltétlenül regiszteres meghajtásúak (pl. kiválasztójelek, stb.) Az időzítés így alapvetően egyszerűen ellenőrizhető (rendszer órajel felfutó éle körül) Nincs visszajelző (hand-shake) mechanizmus, a várakozáskérést a busz modul kezeli Az egységek a busszal kommunikálnak és nem egymással !!!
Busz átvitelek (2) Master és Slave átvitel különböző, a jelek sem ugyanazok (nézőpont kérdése) Az átvitel azonban mindig egy Master- Slave pár között történik A Master kezdeményez, ennek hatására a Slave oldalon történik valami Kissé komplikált, de a felhasználó általában a Slave oldalt kell ismerje
Irási ciklusok Olvasás/írás hasonló, csak írásnál a vezérlőjel write_n és kifelé megy az adat A byte engedélyező jelek választják ki az írandó byte-okat. –(Olvasás esetén használatuk közömbös, a teljes adategység a buszra kerül) –Lehetőségek: teljes szó, felső/alsó 16 bit, ill. ezek alsó byte-ja (0. vagy 2. byte a 32 bitben) A write_n ill. chipselect jelek élei NEM használhatók vezérlőjelként!!!! –-> Szigorúan órajel vezérelt SZINKRON írás van!!
Egyszerű írás Master oldalon
Egyszerű írás Slave oldalon
Következtetések A busz modul koncepció jó –Egységes felület, egységes kezelés –Master, Slave portok jól definiálhatóak –Erőforrás megosztás, központi vezérlés, függetlenül a szinte pont-pont szerű topológiától –Időzítés adatok ellenőrzése gondot jelenthet –Az adatfolyam vezérlés nem teljesen kiforrott End-of-packet jel szerepe nem teljesen specifikált