BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK A PicoBlaze vezérlő alkalmazása a LOGSYS kártyán Fehér Béla BME MIT atórium
A PicoBlaze vezérlő 8 bites vezérlőegység egyszerű alkalmazásokra Jól illeszkedik a LOGSYS Spartan-3E FPGA kártya komplexitásához: Kis erőforrásigény, kevesebb mint 100 Slice Harvard felépítés, pipe-line utasításvégrehajtás max. 50MHz működési sebesség 1024 utasítás, assembly szintű programozhatóság Rugalmas perifériakezelés, bővíthetőség Korlátozott fejlesztési támogatás
PicoBlaze blokkvázlat
PicoBlaze programozói modell RISC típusú, nagyon egyszerű utasításkészlet 16 általános célú regiszter, tetszőleges használattal 8 bites adatméret, konstansok és alapműveletek Aritmetikai, logikai, shift és forgatási utasítások Z és C feltételbitek, továbbá paritásszámítás Feltételes vezérlési utasítások a tesztelések után Szubrutin hívás 31 szintű HW stack használatával Programelágazás a teljes címtartományban Egyszintű, egyszerű megszakítás használata
PicoBlaze programozói modell Minimális beépített adatmemória (64 byte) Elérhető abszolút és regiszter indirekt címzéssel 256 bemeneti és kimeneti perifériacím 2 órajelnyi periféria regiszter hozzáférés Művelet érvényesítése független WR és RD jellel LOAD/STORE architektúra Művelet csak a regiszterekkel végezhető, minden adatot ide kell mozgatni használat előtt Adatmemóriából FETCH/STORE, perifériából INPUT/OUTPUT utasításokkal
PicoBlaze utasításkészlet PicoBlaze3 PROGRAMOZÓI KÁRTYA FORDÍTÓ DIREKTÍVÁK ADDRESS cím CONSTANT név, konst NAMEREG reg, név UTASÍTÁSSOR FORMÁTUM CÍMKE: MŰVELET OP1 {,OP2} ; HASZNOS MEGJEGYZÉSEK VEZÉRLÉSI UT. ARITMETIKAI UT. ADAT MOZGATÁSI UT. JUMP felt, cím ADD reg, reg / konst INPUT reg, (reg) /paddr CALL felt, cím ADDCY reg, reg / konst OUTPUT reg, (reg) /paddr RETURN felt SUB reg, reg / konst STORE reg, (reg) /maddr cím 000. 3FF SUBCY reg, reg / konst FETCH reg, (reg) /maddr felt -, Z, NZ, C, NC COMPARE reg, reg / konst / vagylagos használat MEGSZAKÍTÁSI UT. LOGIKAI UT. LÉPTETŐ UT. MEGJEGYZÉS RETURNI ENABLE LOAD reg, reg / konst SR0 / SL0 reg reg s0 sf RETURNI DISABLE AND reg, reg / konst SR1 / SL1 reg konst 00 FF ENABLE INTERRUPT OR reg, reg / konst SRX / SLX reg paddr 00 FF DISABLE INTERRUPT XOR reg, reg / konst SRA / SLA reg maddr 00 3F 1 utasítás = 2 órajel ciklus TEST reg, reg / konst RR / RL reg (reg) ind. cím
PicoBlaze utasításkészlet (1) Vezérlő, programszervező utasítások JUMP felt, cím a felt lehet -, Z,NZ,C,NC CALL felt, cím cím tartomány 000 3FF RETURN felt Szubrutin hívások 31 szintig Megszakításhoz kapcsolódó utasítások ENABLE INTERRUPT egyszintű IT DISABLE INTERRUPT RETURNI ENABLE RETURNI DISABLE
PicoBlaze utasításkészlet (2) Adatmozgató utasítások regiszterekhez (16 regiszter) LOAD reg, reg/konst op2 töltése op1-be Memória kezelő utasítások (64 bájt címtartomány) STORE reg, (reg) / konst FETCH reg, (reg) / konst Periféria kezelő utasítások (256 bájt címtartomány) INPUT reg, (reg) / konst OUTPUT reg, (reg) / konst Operandus jelölés értelmezése Az op1 mindig regiszter operandus LOAD esetén op2 regiszter vagy 8 bites konstans az utasításkódból Az egyéb utasításoknál op2 egy címet specifikál, ami egy 6 vagy 8 bites konstans, illetve a (reg) jelölés regiszter indirekt címzést jelöl
PicoBlaze utasításkészlet (3) Aritmetikai utasítások ADD reg, (reg) / konst, ADDCY reg, (reg) / konst SUB reg, (reg) / konst, SUBCY reg, (reg) / konst COMPARE reg, (reg) / konst A műveletekben op1 mindig regiszter, op2 regiszter vagy 8 bites konstans az utasításkódból Az eredmény az op1 regiszterbe kerül A műveletek állítják a Z és C flag-eket A COMPARE utasítás az eredményt nem tárolja, de a flag-eket állítja Z=1, ha op2 és op1 egyenlő, C=1, ha op2 nagyobb, mint op1
PicoBlaze utasításkészlet (4) Logikai utasítások AND reg, (reg) / konst, OR reg, (reg) / konst, XOR reg, (reg) / konst, TEST reg, (reg) / konst A műveletekben op1 mindig regiszter, op2 regiszter vagy 8 bites konstans az utasításkódból Az eredmény az op1 regiszterbe kerül A műveletek állítják a Z flag-et és ált. törlik a C flag-et A TEST utasítás egy speciális AND művelet, az eredményt nem tárolja, de a flag-eket állítja Z=1, ha a művelet eredménye nullát ad C=1, ha a művelet eredménye páratlan paritású
PicoBlaze utasításkészlet (5) Léptető és forgató utasítások SR0 reg, SL0 reg, SR1 reg, SL1 reg SRX reg, SLX reg, SRA reg, SLA reg RR reg, RL reg A műveletekben az operandus mindig regiszter, a mozgatás egyetlen bitpozíciót jelent A kódban a 0, és 1 a belépő új bitet jelenti, az X esetén az aktuális bitet ismétli, az A esetén kiterjesztett, 9 bites műveletet hajt végre a C flag-et is felhasználva A forgató utasítások a kilépő bitet visszaléptetik A műveletek állítják a Z flag-et és a kilépő bitet minden esetben a C flag-be másolják
Általános használati módok Egyedi alkalmazásokhoz: A vezérlő és a hozzátartozó programmemória modul beépítése egy tetszőleges HDL tervbe Periféria eszközök specifikálása, megtervezése Az alkalmazás elkészítése a rendelkezésre álló gépi szintű nyelven (assembly programozás) A program futtatható kódjának generálása az assembler futtatásával A programmemória tartalom aktualizálása A terv lefordítása és letöltése a kívánt kártyára
Általános használati módok A beépítendő modulok és interfészeik: KCPSM3 vezérlő egység PROGRAM BlokkRAM memória
A forrásfájlok formátuma A PicoBlaze vezérlő forrásfájl részben titkosított HDL nyelven rendelkezésre áll, de strukturális leírás formájában A leírás FPGA primitívek elemi példányosítása, a logikai hálózatokat LUT tartalomként megadva Nehéz átlátni/módosítani, de ha valakit érdekel. Megírható lenne RTL szinten, de nem érdemes A programmemória fájl egy BlokkRAM példány, az aktuális alkalmazás kódjával felinicializálva
A PicoBlaze LOGSYS rendszer Egyszerű minta alkalmazás a vezérlő használatának bemutatásához A KCPSM3 blokk beépítése a szokásos A programmemória kiegészítve a tartalom JTAG interfészen keresztüli letölthetőségéhez Alapvető be- és kimeneti interfészek a LOGSYS kártyán található perifériákhoz Csak regiszterek, semmi kiegészítő funkcionalitás BE: Kapcsolók, nyomógombok KI: LED-ek, numerikus és pontmátrix kijelzők
A PicoBlaze LOGSYS konfiguráció
A PicoBlaze LOGSYS konfiguráció
PicoBlaze LOGSYS perifériák PicoBlaze LOGSYS mintarendszer periféria regiszterek CÍM REG MÓD BITEK használata, funkciója HEXA NÉV WR/RD B7 B6 B5 B4 B3 B2 B1 B0 00 ld wr ld7 ld6 ld5 ld4 ld3 ld2 ld1 ld0 01 sw rd sw7 sw6 sw5 sw4 sw3 sw2 sw1 sw0 02 bt rd 0 0 0 0 bt3 bt2 bt1 bt0 03 sg wr sg7 sg6 sg5 sg4 sg3 sg2 sg1 sg0 04 dg wr 0 0 0 0 dg3 dg2 dg1 dg0 05 cl wr 0 0 0 cl4 cl3 cl2 cl1 cl0 06 xd wr/rd xd7 xd6 xd5 xd4 xd3 xd2 xd1 xd0 07 xal wr xa7 xa6 xa5 xa4 xa3 xa2 xa1 xa0 08 xah wr xa15 xa14 xa13 xa12 xa11 xa10 xa9 xa8 09 xmc wr xa16 0 0 0 0 xcs xoe xwe 0A pr wr pr7 pr6 pr5 pr4 pr3 pr2 pr1 pr0 0A tm rd tm7 tm6 tm5 tm4 tm3 tm2 tm1 tm0 0B tc wr iten tps2 tps1 tps0 0 0 trep ten 0B ts rd irq tps2 tps1 tps0 0 tout trep ten
Programfejlesztés A programok elkészítését egy assembler támogatja Az assembler a vezérlőhöz hasonlóan korlátozott képességű Egyszerű DOS alkalmazás, használata nem túl kényelmes Hiba esetén leáll az adott ponton, hibaüzenettel Javítás, újraindítás, következő hiba,.. Különböző kimeneti formátumokat generál, teljes HW rendszer generálásához vagy csak program frissítéshez
PicoBlaze assembler Használata: > kcpsm3 filename.psm A filename.psm assembler forrást beolvassa és ha nincs hiba, lefordítja, és generálja a következőket: filename.v Verilog BokkRAM module fájl, amivel a program befordítható a tervbe HW modul szinten filename.log Assembler riport fájl, címekkel, cimkékkel, azonosítókkal, utasításkódokkal filename.hex A lefordított kód ( image ), ami a alapján SVF formátumú letölthető programfájl generálható Egy make.bat batch fájl összefogja a fenti műveleteket és generálja az SVF fájlt, ami egy PicoBlaze-t tartalmazó felkonfigurált FPGA-ra JTAG letöltővel letölthető
Az assembler jellemzői Forrásfájl: egyszerű szövegfájl.psm kiterjesztés Feldolgozás soronként: 1 sor 1 utasítás Az assembly forrássorok formátuma: CÍMKE: UT_NÉV OP1, {OP2} ; MEGJ CÍMKE: Egy adott utasítást nevez meg (Az utasítás címét képviseli az ugrások megvalósításához) UT_NÉV reprezentálja a funkciót, pl. ADD, LOAD, CALL OP1 {,OP2} a művelet operandusai, OP2 nincs mindig ; MEGJ A ; karakter a megjegyzés kezdete, ami ezután található, az a programra nincs hatással JAVASLAT: Minden utasításhoz írjunk megjegyzést
Az assembler tulajdonságai Kevés szabály van Konstansok értelmzése mindig HEXA rendszerben Lehet konstansokhoz azonosítót rendelni CONSTANT sw, 02 ; Az sw periféria címe A munkaregiszterek alapelnevzése s0, s1, sf Használhatók így is, pl. LOAD s3, s9 Vagy átnevezhetők NAMEREG s3, first ; NAMEREG s9, second ; Ezután LOAD first, second ; Azaz LOAD s3, s9
Az assembler jellemzői Az utasítások címe sorrendben növekszik Lehetséges a PC értékének közvetlen előírása is ADDRESS xxx, ahol xxx <= 3FF Használata indokolt, ha bizonyos kódrészletet adott címtől szeretnénk fordítani pl. szubrutin, vagy IT vektor ugró utasítása Az assembler által generált LOG fájl-ban ellenőrizhető az utasítások cím szerinti kódja és a fordító által használt értelmezés (címkék, változó nevek) Ha a kód hibátlanul lefordult, beépíthető a HW tervbe (.V kimeneti fájl) vagy letölthető a kész konfigurációra (.HEX ill..svf kimeneti fájl)
Az SVF fájl letöltése A forrásprogramot fordítsuk le a make filename paranccsal (pl. make kr1) A LOGSYS GUI-ban kapcsoljuk be a tápfeszültséget Töltsük le a PicoBlaze konfigurációt Töltsük rá a filename.svf program fájlt
PicoBlaze Periféria illesztés A PicoBlaze processzor interfésze nagyon egyszerű Szinkron busz működés, érvényesítés CLK felfutó élre 2 ütemnyi buszciklusok, nincs várakozáskérés Adatátvitel végrehajtása CLK felfutó élre 8 bit IO cím, 8 bit adat szétválasztott ki- és bemenet RD és WR pulzusok a művelet ütemezésére RD használata FIFO bemenet esetén érdekes WR mindig kell
PicoBlaze Periféria illesztés A PicoBlaze beolvasási művelet időbeli lefolyás Címzés a PORT_ID vonalakon Érvényes adat az IN_PORT-on Beolvasás a RD pulzus által kijelölt órjel ciklusban
PicoBlaze Periféria illesztés A PicoBlaze kiírási művelet időbeli lefolyás Címzés a PORT_ID vonalakon Érvényes adat az OUT_PORT-on Kiírás a WR pulzus által kijelölt órjel ciklusban
PicoBlaze Periféria illesztés A PicoBlaze illesztési feladat lépései A periféria típusa alapján az igények felmérése Regiszterek száma, használati módja (IN, OUT) Parancs, státusz, üzemmód regiszterek Esetleg FIFO vagy kisebb memória blokk Báziscím kijelölés, címtartomány használat megtervezése Címdekódolás kialakítása Kiíró jelek ADDR_SEL & WR Olvasó jelek ADDR_SEL & RD Olvasott regiszterek kimenetei MUX-on keresztül, egy időben csak egy érvényes, a többi nullát ad