BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK
Digitális technika (VIMIAA01) Laboratórium 8 Fehér Béla Raikovich Tamás, Fejér Attila BME MIT BME-MIT Digit labor 7., 2014.08.18. (v1.0)
FPGA labor
Lab8: A MiniRISC processzor 1. A MiniRISC processzor felépítése – Adatstruktúra – Vezérlőegység 2. Fejlesztői környezet – A MiniRISC assembler – A MiniRISC IDE – Szoftverfejlesztés (példákkal)
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
1
FPGA labor
Lab8: A MiniRISC processzor • 8 bites vezérlőegység egyszerű alkalmazásokhoz • Jól illeszkedik a LOGSYS Spartan-3E FPGA kártya komplexitásához • Egyszerű felépítés, kis erőforrásigény • Harvard architektúra – 256 x 16 bites programmemória – 256 x 8 bites adatmemória • Egyszerű RISC jellegű utasításkészlet – Load/store architektúra – Műveletvégzés csak regisztereken – 16 x 8 bites belső regisztertömb BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
2
FPGA labor
Lab8: MiniRISC processzor • Egyszerű RISC jellegű utasításkészlet – Adatmozgató utasítások – Aritmetikai utasítások (+, -, összehasonlítás) – Logikai utasítások (AND, OR, XOR, bittesztelés) – Léptetési, forgatási és csere utasítások – Programvezérlési utasítások • Operandusok: két regiszter vagy regiszter és 8 bites konstans • Abszolút és regiszter indirekt címzési módok • Zero (Z), carry (C), negative (N), overflow (V) feltételbitek – Feltételes ugró utasítások a teszteléshez • Szubrutinhívás 16 szintű hardveres verem használatával • Programelágazás a teljes címtartományban • Egyszintű, egyszerű megszakításkezelés BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
3
FPGA labor
Lab8: A MiniRISC processzor Felépítése követi az adatstruktúra-vezérlő szemléletet • Vezérlő: az utasítások beolvasása, feldolgozása és ennek megfelelően az adatstruktúra vezérlése • Adatstruktúra: műveletek végrehajtása az adatokon Programmemória ADDR
Adatmemória
DOUT
Vezérlőegység
RD WR
Vezérlő jelek
ADDR
DIN
DOUT
Adatstruktúra
Feltétel jelek MiniRISC processzor BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
4
FPGA labor
Lab8: A MiniRISC processzor blokkvázlata A részletes felépítést lásd a Verilog forráskódban Programmemória ADDR
Adatmemória DOUT
DIN
DOUT
RD WR
ADDR
Z,C,N,V
PC IRQ
Számláló
IE
Verem
Debug modul
IR
Fetch
Break
Decode
Regisztertömb RdX
RdY
8 bites konstans
feltétel jelek
Execute Int_req
Vezérlőegység
MUX2
ugrási cím OP1
OP2
ALU
Adatstruktúra MiniRISC processzor
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
WrX
Z,C,N,V
Init
Vezérlő állapotgép
IF
bit
0x00 0x01
ugrási cím
bit
MUX1
vezérlő jelek
5
FPGA labor
Lab8: MiniRISC processzor 1. A MiniRISC processzor felépítése – Adatstruktúra – Vezérlőegység 2. Fejlesztői környezet – A MiniRISC assembler – A MiniRISC IDE – Szoftverfejlesztés (példákkal)
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
6
FPGA labor
Lab8: A MiniRISC IDE és assembler • A LOGSYS Spartan-3E FPGA kártyához készült MiniRISC mintarendszerre történő programfejlesztéshez egy grafikus fejlesztői környezet áll rendelkezésre (MiniRISC IDE) • Az assembly nyelven megírt programok lefordítása a LOGSYS MiniRISC assemblerrel lehetséges – A .NET keretrendszer 4.0 verziója szükséges a futtatáshoz (Windows 7-től az operációs rendszer része) • Az assembler a processzorhoz illesztett képességű – Egyszerű utasítás értelmezés – Abszolút kódot generál (nincs linker) – Nincs makrózás – Nincs cím aritmetika – Nincs feltételes fordítás – Hiba esetén hibaüzenettel leáll BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
7
FPGA labor
Lab8: A MiniRISC assembler használata • Futtatása parancssorból: MiniRISCv2-as filename.s – A filename.s assembly forrásfájlt beolvassa és ha nincs benne hiba, lefordítja és generálja a következő fájlokat • filename.lst • code.hex • data.hex • filename.svf • filename.dbgdat
assembler listafájl címekkel, címkékkel, azonosítókkal, utasításkódokkal szöveges fájl a Verilog kódból történő programmemória inicializáláshoz szöveges fájl a Verilog kódból történő adatmemória inicializáláshoz a LOGSYS GUI-val letölthető, a program- és adatmemória tartalmát inicializáló SVF fájl a debug információkat tartalmazó fájl
– Az esetleges hibaüzenetek a konzolon jelennek meg • A MiniRISC assembler a MiniRISC IDE integrált részét képezi, a parancssorból való futtatása ezért nem gyakori BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
8
FPGA labor
Lab8: A MiniRISC assembler használata • Forrásfájl: egyszerű szövegfájl .s kiterjesztéssel • A feldolgozás soronként történik: 1 sorban 1 utasítás • Az assembly forráskód sorok formátuma LABEL: MNEMONIC OP1{, OP2} ; Comment – LABEL Azonosító, értéke az azt követő utasítás címe – MNEMONIC A végrehajtandó műveletre utaló mnemonik, pl. ADD – összeadás, JMP – ugrás, stb. – OP1{, OP2} A művelet operandusai, OP2 nincs mindig – ; Comment
(OP1 sincs az RTS, RTI, STI és CLI utasítások esetén)
A ’;’ karakter a megjegyzés kezdete, melyet az assembler figyelmen kívül hagy
• Javaslat – Minden utasításhoz írjunk megjegyzéseket – A formázáshoz használjuk a TAB karaktert BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
9
FPGA labor
Lab8: A MiniRISC assembler használata • Kevés szabály van • Az utasítások operandusai lehetnek – Regiszter r0 – r15 – Konstans #0 – #255 (ALU műveletekhez) – Memóriacím 0 – 255 (ez is konstans, csak más célra) – Indirekt cím (r0) – (r15) • Numerikus konstans – Nincs prefix decimális 0 – 255 – 0x prefix hexadecimális 0x00 – 0xFF – 0b prefix bináris 0b00000000 – 0b11111111 • Karakter konstans – A ’ ’ jelek közötti karakter (pl. #’A’ – értéke 65) – Escape szekvenciák: ’\’’, ’\”’, ’\\’, ’\a’, ’\b’, ’\f’, ’\n’, ’\r’, ’\t’, ’\v’ • String konstans – A ” ” jelek közötti karakterfüzér (pl. ”MiniRISC\r\n”) – Csak az adat szekcióban használható BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
10
FPGA labor
Lab8: A MiniRISC assembler használata • Assembler direktívák – DEF: azonosítót rendel konstanshoz DEF SW 0x81 ;A DIP kapcsoló periféria címe • Ez nem CPU utasítás, hanem az assembler számára definiál egy helyettesítési szabályt, ami a felhasználó számára biztosítja a forráskód jobb olvashatóságát
– CODE: a kód szekció kezdetét jelzi
• Az utána lévő forráskód részből generált kód a prg. memóriába kerül
– DATA: az adat szekció kezdetét jelzi
• Az utána lévő forráskód részből generált kód az adatmemóriába kerül • Az adat szekcióban csak címkék és DB direktívák lehetnek
– DB: az adatmemória inicializálása konstansokkal DB ”MiniRISC.\r\n”, 0 ;Nulla végű string • Csak az adat szekcióban lehet használni • Numerikus, karakter és string konstansok adhatók meg utána • Az egyes konstansokat vesszővel kell elválasztani egymástól
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
11
FPGA labor
Lab8: A MiniRISC assembler használata • Assembler direktívák – ORG: kezdőcím közvetlen előírása ORG memóriacím • Az utána lévő kódrész kezdőcímét állítja be • Használható a kód és az adat szekcióban is
• Az assembler által generált LST fájlban ellenőrizhető az utasítások címe és gépi kódja, valamint a fordító által használt azonosítók értelmezése • Ha a kód hibátlanul lefordult, akkor beépíthető a hardver tervbe, mint memória inicializáló adat (.HEX kimeneti fájlok) vagy letölthető a kész konfigurációra (.SVF kimeneti fájl) BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
12
FPGA labor
Lab8: A MiniRISC IDE Futtatás: - Szimulátorban - Hardveren Fordítás és letöltés
Végrehajtás vezérlése
Forráskód szerkesztő Adatmemória tartalma
Kijelző vezérlőpanel GPIO vezérlőpanel
USRT terminál Assembler konzol BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
Periféria vezérlőpanel: - LED-ek, DIP kapcsoló - Nyomógombok
CPU állapot: - PC, flag-ek, verem teteje, regiszterek tartalma - Végrehajtott utasítások száma - Elfogadott megszakításkérések száma 13
FPGA labor
Lab8: A MiniRISC IDE A forráskód szerkesztő szolgáltatásai: • Szintaxis kiemelés • A hibás programsorok aláhúzása, illetve a hibaüzenet megjelenítése, ha az egérkurzor a hibás sorra mutat • Lefordított program esetén az azonosítók értékének megjelenítése, ha az egérkurzor az azonosítóra mutat • Letöltött program esetén – A regiszter értékének megjelenítése, ha az egérkurzor a regiszterre mutat – Indirekt címzésnél a cím és a memóriában tárolt adat megjelenítése, ha az egérkurzor a regiszterre mutat
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
14
FPGA labor
Lab8: A MiniRISC IDE • A legördülő menüből kiválasztható, hogy a program – A szimulátorban fusson (ez mindig rendelkezésre áll) – A csatlakoztatott hardveren fusson (LDCxxx letöltőkábel) – Választás csak akkor lehetséges, ha program nem fut • Szimulátor – Órajelciklus pontossággal szimulálja az FPGA áramkörben megvalósított processzoros rendszert – A program végrehajtása itt lassabb, mint a hardveren • Kb. 400000 utasítás/s → kb. 1,2 MHz rendszerórajel frekvencia
– A MiniRISC mintarendszerben lévő perifériák nagy része a szimulátorban is elérhető (ami nincs: DMA, VGA, PS/2) • Futtatás hardveren – Ha van FPGA kártya csatlakoztatva a számítógéphez
BME-MIT
MiniRISC processzor, 2013.04.17. (v1.2)
15
FPGA labor
Lab8: A MiniRISC IDE • A program a Compile ( , F5) gombbal fordítható le – A hibaüzenetek a konzolban jelennek meg – A hibás programsorok pirossal aláhúzásra kerülnek • A lefordult program a Download ( , F6) gombbal tölthető le – Hardveren történő futtatás esetén ha még nincs felkonfigurálva az FPGA, akkor először ez történik meg – A program futása megáll a 0x00 címen (reset vektor) • A program végrehajtásának vezérlése – Run ( , F7): a program végrehajtásának folytatása – Break ( , F8): a program futásának felfüggesztése, a következő végrehajtandó utasítást sárga kiemelés jelzi – Step ( , F10): az aktuális utasítás végrehajtása, a program futása megáll a következő utasításnál
BME-MIT
MiniRISC processzor, 2013.04.17. (v1.2)
16
FPGA labor
Lab8: A MiniRISC IDE • A program végrehajtásának vezérlése – Auto step ( ): a Step parancs automatikus kiadása • A gyakoriság a Debug menüben állítható be • Az automatikus léptetés a Break paranccsal állítható le
– Reset ( , F9): reset jel kiadása a processzoros rendszernek – Stop ( ): a program futtatásának befejezése • Ezután ismételt programletöltés szükséges
• Töréspont elhelyezése a szerkesztőben a margóra történő kattintással lehetséges – A töréspontot piros kör jelzi a margón – Töréspontra futáskor a program végrehajtása megáll BME-MIT
• Lényegében egy Break parancs kiadása történik meg hardveresen
MiniRISC processzor, 2013.04.17. (v1.2)
17
FPGA labor
Lab8: A MiniRISC IDE • A processzor állapotának és az adatmemória tartalmának módosítása, illetve a perifériák vezérlése csak felfüggesztett programvégrehajtás (break állapot) esetén lehetséges • Processor state panel: a processzor állapota – Programszámláló (PC) értéke – Flag-ek (Z, C N, V, IE, IF) értéke (IF csak olv.) – Verem tetejének értéke (csak olvasható) – Regiszterek értéke – A végrehajtott utasítások száma – Az elfogadott megszakításkérések száma • Alap perifériák vezérlőpanelje – A LED-ek, a kapcsolók és a nyomógombok állapotát jeleníti meg – Biztosítja a perifériák regiszterszintű vezérlését BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
18
FPGA labor
Lab8: A MiniRISC IDE • Memory ablak – A 128 x 8 bites adatmemória tartalmát jeleníti meg – Az egyes adatbájtokra kattintva azok módosíthatók – A tartalom fájlból betölthető (Send file… gomb), illetve fájlba elmenthető (Save to file… gomb) • Display ablak – A hétszegmenses és a pontmátrix kijelzők vezérlését biztosítja – A kijelzők szegmenseire kattintva azok ki- és bekapcsolhatók – A szövegdobozokban megadható az egyes szegmensek értéke, illetve a megjelenítendő karakter
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
19
FPGA labor
Lab8: A MiniRISC IDE • USRT terminal ablak – Soros kommunikációs lehetőséget biztosít – A leütött karakterek elküldésre kerülnek, a vett karakterek megjelennek a terminál ablakban – Lehetőség van fájl elküldésére és a vett adat fájlba mentésére is • GPIO ablak – A GPIO perifériák állapotát jeleníti meg és ezek regiszterszintű vezérlésére szolgál (kimeneti adat, aktuális állapot, irány) – Ábra az FPGA kártya bővítőcsatlakozóinak lábkiosztásáról
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
20
FPGA labor
Lab8: A programfejlesztés lépései • Gondoljuk át a problémát és készítsünk vázlatos elképzelést, hogy mit és hogyan szeretnénk megoldani • Fogalmazzuk meg a megoldást a MiniRISC assembly utasítások szintjén és készítsük el a forráskódot • A begépelt programot fordítsuk le a Compile (F5) paranccsal • Az esetleges hibákat javítsuk ki • A hibátlanul lefordult programból generált SVF fájl letölthető a Download (F6) paranccsal • Ellenőrizzük a program működését debug módban a MiniRISC IDE szolgáltatásainak segítségével BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
21
FPGA labor
Lab8_1 feladat: Bevezető feladatok • A MiniRISC processor programozásának gyakorlásához a félév első heti egyszerű Verilog HDL alapú bevezető feladatokat ismételjük meg gépi szintű programozással. • A feladatok így ismertek, csak egy kicsit más szemlélet szükséges a realizációhoz • Sok esetben az új megközelítés sokkal egyszerűbb, sok esetben itt ütközünk nehézségekbe • Sok sikert a gépi szintű programozáshoz! BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
22
FPGA labor
Lab8_1 feladat: Bevezető feladatok • Lab8_1_x feladatok: Az SW DIP kapcsolókon beállított érték beolvasása (feldolgozása) és kiírása az LD LED-ekre • A MiniRISC rendszernek perifériája a LD és SW eszköz, a dokumentációban adott funkcionalitással • Az LD periféria címe 0x80, a 8 bites kimeneti regiszter írható, és visszaolvasható (ez sokszor praktikus, bár itt most nem használjuk ki) • Az SW periféria címe a 0x81, a 8 bites bemeneti regiszter csak olvasható • A „programok”: Egyszerű, végtelen ciklusban beolvassuk a kapcsolók állapotát, SW (0x81) (feldolgozzuk), és kiírjuk a LED-ekre LD (0x80) • A programok kezdődhetnek a 0x00 címen (reset vektor) BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
23
FPGA labor
Lab8_1 feladat: Bevezető feladatok • Szükséges adminisztrációs műveletek: Adatmozgatások és végtelen ciklus szervezése feltétel nélküli ugrással • Funkcionális műveletek: az aktuális feladattól függően • Indítsuk el a a MiniRISC IDE fejlesztői környezetet • A Lab8_1.s új forrás létrehozásakor az IDE rákérdez a használni kívánt perifériákra. • A párbeszédablakban felsorolja az összes rendszerperifériát, amiből a jelölő négyzetek kiválasztásával a perifériaregiszterek neveinek deklarálása automatikusan része lesz a forráskódnak. BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
24
FPGA labor
Lab8_1 feladat: Bevezető feladatok • A LD és SW perifériák kiválasztásával a szükséges regiszter deklarációk megjelennek a szerkesztőablakban.
• A MiniRISC IDE két üzemmódban használható: – Ha nincs LOGSYS kártya csatlakoztatva, akkor a programfejlesztés csak szimulátor módban lehetséges: – Ha van LOGSYS kártya is csatlakoztatva, akkor a programfejlesztés akár szimulátor módban, akár közvetlen valódi hardver programteszteléssel is lehetséges. – A legördülő menü alapján a kívánt mód választható: BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
25
FPGA labor
Lab8_1 feladat: Bevezető feladatok • A feladatok megoldását jelentő utasítássorozatok a szerkesztőablakba begépelhetők. • Lab8_1_1: SW átmásolása LD-re • Lab8_1_2: SW kettes kompl. másolása LD-re • Lab8_1_3: SW 8 bitjén adott két 4 bites érték összegének kijelzése a LD-re. Milyen megoldási lehetőségeket érdemes megvizsgálni? • Az elkészített forrásokat fordítsuk le, ellenőrizzük lépésenkénti végrehajtással, majd a LOGSYS kártyát csatlakoztatva és kiválasztva, valós idejű futtatást is alkalmazva • A tapasztalatokat jegyezzük fel a Lab8_Eredmények kérdőíven. BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
26
FPGA labor
Lab8_2 feladatok • A labor további idejében a következő feladatok közül válasszon és készítse el a hozzá tartozó assembly programot: • Lab8_2_1: Ellenőrző összeg generálása memóriában lévő adatvektorra • Lab8_2_2: MAX/MIN elem keresése adatvektorban • Lab8_2_3: Előjeles adatvektor elemei összegének meghatározása • Lab8_2_4: Előjeles adatsorozat 4 pontos átlagoló szűrése • Lab8_2_5: Előjeles adatsorozat 3 pontos medián szűrése • Lab8_2_6: Fibonacci BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
27
FPGA labor
Lab8_2_1 feladat • Lab8_2_1: Ellenőrző összeg generálása memóriában lévő adatvektorra (pl. NEPTUN kód), és ellenőrzése (vétel). A távolsági adatátvitelek során az ellenőrző összeg generálása a forrásoldalon az adatvektor elemeinek modulo 256-os összeadásával generálható, és a végösszeg kettes komplemensét az üzenethez fűzzük. A távoli helyen a vételnél ugyanezt az összegzés műveletet végezzük el, az ellenőrzőösszeget is hozzáadva. Amennyiben az ellenőrzés eredménye nulla, az adás-vétel hibátlan volt. BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
28
FPGA labor
Lab8_2_2 feladat • Lab8_2_2: A memóriában található egy előjel nélküli / előjeles adatsorozat. Kezdőcíme: r0-ban, mérete (<50) r1-ben. A feladat az adatsorozat MAX és MIN értékeinek megtalálása, és ezen értékek és pozíciójuk tárolása r2/r3 és r4/r5 regiszterpárokban.
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
29
FPGA labor
Lab8_2_3 feladat • Lab8_2_3: A memóriában található egy előjeles adatsorozat. Kezdőcíme: r0-ban, mérete (<50) r1ben. A feladat az adatsorozat elemei összegének kiszámítása és eltárolása az r2/r3 regiszterpárban.
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
30
FPGA labor
Lab8_2_4 feladat • Lab8_2_4: A memóriában található egy előjeles adatsorozat. Kezdőcíme: r0-ban, mérete (<50) r1ben. A feladat az adatsorozat elemeinek „simítása”, lineáris szűrése, 4 pontos mozgó átlagolást használva (Gyak. 5. F2 feladat szoftver verziója): y(t) = 1/4*(x(t-3) + x(t-2) + x(t-1) + x(t)) • Az algoritmus az eredményeket az eredeti adatpontok után, egy új memória területre mentse el (pl. a 128 bájtos adatmemória felső felébe)
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
31
FPGA labor
Lab8_2_5 feladat • Lab8_2_5: A memóriában található egy előjeles adatsorozat. Kezdőcíme: r0-ban, mérete (<50) r1ben. A feladat az adatsorozat elemeinek „simítása”, nemlineáris szűrése, 3 pontos medián szűrést végezve (Gyak. 7. F2.c feladat, (MIN,MED,MAX)): y(t-1) = MED(x(t-2) + x(t-1) + x(t)) • Az algoritmus az eredményeket az eredeti adatpontok után, egy új memória területre mentse el (pl. a 128 bájtos adatmemória felső felébe)
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
32
FPGA labor
Lab8_2_6 feladat • Lab8_2_6: Készítse el a Fibonacci sorozat generáló programot, 16 bites bináris aritmetikát használva. Az értékeket a memóriába írja be, 16 bites formátumban, amíg lehetséges. • Milyen számformátum esetén tudja a legtöbb generált elemet elhelyezni a 128 bájtos adatmemóriában?
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
33
FPGA labor
Lab8_2 feladatok • A megfelelő feladat kiválasztása és elkészítése után válaszoljon a Labor 8 Eredmények kérdőív kérdéseire.
BME-MIT MiniRISC processzor, 2013.04.17. (v1.2)
34
FPGA labor