Technická zpráva PicoBlaze lekce 1: assembler, C překladač a simulační prostředí Jiří Svozil, Leoš Kafka, Jiří Kadlec svozil@utia.cas.cz Obsah 1. Úvod... 2 2. Xilinx PicoBlaze... 2 2.1 Architektura procesoru... 3 2.2 Instrukční sada... 3 2.3 Přerušení... 4 3. KCPSM3 Assembler... 5 3.1 Překlad pomocí KCPSM3... 5 4. C překladač PCCOMP... 6 4.1 Vlastnosti PCCOMP... 6 4.2 Překlad kódu... 6 4.3 Obsluha přerušení v C... 6 5. Simulační prostředí pblaze IDE... 7 5.1 Konfigurace pblazeide pro procesor KCPSM3... 7 5.2 Simulace I/O portů... 8 6. Použité/Potřebné vybavení a nástroje... 9 7. Ukázkové příklady... 9 7.1 Příklad 1 Překlad assemblerového kódu a simulace procesoru... 9 7.2 Příklad 2 C překladač... 11 8. Obsah a popis přiloženého balíku... 12 9. Reference... 12 Revize Revize Datum Autor Popis změn v dokumentu 0 5.3.2007 J.Svozil Vytvoření dokumentu 1 20.8.2007 J.Svozil Revize 1 2.
1. Úvod Tato zpráva popisuje první lekci ze série lekcí, zabývajících se procesorem PicoBlaze. Lekce jsou připraveny jako vodítko práce s tímto procesorem a umožňují uživateli překonat počáteční bariéru spojenou s návrhem obvodů založených na procesoru PicoBlaze. Každá lekce je doplněna řešeným projektem. Všechny lekce a související projekty jsou navrženy a připraveny tak, aby je bylo možné absolvovat individuálně na vlastním PC, a to na těchto kartách: Na přípravku FITkit z VUT Brno s obvodem Spartan 3 XC3S50 a Xilinx ISE WebPack. Na kartě s3esk (Xilinx Starter Kit) se Spartan 3E XC3S500E a Xilinx ISE WebPack Na kartě ML402 s Virtex 4 SX Na kartě ML403 s Virtex 4 FX Xilinx ISE WebPack Tato první lekce seznámí uživatele s procesorem PicoBlaze a se simulačním prostředím pblazeide, dovolujícím modelovat a ladit PicoBlaze včetně jednoduchých periferií na PC. Současně seznámí uživatele s assemblerem procesoru a jednoduchým C překladačem a na příkladu vysvětlí obsluhu přerušení v asembleru a v jazyce C. 2. Xilinx PicoBlaze Xilinx PicoBlaze je velmi jednoduchý 8-bitový RISC procesor vytvořený pro FPGA čipy Spartan-3, Virtex-II, Virtex-II Pro a Virtex-4. Jeho hlavní předností je jeho velikost; v případě obvodu Spartan-3 zabírá procesor PicoBlaze pouze 96 slice, což odpovídá 5% z XC3S200 a méně než 0,3% z XC3S5000. Rychlost procesoru se pohybuje od 43 do 100 MIPS v závislosti na cílovém FPGA a jeho speed grade. Procesor PicoBlaze je plně začlenitelný do cílového FPGA a nevyžaduje žádné dodatečné externí zdroje. Jeho užití je výhodné především ve složitějších aplikacích, kde lze obsluhu časově nenáročných části realizovat právě pomocí tohoto procesoru a tím návrh značně zjednodušit. Procesor PicoBlaze je dodáván v několika verzích. V těchto lekcích bude použita verze KCPSM3 ((K)constant Coded Programmable State Machine). 2/12
2.1 Architektura procesoru Základní parametry a architektura procesoru PicoBlaze (KCPSM3) je na obrázku 1. 8-bitový procesor 1024 instrukcí (1 BlockRAM) 256 I/O adres 64 Byte uživatelská paměť 1 zdroj přerušení HW stack 31x10 Obrázek 1: Architektura procesoru Picoblaze [1] 2.2 Instrukční sada Kompletní instrukční sada procesoru PicoBlaze je na obrázku 2. Podrobný popis jednotlivých instrukcí lze nalézt v manuálu [1]. Obrázek 2: Instrukční soubor procesoru Picoblaze [2] 3/12
2.3 Přerušení Procesor PicoBlaze poskytuje pouze jeden zdroj přerušení. Pokud některá aplikace potřebuje zdrojů více, je toto možno realizovat pomocí jednoduché FPGA logiky a vytvořit tak další zdroje přerušení. Doporučené zapojení pro zpracování požadavku na jeden zdroj přerušení je znázorněno na obrázku 3. Obrázek 3: Přerušení u procesoru PicoBlaze [1] Po resetu procesoru je přerušení implicitně zakázáno a pro jeho použití je třeba jej aktivovat pomocí instrukce ENABLE INTERRUPT. K jeho opětovnému zakázání slouží instrukce DISABLE INTERRUPT. V okamžiku přerušení se po dokončení aktuálně zpracovávané instrukce provede instrukce CALL 3FF. Tato instrukce představuje skok na konec paměti programu. Zde bývá obvykle instrukce skoku na funkci pro obsluhu přerušení (ISR - interrupt service routine), viz obrázek 4. Přerušení automaticky zachovává jak Zero tak Carry flags, avšak pouze pro jednu úroveň volání obsluhy přerušení. (1) přerušení je třeba po resetu vždy povolit pomocí instrukce ENABLE INTERRUPT (2) vznik prerušení (3) automatický skok na adresu 3FF při žádosti o přerušení (4) skok na funkci pro obsluhu přerušení (ISR) (5) vlastní obsluha přerušení (6) návrat z funkce obsluhy přerušení s opětovným povolením přerušení (RETURNI ENABLE) Obrázek 4: Ukázka běhu obsluhy přerušení [1] 4/12
3. KCPSM3 Assembler 3.1 Překlad pomocí KCPSM3 Překlad se provádí pomocí programu KCPSM3.EXE (k dispozici na [4]). Pro překlad je nutné do společného adresáře nakopírovat zdrojový kód (filename.psm), program KCPSM3.EXE a šablony ROM_form.vhd, ROM_form.v a ROM_form.coe. Překlad se pak provede příkazem: kcpsm3 filename.psm <enter> Výstupem překladu je patnáct souborů popsaných na obrázku 5. Soubor filename.vhd představuje komponentu s programovou pamětí procesoru. Připojení programové paměti k procesoru PicoBlaze je na obrázku 6. Obrázek 5: Vstupní a výstupní soubory assembleru KCPSM3 [2] Obrázek 6: Procesor PicoBlaze (KCPSM3) s připojenou pamětí programu [2] 5/12
4. C překladač PCCOMP 4.1 Vlastnosti PCCOMP Překladač PCCOMP (the Picolaze's C Compiler) [5] byl vyvinut pro FPGA návrháře pracující s procesorem PicoBlaze. Překladač podporuje přerušení a in-line ASM, nepodporuje však celé ANSI C ani celé K&R C. Současná verze překladače umožňuje překlad pouze zjednodušeného C a překladač neprovádí žádné optimalizace. Přeložený kód bývá v některých případech nefunkční. 4.2 Překlad kódu K překladu zdrojového kódu z C do assembleru lze použít následující příkaz: pccomp [-c] [-v] [-s] file.c <enter> Parametr -c slouží k zobrazení zdrojového C kódu v psm souboru vygenerovaným pomocí pccomp. Parametr v se používá při překladu pro procesor KCPSM2. Parametr s určuje, zda bude pro datový zásobník použita vnitřní paměť (scratchpad), nebo externí paměť, připojená na vstupně výstupní porty procesoru. PCCOMP vytvoří soubor s názvem file.psm a současně také zobrazí zprávu o průběhu překladu a případná chybová hlášení. S PCCOMP lze překládat vždy jen jeden soubor a ten musí obsahovat funkci main(). 4.3 Obsluha přerušení v C Jak už bylo zmíněno výše, PicoBlaze má jeden zdroj přerušení a ten může být povolen, či zakázán. Příkaz na povolení přerušení je IRQ_ON;, příkaz pro zakázání pak IRQ_OFF;. Rutina přerušení musí být psána v asembleru a smí používat pouze registry s0,s1,s2 a s3. Funkce pro obsluhu přerušení musí být deklarována jako všechny ostatní funkce v programu. Deklarace funkce pro obsluhu přerušení se provádí pomocí klíčového slova interrupt. Ukázkový příklad na obsluhu přerušení v jazyce C je na obrázku 7. interrupt my_irq(void); char a,b,c; char had_an_irq; void main(){ IRQ_ON; while (1>0) while(had_an_irq) { IRQ_OFF; had_an_irq = 0; c=a+b; IRQ_ON; } } interrupt my_irq (void){ #asm load s0,1 store s0,had_an_irq ; had_an_irq = 1 #endasm } Obrázek 7: Obsluha přerušení v C 6/12
5. Simulační prostředí pblaze IDE Prostředí pblaze IDE [6] (obrázek 8) od společnosti Mediatronix je bezplatné grafické vývojové prostředí pro Windows sloužící k simulaci procesoru PicoBlaze. Vstupním souborem je soubor typu FMT, který vzniká při překladu pomocí assembleru KCPSM3. Obrázek 8: Simulační prostředí pblaze IDE. (Obrázek z [1]) 5.1 Konfigurace pblazeide pro procesor KCPSM3 Prostředí podporuje všechny čtyři typy procesoru Picoblaze, proto je třeba před otevřením simulovaného souboru nastavit, o jaký typ se jedná. To se provádí v záložce Settings (obrázek 9) Samotné otevření souboru se pak děje pomocí položky File Import (obrázek 10). Assembler vygenerovaný pomocí KCPSM3 se liší od assembleru používaného v simulátoru a tímto dojde k jeho automatické konverzi. Zdrojový soubor nelze pouze otevřít pomocí File Open, protože takto by se neprovedly potřebné změny ve zdrojovém souboru! 7/12
Obrázek 9: Nastavení typu Picoblaze Obrázek 10: Načtení simulovaného souboru 5.2 Simulace I/O portů Simulace I/O portů v prostředí pblazeide je zobrazeno a popsáno na obrázku 11, obrázku 12 a obrázku 13. Obrázek 11: Simulace dat na vstupních portech (Obrázek z [1]) Obrázek 12: Simulace dat na výstupních portech (Obrázek z [1]) 8/12
Obrázek 13: Simulace dat na I/O portech. (Obrázek z [1]) 6. Použité/Potřebné vybavení a nástroje K realizaci všech příkladů uvedených v této lekci je třeba stáhnout z internetu balíček procesoru PicoBlaze [4] (verzi PicoBlaze for Virtex-II and Virtex-II Pro), obsahující VHDL popis procesoru kcpsm3.vhd, překladač KCPSM3.EXE a obecný popis programové paměti procesoru ROM_form.vhd, ROM_form.c, ROM_form.coe. Dále je nutné stáhnout C překladač PCCOMP z adresy [5] a simulační prostředí pblaze IDE z adresy [7]. K realizaci obou ukázkových příkladů byla vyžita verze KCPSM 1.30, verze pblaze IDE 3.7.4 ß a verze PPCOMP 1.7.7. 7. Ukázkové příklady Následující kapitola je věnována praktickému vyzkoušení C překladače, assembleru a simulace procesoru na dvou připravených ukázkových příkladech. Oba níže uvedené příklady ve svém postupu využívají překladač KCPSM3 včetně popisu programové paměti procesoru. Proto je třeba nejprve z internetového odkazu [4] stáhnout balíček procesoru Picoblaze obsahující vše zmíněné. K simulaci assemblerovského kódu je použito simulační prostředí pblazeide (viz kapitola 5). To je třeba také stáhnout a to z internetových stránek společnosti Mediatronix [7]. Simulátor pblazeide je tvořen pouze jedním souborem pblazeide.exe. 7.1 Příklad 1 Překlad asemblerového kódu a simulace procesoru 1) Zkopírujte z přiloženého CD z adresáře src soubor io_v0.zip a rozbalte jej. Pomocí assembleru KCPSM3 přeložte vzorový kód souboru io_test.psm (postup viz kapitola 3). 2) Přeložený soubor io_test.fmt importujte do prostředí pblaze IDE (obrázek 14). Důležité je provést import souboru (položka Import ), ne pouze otevření pomocí Open. 9/12
Obrázek 14: Načtení souboru do simulačního prostředí pblaze IDE 3) V záložce Settings zkontrolujeme nastavení simulace Picoblaze. Správná hodnota je Picoblaze 3, jak je prezentováno na obrázku 15:. Obrázek 15: Nastavení simulace PB 4) Před samotnou simulací je třeba odkomentovat část deklarace portů určenou pro simulaci a stávající deklaraci určenou pro překlad naopak zakomentovat, viz obrázek 16:. Obrázek 16: Změna definice portů takto má vypadat zdrojový soubor pro simulaci 10/12
5) Nyní můžeme pomocí tlačítek na ovládacím panelu spustit simulaci a uvést ji do režimu RUN, viz obrázek 17. Dále lze pomocí tlačítek v položce BTN_port a diod v položce LED_port vyzkoušejte funkčnost programu. Program v tomto příkladu má velmi jednoduchou funkci, a to že v nekonečné smyčce čte hodnoty z BTN_portu a beze změny je zapisuje na výstupní port LED_port. I. Simulační mód II. Start simulace (RUN) III. Testovací tlačítka a diody Obrázek 17: Simulace programu io_test.fmt v pblaze IDE 7.2 Příklad 2 C překladač 1) Z internetových stránek [5] stáhněte program PCCOMP (C překladač). 2) Z přiloženého cd zkopírujte z adresáře src z balíku io_c_v0.zip soubor io_test.c. Ten rozbalte do adresáře s programem PCCOMP. 3) Proveďte překlad zdrojového souboru io_test.c pomocí příkazu pccomp -c -s io_test.c (obrázek 18) Obrázek 18: Překlad pomocí PCCOMP 4) Překladem jsme získali assemblerovský soubor io_test.psm, na který teď použijeme stejný postup jako u příkladu 1. Tzn. přeložíme jej pomocí programu KCPSM3.EXE a simulujeme programem pblazeide. Důležité je zachovat doporučený postup jednotlivých kroků tak, jak je popsáno v předchozí kapitole 7.1. 11/12
8. Obsah a popis přiloženého balíku PicoBlaze_Lekce1/ src/ io_v0.zip Příklad 1 io_c_v0.zip Příklad 2 doc/ PicoBlaze_lekce1.pdf Tento dokument pccomp.zip pccomp.exe C překladač 9. Reference [1] Xilinx, PicoBlaze 8-bit Embedded Microcontroller User Guide for Spartan-3, Virtex-II, and Virtex-II Pro FPGAs, http://www.xilinx.com/bvdocs/userguides/ug129.pdf [2] Xilinx, KCPSM3 Manual [3] Xilinx, PicoBlaze User Resources http://www.xilinx.com/ipcenter/processor_central/picoblaze/picoblaze_user_resources.htm [4] Xilinx, PicoBlaze, http://www.xilinx.com/picoblaze [5] 1 Francesco Poderico, PCCOMP C compiler download page, http://www.poderico.co.uk/index.htm [6] Mediatronix, PicoBlaze IDE, http://www.mediatronix.com/pblazeide.htm [7] Mediatronix, PicoBlaze IDE, stažení pblazide.exe http://www.mediatronix.com/tools/pblazide36.zip Poděkování Tato práce byla podpořena projektem ministerstva školství a tělovýchovy číslo 2C06008, http://www.vlam.cz. 1 Tyto stránky jsou dočasně nedostupné. PCCOMP je součástí přiloženého CD (v souboru pccomp.zip). 12/12