670 likes | 815 Views
PicoBlaze, MicroBlaze, PowerPC. Tomáš Martínek martinto@fit.vutbr.cz. Motivace. Tvorba systémů uvnitř FPGA čipu Uvnitř FPGA lze vytvořit komplexní systém složený z mikroprocesorů, specializovaných výpočetních jednotek a propojení jednotlivých částí
E N D
PicoBlaze, MicroBlaze, PowerPC Tomáš Martínek martinto@fit.vutbr.cz
Motivace • Tvorba systémů uvnitř FPGA čipu • Uvnitř FPGA lze vytvořit komplexní systém složený z mikroprocesorů, specializovaných výpočetních jednotek a propojení jednotlivých částí • Umístění systému na jeden čip vede na jednodušší návrh plošného spoje a odpadají problémy s propojením jednotlivých obvodů na desce plošného spoje – může také vést na nižší cenu systému • Chyby vzniklé při návrhu systému lze jednoduše odstranit nahráním nové konfigurace FPGA • Spojení FPGA hradlového pole s procesorem • Procesor je vhodný pro řízení úloh, které mají složitější sekvenční charakter. Funkce procesoru je dána jeho programem a lze ji snadno modifikovat. Procesor má ale omezený výkon a jeho činnost má sekvenční charakter • Specializované jednotky vytvořené v FPGA jsou vhodné pro implementaci náročných výpočtů s vysokým stupněm paralelismu. Komplikované sekvenční řízení je ale náročné na implementaci. • Spojením mikroprocesoru s FPGA lze efektivně řešit vysoce náročné paralelní výpočty
Obsah • PicoBlaze • Základní informace • Architektura procesoru • Instrukční sada • Přerušovací systém • Vstupně/Výstupní rozhraní • Příklad použití procesoru • MicroBlaze • PowerPC
Základní informace • 8-bitový procesor • Zabírá pouze 96 SLICEs (FPGA hradlové pole obsahují až desítky tisíc SLICEs) • Pracovní frekvence 100 až 200MHz podle použitého FPGA hradlového pole • Každá instrukce je zpracována ve dvou taktech • Výkonnost 50 až 100 MIPS, zahrnuje pouze operace s pevnou řádovou čárkou • Jednoduchá komunikace s ostatními zařízeními na čipu skrze 256 vstupně/výstupních portů • Obsahuje řadič přerušení s podporou jednoho externího přerušení • Zdrojový kód v jazyce VHDL, kompilátor KPCM3 a simulátor jevolně šiřitelný
Obsah • PicoBlaze • Základní informace • Architektura procesoru • Instrukční sada • Přerušovací systém • Vstupně/Výstupní rozhraní • Příklad použití procesoru • MicroBlaze • PowerPC
Architektura procesoru • Blokové schéma procesoru
Architektura procesoru • Paměť programu • implementována pomocí jedné BlockRAM paměti • velikost je 1K instrukcí (nelze dále rozšiřovat) • každá instrukce má velikost 18 bitů (využívají se paritní bity BlockRAM) • V základní konfiguraci je paměť programu pouze pro čtení a její obsah je nahrán současně s nahráním konfigurace FPGA
Architektura procesoru • Lze ale i zvolit způsob zapojení, kdy je možné měnit programza běhu například připojením druhého portu na JTAG nebo UART rozhraní • Také je možné například vyžít dvouportové BlockRAM a sdílet jednu paměť programu pro dva procesory
Architektura procesoru • Registrové pole • 16 registrů o velikosti 8 bitů pro obecné použití (žádný z nich není použit pro speciální účel) • Zásobník pro volání podprogramu • 31 položek (jedna položka je rezervována pro případ přerušení), pokud přeteče, začnou se položky přepisovat • Datová paměť (Scratchpad Memory) • paměť o pevné velikosti 64 bajtů • podporuje přímé i nepřímé adresování (pomocí registru) prostřednictvím instrukcí FETCH/STORE • vhodné pro odkládaní dat, implementaci zásobníku, vyhledávací tabulky apod.
Architektura procesoru • Aritmeticko-logická jednotka (ALU) • 8-bitové operace pouze s pevnou řádovou čárkou • Obsahuje příznaky Zero a Carry
Obsah • PicoBlaze • Základní informace • Architektura procesoru • Instrukční sada • Přerušovací systém • Vstupně/Výstupní rozhraní • Příklad použití procesoru • MicroBlaze • PowerPC
Instrukční sada • Aritmetické instrukce • ADD, SUB, ADDCY, SUBCY • Pomocí instrukcí s přenosem lze jednoduše realizovat součet/rozdíl více-bajtových položek • Není dostupná vestavěná násobička resp. dělička, násobení resp. dělení se musí provádět v cyklu (cca 57 resp. 120 cyklů) • Násobení lze realizovat také připojením externí vestavěné násobičky MULT18 skrze vstupně/výstupní porty
Instrukční sada • Logické instrukce • AND, OR, XOR • NOT lze realizovat pomocí instrukce XOR, • Nastavování/nulování bitů lze realizovat pomocí OR/AND instrukcí • Posun a rotace • SL0, SL1, SLA, SLX, RL, SR0, SR1, SRA, SRX, RR • posun vlevo/vpravo, nasouvání Carry, MSB, LSB, konstanty, rotace vlevo/vpravo • Instrukce skoku • JUMP, JUMP C, JUMP NC, JUMP Z, JUMP NZ • skoky přímé/nepřímé, na základě Carry/Zero, pozitivní/negativní • Instrukce pro porovnání • COMPARE – test na rovnost (příznak Z), test na “<“ (příznak C) • TEST – test na nulu (příznak Z), sudá parita (příznak C)
Instrukční sada • Instrukce pro přesun dat • FETCH, STORE – mezi registrovým polem a datovou pamětí • LOAD – analogie instrukce MOV u běžných procesorů • INPUT, OUTPUT – mezi registrovým polem a vstupně- výstupními porty
Instrukční sada • Instrukce pro volání podprogramu • CALL – volání podprogramu • RETURN [C, NC, Z, NZ] – podmíněný návrat z podprogramu • Instrukce pro podporu přerušení • CALLI – volání obsluhy přerušení, na zásobník se navíc uloží stav Zero a Carry příznaku • RETTURNI [ENABLE/DISABLE] – návrat z obsluhy přerušení, přídavné parametry definují, zda se má povolit/zakázat příchod následujícího přerušení • ENABLE INTERRUPT • DISABLE INTERRUPT
Obsah • PicoBlaze • Základní informace • Architektura procesoru • Instrukční sada • Přerušovací systém • Vstupně/Výstupní rozhraní • Příklad použití procesoru • MicroBlaze • PowerPC
Přerušovací systém • Podpora pouze jednoho vnějšího přerušení, pro podporu více přerušení je potřeba na vstupu jednotlivé signály sdružovat a uvnitř obsluhy přerušení pak dále rozlišit, o které přerušení se jedná • Po příchodu přerušení odpoví procesor vysláním pulsu na signálu INTERRUPT_ACK, který muže sloužit například pro nulování RS klopného obvodu • Užitečné pro komunikaci s vnějšími zařízeními na FPGA čipu nebo i mimo něj - například obsluha stisknutí klávesy z připojené externí klávesnice apod.
Průběh obsluhy přerušení Příchod přerušení musí být povolen instrukcí ENABLE INTERRUPT V okamžiku vyvolání přerušení se dokončí aktuálně rozpracovaná instrukce a na zásobník se uloží návratová adresa a Z, C příznaky. Do programového čítače se vždy vnutí adresa 3FF (poslední položka v paměti programu) Na této adrese je obvykle skok na adresu obslužné rutiny Provede se obsluha přerušení Provede se návrat pomocí instrukce RETURNI Přerušovací systém
Obsah • PicoBlaze • Základní informace • Architektura procesoru • Instrukční sada • Přerušovací systém • Vstupně/Výstupní rozhraní • Příklad použití procesoru • MicroBlaze • PowerPC
Vstupně/výstupní porty • Vstupně/výstupní porty • Až 256 portů, které se rozlišují pomocí signálu PORT_ID[7:0] • Vhodné pro komunikaci s zařízeními mimo procesor • Vstupní porty • Při vykonávání instrukce INPUT se nastaví na výstupu procesoru signál READ_STROBE a na PORT_ID se vystaví adresa čteného porty • Data se načtou ze vstupu PORT_IN, který je multiplexován při použití více portů (PORT_ID řídí vstupní multiplexor)
Vstupně/výstupní porty • Výstupní porty • Při vykonávání instrukce OUTPUT se nastaví na výstupu procesoru signál WRITE_STROBE a na PORT_ID se vystaví adresa portu, na který se zapisuje, zapisovaná data se vystaví na výstup PORT_OUT • Při použití více výstupních portů je potřeba použít dekodér na výstupu, který rozlišuje komu zapisovaná data náleží
Obsah • PicoBlaze • Základní informace • Architektura procesoru • Instrukční sada • Přerušovací systém • Vstupně/Výstupní rozhraní • Příklad použití procesoru • MicroBlaze • PowerPC
Zdrojový kód procesoru v jazyce VHDL nebo Verilog je volně dostupný na WWW stránkách firmy Xilinx Procesor lze jednoduše instancovat v jazyce VHDL jako komponentu KCPSM3 K procesoru je připojena paměť programu (viz. deklarace v pravé části) Zdrojový VHDL kód paměti programu včetně jejího obsahu je vygenerován kompilátorem na základě kódu v assembleru procesoru PicoBlaze Příklad VHDL: Deklarace procesoru component KCPSM3 port ( address : out std_logic_vector( 9 downto 0); instruction : in std_logic_vector(17 downto 0); port_id : out std_logic_vector( 7 downto 0); write_strobe: out std_logic; out_port: out std_logic_vector( 7 downto 0); read_strobe : out std_logic; in_port : in std_logic_vector( 7 downto 0); interrupt : in std_logic; interrupt_ack: out std_logic; reset : in std_logic; clk : in std_logic ); end component; Příklad VHDL: Deklarace paměti programu component prog_rom port ( address : in std_logic_vector( 9 downto 0); instruction : out std_logic_vector(17 downto 0); clk : in std_logic ); end component; Použití procesoru – instance ve VHDL
Použití procesoru – kompilátor KCPSM3 • Vstup: zdrojový soubor v assembleru <filename>.psm • Výstup: • zdrojový soubor ve VHDL s entitou a obsahem pamětí programu • alternativní obsah paměti programu v decimálním nebo hexadecimálním tvaru • ladící informace
Simulátor pBlazIDE je volně šiřitelný, dostupný na adrese: http://www.mediatronix.com/pBlazeIDE.html Podporuje: krokování, breakpointy, snadnou změnu obsahu vnitřních registrů nebo obsahu pamětí, simulace I/O portů skrze načítání/ukládání dat z/do textových souborů Ideální pro rychlý vývoj aplikací (Modelsim není pro lazení instrukčního programu vhodný) Syntax assembleru v prostření pBlazeIDE se liší od původní definice, ale lze použít Import do této nové syntaxe Použití procesoru – simulátor pBlazIDE
Obsah • PicoBlaze • MicroBlaze • Základní vlastnosti • Architektura procesoru • Instrukční sada • Přerušovací systém • Rozhraní procesoru • PowerPC
Základní vlastnosti • 32-bitový procesor s podporou pro zpracování dat o velikosti 32, 16 nebo 8 bitů • Zahrnuje podporu pro instrukční a datovou cache • Procesor obsahuje množství uživatelem volitelných částí, například: FPU jednotku, barrel shifter, násobičku, děličku, podporu pro instrukční/datovou cache • V závislosti na zvolených částech zabírá 900 až 2600 LUTs (FPGA hradlové pole obsahují až desítky tisíc LUTs) • Pracovní frekvence 100 až 200 MHz podle použitého FPGA čipu • Výkonnost 92 až 166 DMIPS • Programy pro procesor MicroBlaze lze psát v jazyce C a kompilovat a ladit s použitím GNU nástrojů
Obsah • PicoBlaze • MicroBlaze • Základní vlastnosti • Architektura procesoru • Instrukční sada • Přerušovací systém • Rozhraní procesoru • PowerPC
Architektura procesoru • Blokové schéma:
Architektura procesoru • Registry procesoru • 32 registrů pro obecné použití, některé z těchto registrů mají speciální význam • R0 – má vždy hodnotu 0 • R14 – použit pro návratovou adresu z přerušení • R16 – použit pro návratovou adresu z chyby • R17 – použit pro návratovou adresu z vyjímky • 5 speciálních registrů, které nejsou přístupné programem, ale jejich obsah lze nahrát do registrů pro obecné použití pomocí instrukcí MFS/MTS • PC – Program Counter • MSW – Machine Status Word (obsahuje Carry, Interrupt Enable, Exception Enable, Division by Zero apod.) • EAR – Exeption Address Register • ESR – Exeption Status Register • FSR – Floating Point Status Register
Architektura procesoru • Zřetězené zpracovaní • Probíhá ve třech stupních: Fetch, Decode, Execute • Většina instrukcí potřebuje ve fázi vykonávaní 1 takt hodin, výjimečně 3 takty • Zpoždění mohou způsobovat např. čtení dat nebo instrukcí z vnějších pamětí. Z toho důvodu nabízí MicroBlaze implementaci prefetch bufferu - předčítání instrukcí, redukce zpoždění • Skokové instrukce se zpravidla zpracovávají 3 takty, neboť při provedení skoku je nutné zrušit rozpracované instrukce ve stupních Fetch a Decode. Z tohoto důvodu MB podporuje tzv. zpožděné skoky, kdy je povoleno dokončení instrukce hned za instrukcí skoku
Architektura procesoru • Paměťový prostor (paměť programu a dat) • Hardwardská architektura, 32 bitů, až 4GB paměti • Podpora instrukcí 32, 16 a 8 bitů, přístupy musí být zarovnané • MB nerozlišuje prostor pro paměť a I/O • Pro připojení instrukční a datové paměti podporuje MB 3 typy paměťových rozhraní: • Local Memory Bus (LMB) – přepokládá připojení lokálních BlockRAM paměti k procesoru, jednoduchý protokol • On-chip Peripheal Bus (OPB) – standard od firmy IBM pro připojení komponent na čipu, složitější protokol • Xilinx Cache-Link (XCL) – rozhraní zaměřené pro načítání dat do cache pamětí
Architektura procesoru • Instrukční cache • Podporu pro načítání instrukcí do cache lze zapnout/vypnout podle požadavku uživatele (je vhodné použít, pokud se například program načítá z externí paměti programu připojené k FPGA. • Pro uložení instrukcí do cache paměti lze použít rozhraní OPB (IBM) nebo CacheLink (Xilinx) • Uživatel si může paměť rozdělit na část, kterou lze uložit do cache a část, kterou nelze uložit do cache. Dále se může nastavit velikost cache paměti 2-64kB a automaticky se vygeneruje příslušný obvod složený z BlockRAM pamětí • Používá se jednocestná cache (viz. obrázek)
Architektura procesoru • Příklad: Pro zvolenou oblast cache-ovatelné paměti o velikosti 64kB a velikost cache paměti 4kB se použije spodních 12 bitů adresy instrukce (10 bitů pro adresaci slova, 2 bity nevyužity) pro adresaci cache paměti a horních 4 bity se vyčlení pro TAG. Z pohledu zdrojů se využijí 2xBRAM paměti pro „Instruction BRAM“ a 1xBRAM pro „Tag BRAM“ • Algoritmus pro načítání dat do cache je velmi jednoduchý: (1) pokud je zadaná položka v cache, použije se (2) v opačném případě se musí načíst z externí paměti • Podle typu rozhraní (OPB, XCL) se načtou při výpadku cache až 4 nová slova • Datová cache • Pracuje podobně jako instrukční cache • Při zápisu dat se navíc používá režim Write-Through, tedy data se při zápisu do cache současně zapíší také do paměti, aby byla zajištěna koherence dat
Architektura procesoru • Floating Point Unit (FPU) • Založena na standardu IEEE 754 • Podporuje pouzejednoduchou přesnost (velikost slova je 32-bitů), včetně definice nekonečna, NaN a nuly • Implementuje operace: sčítání, odčítání, násobení, dělení a porovnání • Při operacích se používají běžné registry, není potřeba speciálních FPU registrů • Formát slova:
Obsah • PicoBlaze • MicroBlaze • Základní vlastnosti • Architektura procesoru • Instrukční sada • Přerušovací systém • Rozhraní procesoru • PowerPC
Instrukční sada • Instrukce mají velikost 32 bitů • Rozlišují se dva typy instrukčních slov • Typ A: Instrukce s registrovými operandy • Typ B: Instrukce s přímím operandem • Pro instrukce s přímím operandem je operand tvořen pouze 16-ti bity. Rozšíření na 32-bitový operand je možné dvěma způsoby: • Instrukce doplní horních 16 bitů nulami nebo rozšíří znaménko, • Před instrukcí s přímím operandem se použije speciální instrukce IMM, která do pomocného registru načte horních 16 bitů, které se pak použijí ve spojení s následující instrukcí
Instrukční sada • Aritmetické instrukce • ADD, RSUB, DIV, MUL, CMP • Logické instrukce • AND, ANDN, OR, XOR • Posuny a rotace • BS (Barell Shifter), SRA, SRC, SRL • Skokové instrukce • BR, BEQ, BNE, BGE, BGT, BLE, BLT • Floating Point instrukce • FADD, FRSUB, FMUL, FDIV, FCMP • Instrukce pro přesun dat • GET, PUT – čtení/zápis do Fast Simplex Link rozhraní • L[B,H,W], S[B,H,W] – Load/Store (Byte, HalfWord, Word) • MFS, MTS – přesun ze speciálních registrů do registrového pole • Instrukce pro návrat z podprogramu • RT[BR,ID,ED,SD]- návrat z chyby, přerušení a podprogramu
Obsah • PicoBlaze • MicroBlaze • Základní vlastnosti • Architektura procesoru • Instrukční sada • Přerušovací systém • Rozhraní procesoru • PowerPC
Přerušovací systém • MB podporuje následující hierarchii přerušení: • Reset (vyvoláno nastavením externího signálu) • Hardwarové výjimky (např. neplatná instrukce, nezarovnaný přístup, dělení nulou, výjimka od FPU, apod, návratová adresa je uložena v R17) • Nemaskovatelné chyby • Chyby (vyvoláno nastavením externího signálu procesoru, návratová adresa je v R16) • Přerušení (MB podporuje jedno externí přerušení, může být povoleno/zakázáno, návratová adresa je v R14) • Uživatelský vektor přerušení (vyvoláno instrukcí BRAILD) • Tabulka vektorů těchto šesti přerušení je umístěna na začátku instrukční paměti a obsahu skokové instrukce na příslušné rutiny obsluh přerušení • Při RESETu procesoru se implicitně začne provádět program od adresy 0x0
Obsah • PicoBlaze • MicroBlaze • Základní vlastnosti • Architektura procesoru • Instrukční sada • Přerušovací systém • Rozhraní procesoru • PowerPC
Rozhraní procesoru • MB je podporuje následující rozhraní • Local Memory Bus (LMB) • On-Chip Peripheral Bus (OPB) • Fast Simplex Link (FSL) • Xilinx Cache-Line (XCL)
Velmi jednoduché rozhraní pro připojení BlockRAM pamětí Protokol při zápisu / čtení: Nejprve se vystaví adresa společně se signálem Address Strobe Dále se vystaví signál Write_Strobe nebo Read_Strobe v případě čtení. V případě zápisu se vystaví data. V případě čtení se data očekávají s příchodem signálu Ready Podpora Byte Enable – lze zapisovat jednotlivé bajty Číst lze v každém taktu jedno slovo, zapisovat lze ale pouze rychlostí jedno slovo za dva takty Local Memory Bus (LMB) rozhraní Obr.: Zápisová transakce Obr.: Čtecí transakce
On-chip Peripheral Bus (OPB) rozhraní • Standard od firmy IBM, adresová sběrnice o velikosti až 64bitů, datová sběrnice o velikosti 32 nebo 64 bitů (podporuje také přístupy pro 8 nebo 16 bitů) • Plně synchronní sběrnice, podporuje Master-Slave komunikaci. Masterů může být připojeno na sběrnici více, přidělení mezi Mastery řeší centrální arbiter, MB se chová jako Master • Složitější protokol: Při komunikaci musí nejprve Master požádat o sběrnici, arbitr sběrnici přidělí a poté probíhá operace čtení / zápisu • Příklad: zapojení MB
Fast Simplex Link (FSL) rozhraní • MB podporuje speciální rozhraní FSL, které lze využít pro čtení / zápis hodnot mezi registrovým polem a externím zařízením např. uživatelským koprocesorem (viz obrázek) • Čtecí a zápisové rozhraní je ve velice podobné těm, které se používá u FIFO komponent. Při zápisu se rozlišují datová nebo řídící slova pomocí signálu CONTROL • Zápisové rozhraní tvoří signály: WRITE, DATA(31:0), CONTROL, FULL • Čtecí rozhraní tvoří signály: READ, DATA(31:0), CONTROL, EXISTS • Zápisové / Čtecí operace se provádějí instrukcí PUT / GET
Fast Simplex Link (FSL) rozhraní • Podporuje blokující a neblokujícírežim • Při blokujícím režimu je procesor pozastaven v případě nedostupných dat nebo zaplněné výstupní linky • Při neblokujícím procesor zapisuje/čte bez ohledu na FULL a Exists signály a pokud nejsou data k dispozici nastaví příznak Carry • Pro čtení i zápis jsou potřeba 2 hodinové takty • Podporuje až 8 FSL linek
Lze efektivně použít pro nahrávání dat z externích pamětí do cache Rozhraní XCL odpovídá přesně rozhraní FSL s tím, že se předpokládá, že FSL kanály mohou byt připojeny mezi řadičem paměti a MB a nebo mohou být implementovány uvnitř řadiče paměti (viz. obrázek) Při načítání instrukcí nebo data z externích pamětí se přečtou vždy čtyři slova Zápis funguje po slovech v režimu Write Through, je nutné poslat za sebou nejprve adresu a poté data Xilinx Cache-Link (XCL) rozhraní
Podpůrné nástroje • Ladění přímo v hardware • Procesor lze ladit připojením MB ke komponentě Xilinx Microprocesor Debug Tool (MDM), která je dále připojena k JTAG rozhraní • Podpora pro lazení zahrnuje: • konfigurovatelný počet hardwarových breakpointu, libovolný počet softwarových breakepointů • externí řízení procesoru jako je: zastavení, reset nebo krokování • čtení a zápis do registrového pole a speciálních registrů procesoru (kromě zápisu do ESR a EAR) • zápis do instrukční a datové cache • podpora více procesoru
Obsah • PicoBlaze • MicroBlaze • PowerPC • Základní vlastnosti • Architektura procesoru • Instrukční sada • Rozhraní procesoru
Základní vlastnosti • Vestavěný 32-bitový procesor PowerPC 405 dostupný v FPGA čipech s technologií Virtex II Pro nebo Virtex 4 • Datová sběrnice 32 bitů, adresová sběrnice 64-bitů (načítají se dvě instrukce v jednom taktu) • Procesor nepodporuje 64-bitové operace a Floating Point operace • Pracovní frekvence dosahuje až 400 MHz podle typu FPGA • 1-2PowerPC procesory na čipech s technologií Virtex II Pro • Jedná se o variantu od firmy IBM určenou pro vestavěné aplikace. Splňuje specifikaci UISA (User Instruction Set Architecture) a částečně také splňuje i ostatní specifikace (VEA – Virtual Enviroment Architectrue, OEA – Operating System Architecture) • Podpora uživatelského a chráněného režimu (pro operační systém) procesoru • Podpora virtuální paměťového prostoru (režim stránkování)