Jazyky pro popis architektury Masařík Karel 1
Úvod Vestavěné systémy jsou důležité ve všech odvětvích lidské činnosti v medicíně ve formě malých řídících systémů ve formě masivně distribuovaných výpočetních systémů Ve vestavěných systémech jsou užity aplikačně specifické instrukční mikroprocesory (ASIP) jednotlivé funkce HW jsou dostupné přes aplikačně specifické instrukce vývoj ASIP - podpora softwarových nástrojů (překladač, simulátor, apod.) Technologie Systém na čipu (SoC) je použita pro ASIP (integrace procesorů, pamětí a periferií na jeden čip) 2
Úvod Cena čipu velikosti mince dnes je 150 $, do 5 let 1 $ a 1 cm 3 Cena vestavěného systému je ovlivněna: cenou výroby cenou návrhu systému a softwarových nástrojů Zabýváme se druhým hlediskem Motivace je výzkum metod pro redukci času návrhu mikroprocesoru = proces návrh probíhá v několika iteračních krocích Redukce času návrhu dosažena použitím jazyků pro popis architektury umožňují automatické generování softwarových nástrojů pro vývoj ASIP 3
Softwarové nástroje pro vývoj ASIP Nástroje pro podporu vývoje procesoru a aplikace ADL model překladač asm linker simulátor dsm debugger aplikace 4
Jazyky pro popis architektury Jazyky pro popis HW (HDL) jako VHDL jsou vhodné pro modelování a simulaci HW mají nedostatky (simulace je pomalá, neobsahují některé informace jako např. syntaxe assembleru) Nevýhody jazyků HDL překonávají ADL Tři kategorie ADL jazyky zaměřené na instrukční sadu poskytují programátorovy pohled na architekturu přes popis instrukční sady Jazyky: nml, ISDL, Valen-C a CSDL 5
Jazyky pro popis architektury Jazyky zaměřené na strukturu zaměřují se na strukturální komponenty a propojení architektury procesoru výhoda: stejný popis může být použit pro syntézu a zároveň pro generování SW nástrojů jazyky: MIMOLA, AIDL Jazyky pro popis instrukční sady a struktury zároveň přemosťují mezeru mezi předchozími jazyky odstraňují nedostatky jazyků pro popis instrukční sady, které jsou příliš hrubé pro popis např. linek zřetězení pro rychlou simulaci obsahují jazyky pro popis HW příliš mnoho detailů jazyky: FlexWare, Mdes, PEAS, RADL, EXPRESSION, a LISA 6
ADL zaměřené na instrukční sadu Jsou většinou vyvíjeny s cílem vyvinout přenositelný překladač vyšších programovatelných jazyků Obsahují informaci o instrukční sadě a sekvenci instrukcí a jejich latencí Neobsahují další informace o mikro-architektuře obsahují pouze sémantiku instrukcí nml formalismus Technische Universität Berlin Navržen jednoduchý model pro simulaci: běžící stroj spustí vlákno instrukcí které jsou udržovány v paměti a adresovány pomocí čítače instrukcí Jazyk dovoluje stručný hierarchický popis mikroprocesoru v behaviorálním stylu 7
ADL zaměřené na instrukční sadu Popis instrukční sady Operace popisují instrukce Jedna nebo více operací tvoří instrukci Dva způsoby vybudování hierarchie operací: pravidla OR a AND OR seznam určitých alternativ opn alu = add sub or and AND kombinují několik částí, vyčíslených v seznamu parametrů pravidel. Deklarace parametrů se skládá z: jména a reference na jiné pravidlo opn insn(a:src, b:src, c:alu, d:dst) 8
ADL zaměřené na instrukční sadu Dva důležité atributy popisu operací: image binární representace operace syntax assemblerovský zápis operace image= 00 :: a.image syntax= add :: d.syntax obě sekce mohou obsahovat non-terminální reference na další operace Instrukční sada je vyčíslována pomocí atributové gramatiky každý element v hierarchii má několik atributů a hodnota atributů nelistových elementů může být počítána na základě hodnot atributů potomků Hlavní nedostatek jazyka: neschopnost podporovat instrukce zřetězení a jeho kontrolní mechanismy 9
ADL zaměřené na instrukční sadu Popis struktury Uložiště procesoru jsou rozděleny do třech kategorií: RAM, registr, a tranzistorové uložiště RAM a registr jsou statická uložiště, tzn. hodnota je v nich uchovávána do doby než se přepíše novou Tranzistorové uložiště uchovává obsah po určitý počet strojových cyklů Zdroje jsou identifikovány jménem, jsou označeny typem (registr. atd.) a je definována jejich velikost let wordsize = 16, type word = int(wordsize),reg R[8, word] 10
ADL zaměřené na instrukční sadu Specifikace chování Spuštění operace kompletně určuje chování stroje Stav stroje representují registry a paměti přičemž instrukce mohou být chápány jako přechodové funkce nml specifikuje chování v atributu action action = {a=b+c;c=c+1;} Zápis přenosu dat mezi registry podobný jazyku C Zápis nedovoluje popis komplexních architektur pouze povoluje jednoduché aritmetické operace, přiřazení 11
ADL zaměřené na instrukční sadu Specifikace časování Při popisu velmi jednoduchého zřetězení musí být popsáno časování HW nml neumožňuje popsat časováni současných složitých jednotek zřetězení, superskalárních procesorů apod. Čas spotřebovaný funkční jednotkou je hromaděn a vyhodnocován uložištěm, které předcházelo této jednotce všechny výpočetní operace mají trvání 0 cyklů a pouze čtení z uložiště může být zpožděno po předcházejícím zápisu několik definovaných cyklů Zpoždění přiřazeno uložišti popisuje čas strávený v dané fázi operace reg A[16, word] delay = 1 12
ADL zaměřené na instrukční sadu Nástroje generované automaticky z nml: simulátor SIGH/SIM, generátor kódu CBC generátory kódu CHESS, a simulátor CHECKER Jazyk Sim-nML modelování řídících toků a závislosti mezi instrukcemi modelování linek zřetězení (pipeline), predikce skoků a hierarchických pamětí Nevýhody generovaný simulátor je pomalý (3000 instrukcí/s) nemožnost namodelovat některá rozšíření procesoru: explicitní instrukční paralelismus (např. u Texas Instrument TMS320C6x) 13
Strukturální ADL Důležitý kompromis při návrhu ADL je stupeň abstrakce Díky rostoucí různorodosti počítačových architektur je těžké nalézt formalismus pro popis zajímavých charakteristik všech typů mikroprocesorů Obvyklá cesta pro získání vyššího stupně obecnosti je snížení stupně abstrakce Nižší úroveň abstrakce může zachytit konkrétní strukturální informace s více detaily Abstrakce RT (Register transfer) užívána pro návrh hardwaru RT specifikuje přesun a transformace dat mezi jednotkami na bází hodinových cyklů Nevýhodou strukturálních jazyků je pomalost generovaných simulátorů 14
Strukturální ADL MIMOLA Popisný hardwarový jazyk a vyšší programovací - navržen pro návrh mikro-architektury Výhoda: jediný popis může být použit pro syntézu HW, simulaci a pro účely generovaní kódu MINOLA obsahuje dvě části Hardwarová část specifikuje mikroarchitekturu ve formě netlistu komponent, komponenty jsou definovány na úrovni RT MODULE Alu (IN i1, i2: (15:0); OUT outp:(15:0)); IN ctr: (1:0) CONBEGIN outp <- CASE ctr OF 0: i1+i2 END AFTER 0; CONEND 15
Strukturální ADL Pro kompletní netlist propojení portu musí být definováno CONNECTIONS Accu.outp->alu.i1 Instrukční sada je generována z netlistu a modulu instrukčního dekodéru Pro překladač musí být dodatečně definovány např. čítač instrukcí LOCATION_FOR_PROGRAMCOUNTER PCreg; instrukční paměť LOCATION_FOR_INSTRUCTIONS IM[0..1023]; 16
Strukturální ADL Softwarová část popisuje aplikační program v syntaxi podobné PASCALu jazyk umožňuje označit proměnné jako fyzické registry a vytvářet reference na hardwarové komponenty přes volání procedur X:=Simd(y,z); Výhoda: jazyk může být použit pro syntézu, generování simulátoru instrukční sady, generování kódu a testů Nevýhoda: díky nízké abstrakci je rychlost simulátoru malá 17
Jazyky pro popis instrukční sady a struktury Syntéza architektury a generování vývojového softwaru jsou provedeny z jednoho popisu EXPRESSION Popis procesoru je cycle based Struktury obsahuji seznam sítí komponent - např. jednotky, uložiště, porty, a propojení popisující datový přenos jako je jednotka-do-uložiště, uložiště-do-jednotky Architektura zřetězení je popsána jako uspořádání jednotek zahrnují jednotlivé jednotky zřetězení, ne popis časování jednotlivý jednotek Definice operace zahrnuje operační kód, operandy 18
Jazyky pro popis instrukční sady a struktury Každá instrukce je viděna jako seznam slotů které jsou plněny operacemi Konflikty mezi instrukcemi nejsou explicitně popsány - automatické generování reservačních tabulek - specifikující konflikty EPRESSION použit pro přenositelné vývojové nástroje jako jsou kompilátory a simulátory, generování syntetizovatelného HDL kódu je možné EXPRESSION podporuje abstrakci z cílové architektury na víceúrovňové třídy modelů procesoru Proces vývoje procesoru je podporován nashromážděnými profilovacími informacemi získanými během běhu simulace a graficky zobrazenými ve vývojových nástrojích 19
Jazyky pro popis instrukční sady a struktury Language for Instruction-Set Architecture (LISA) Dřívější práce na LISE se zaměřovali hlavně na generování kompilovaných simulátorů z popisu procesoru Dnešní verze jazyka LISA zahrnuje model instrukční sady, způsob vyjádření hierarchie operací se přiblížil zápisu nml Model LISY obsahuje deklaraci zdrojů a popis operací HW Zjednodušení modelu v ISAC (Instruction Set Architecture C) Deklarace zdrojů Deklarované zdroje udržují stav programovatelné architektury ve formě uložené datové hodnoty Sekci zdrojů definuje všechny zdroje modelu LISA jako je zřetězené zpracování, paměť, registry atd. 20
Jazyky pro popis instrukční sady a struktury RESOURCE { PROGRAM_COUNTER int pc; CONTROL_REGISTER int ir; REGISTER char areg [0..15]; PIN int status_bus; } PIPELINE pipe = { FE; DC; EX; WB }; PIPELINE_REGISTER IN pipe { int instruction_register; short program_counter; REGISTER bit[24] src1, src2, dest; } 21
Jazyky pro popis instrukční sady a struktury MEMORY char memory1 { BLOCKSIZE (8, 8); SIZE (0x800000); }; MEMORY int memory2 { BLOCKSIZE (32, 32); SIZE (0x100000); }; MEMORY_MAP default { RANGE(0x000000,0x7fffff) -> memory1 [(31..0)]; RANGE(0x800000,0x7bffff) -> memory2 [(31..2)]; }; 22
Jazyky pro popis instrukční sady a struktury Operace Operace je základní objekt v jazyku LISA Obsahuje kolekci popisů různých vlastností systému Operace je popsána v následujících sekcích Sekce DECLARE - lokální deklarace identifikátorů, skupin operací a odkazů na jiné operace Sekce CODING popisuje binární obraz instrukčního slova Sekce SYNTAX - mnemonika a jiné syntaktické komponenty jazyka assembleru jako jsou operandy a prováděcí módy Sekce BEHAVIOR a EXPRESSION - komponenty modelu chování V sekci ACTIVATION je definováno časování jiných operací vzhledem k popisované operaci 23
Jazyky pro popis instrukční sady a struktury Odkazy Skupina je lokálně deklarovaná v jedné operaci, nelze ji použít v jiné operaci odkaz aby bylo možné použít skupinu víckrát operace A group operace B operace E operace F operace C operace D 24
Jazyky pro popis instrukční sady a struktury OPERATION addr { DECLARE {LABEL position;} CODING {position=0bx[16]} SYNTAX {position=#u } EXPRESSION {position} } OPERATION load { DECLARE { GROUP dest = { rega regb }; INSTANCE addr; } CODING {0b0100101011 addr dest } SYNTAX { dest "=" "DM(" addr ")" } BEHAVIOR { dest=memory1[addr]; } } 25
Vyšší programovací jazyky jako ADL Vedle ADL je možné použít pro popis architektury HLL C++ nebo UML objektový model mikroprocesoru UML získává na významu v komunitě vestavěných systémů plynulý přechod mezi specifikací a realizací UML dovoluje jednoduché komponentové skládání, zkracuje se čas návrhu jednoduché modelovaní instrukčního paralelismu popř. souběžnosti více mikroprocesorů verifikace UML modelu pomocí formálních metod - Petriho sítě, pi-caculus Otázka: UML jako jazyk pro popis architektury? UMLISAC možné použití technologie MDA = PIM & PSM model 26
UMLISAC Použito UML 2.0 (lepší vyhlídky než UML-RT) UML se skládá z několika typů diagramů - UMLISAC = diagram tříd, stavů a rozmístnění Důležité prvky UML2 složená třída a její porty (vstupní/výstupní rozhraní) modelování zdrojů mikroprocesoru profily, popř. tzv. Tag values definování dodatečných informací Marking model = transformace modelu UMLISAC změna pohledu na model seskupování funkčních jednotek do skupin Skupina určuje kódovaní skupiny instrukcí a jejich assemblerovskou syntaxi 27
UMLISAC: model struktury Core v liw_instr v liw_instr_t v liw_instr v liw_instr_t 1 dec1:d ec oder ID:int=0x1 code(obj:v oid *):v oid code():v oid set_dest():v oid set_src2():v oid set_instr():v oid fra1 addr_t fra2 addr_t fra3 addr_t opcode aa addr_t ab addr_t ac addr_t 1 rf 1:R F size:int=4 ra int_t rb int_t wc int_t a int_t b int_t x int_t opdc ode 1 alu1: ALU ID:int=0x1 group: group_t =0x1 plus():v oid mul():v oid minus():void accu ac cu_t c ac cu_t opcode_t opcode_t 28
UMLISAC: model chování ISACOP = add [opcode==0x1] [opcode==0x02] [opcode==0x3] add plus/x=a+b sub minus/x=a-b /t=t+1 x_sub minus/accu=a-b /t=t+1 x_add d=accu plus/c+d /t=t+1 /t=t+1 29
UMLISAC: model chování INSTR set_instr[id==0x1]/codeinit(vliw_instr) set_instr[id=0x2]/codeinit(vliw_instr+sizeof(instr_t)) GROUP ISACGATTR = 2 [ginstr==0x1] OP1 code/code(opcode,true) DST1 code/code(dest) set_dest[dest==1]/fra3=1 set_dest[dest==0]/fra3=2 code/code(ginstr) REG1 code/code(fra1) set_src2/fra2=1 [ginstr==0x2] ISACGR = true REG2 code/code(fra1) set_src2/fra2=1 OP2 code/opcode(opcode,true) / DST2 set_dest/fra3=fra1 30
UMLISAC: Algoritmus vytvoření překladové gramatiky Seskup instance tříd (komponenty) podle ID skupin; urči minimální šířku datového typu pro skupinu, operační kód instrukce a identifikaci komponent Nalezni přechody které definují počátek kódování skupiny (tag ISACGR) (komponenta instrukčního dekodéru) Kódování skupiny je definováno implicitně sekvencí stavů, ve kterých se volá funkce code; assemblerovská syntaxe skupiny je definovaná explicitně definovaným pořadím stavů (pořadí definováno v ISACGATTR tagu) Vytvoř překladové gramatiky (kódovací a assemblerovská) obě gramatiky jsou LR při provádění nejpravější derivace v jedné gramatice se generuje výstupní řetězec pomocí druhé gramatiky, ve kterém se každý nonterminál vyskytuje maximálně jednou 31
UMLISAC: Příklad překladové gramatiky <g1> -> 0x1 <fra1><ops><dest> <g1> -> 01 <ops><dest><fra1> <ops> -> <fu_id><op1> <ops> -> <fu_id><op1> <fu_id>-> 0x1 <fu_id> -> 01 <op1> -> add <op1> -> 01 <fra1> -> <fra1> -> <dest> -> <dest> -> -> ax -> 00 -> bx -> 01 vstup ax add bx 32
UMLISAC: Příklad překladové gramatiky <g1> -> 0x1 <fra1><ops><dest> <g1> -> 01 <ops><dest><fra1> <ops> -> <fu_id><op1> <ops> -> <fu_id><op1> <fu_id>-> 0x1 <fu_id> -> 01 <op1> -> add <op1> -> 01 <fra1> -> <fra1> -> <dest> -> <dest> -> -> ax -> 00 -> bx -> 01 ax add bx 00 33
UMLISAC: Příklad překladové gramatiky <g1> -> 0x1 <fra1><ops><dest> <g1> -> 01 <ops><dest><fra1> <ops> -> <fu_id><op1> <ops> -> <fu_id><op1> <fu_id>-> 0x1 <fu_id> -> 01 <op1> -> add <op1> -> 01 <fra1> -> <fra1> -> <dest> -> <dest> -> -> ax -> 00 -> bx -> 01 <fra1> <fra1> ax add bx 00 34
UMLISAC: Příklad překladové gramatiky <g1> -> 0x1 <fra1><ops><dest> <g1> -> 01 <ops><dest><fra1> <ops> -> <fu_id><op1> <ops> -> <fu_id><op1> <fu_id>-> 0x1 <fu_id> -> 01 <op1> -> add <op1> -> 01 <fra1> -> <fra1> -> <dest> -> <dest> -> -> ax -> 00 -> bx -> 01 <fra1> <fra1> ax add bx 01 00 35
UMLISAC: Příklad překladové gramatiky <g1> -> 0x1 <fra1><ops><dest> <g1> -> 01 <ops><dest><fra1> <ops> -> <fu_id><op1> <ops> -> <fu_id><op1> <fu_id>-> 0x1 <fu_id> -> 01 <op1> -> add <op1> -> 01 <fra1> -> <fra1> -> <dest> -> <dest> -> -> ax -> 00 -> bx -> 01 <fra1> <dest> <dest> <fra1> ax add bx 01 00 36
UMLISAC: Příklad překladové gramatiky <g1> -> 0x1 <fra1><ops><dest> <g1> -> 01 <ops><dest><fra1> <ops> -> <fu_id><op1> <ops> -> <fu_id><op1> <fu_id>-> 0x1 <fu_id> -> 01 <op1> -> add <op1> -> 01 <fra1> -> <fra1> -> <dest> -> <dest> -> -> ax -> 00 -> bx -> 01 <fra1> <dest> <dest> <fra1> <op1> <op1> ax add bx 01 01 00 37
UMLISAC: Příklad překladové gramatiky <g1> -> 0x1 <fra1><ops><dest> <g1> -> 01 <ops><dest><fra1> <ops> -> <fu_id><op1> <ops> -> <fu_id><op1> <fu_id>-> 0x1 <fu_id> -> 01 <op1> -> add <op1> -> 01 <fra1> -> <fra1> -> <dest> -> <dest> -> -> ax -> 00 -> bx -> 01 <fra1> <dest> <dest> <fra1> <ops> <ops> <op1> <op1> ax add bx 01 01 00 38
UMLISAC: Příklad překladové gramatiky <g1> -> 0x1 <fra1><ops><dest> <g1> -> 01 <ops><dest><fra1> <ops> -> <fu_id><op1> <ops> -> <fu_id><op1> <fu_id>-> 0x1 <fu_id> -> 01 <op1> -> add <op1> -> 01 <fra1> -> <fra1> -> <dest> -> <dest> -> -> ax -> 00 -> bx -> 01 <fra1> <dest> <dest> <fra1> <fu_id> <ops> <fu_id> <ops> 0x1 <op1> <op1> ax add bx 01 01 01 00 39
UMLISAC: Příklad překladové gramatiky <g1> -> 0x1 <fra1><ops><dest> <g1> -> 01 <ops><dest><fra1> <ops> -> <fu_id><op1> <ops> -> <fu_id><op1> <fu_id>-> 0x1 <fu_id> -> 01 <op1> -> add <op1> -> 01 <fra1> -> <fra1> -> <dest> -> <dest> -> -> ax -> 00 -> bx -> 01 <fra1> <ops> <dest> <ops> <dest> <fra1> <fu_id> <ops> <fu_id> <ops> 0x1 <op1> <op1> ax add bx 01 01 01 00 40
UMLISAC: Příklad překladové gramatiky <g1> -> 0x1 <fra1><ops><dest> <g1> -> 01 <ops><dest><fra1> <ops> -> <fu_id><op1> <ops> -> <fu_id><op1> <fu_id>-> 0x1 <fu_id> -> 01 <op1> -> add <op1> -> 01 <fra1> -> <fra1> -> <dest> -> <dest> -> -> ax -> 00 -> bx -> 01 <g1> <g1> 0x1 <fra1> <ops> <dest> <ops> <dest> <fra1> <fu_id> <ops> <fu_id> <ops> 0x1 <op1> <op1> ax add bx 01 01 01 01 00 41
UMLISAC: diagram rozmístnění melrin_fit_vutbr_cz pcmasarik_fit_vutbr_cz core1 «flow» core2 «flow» core3 «flow» «flow» 42
Postup návrhu mikroprocesorů Vývojář vytvoří UML model Provádí se verifikace modelu Z UML modelu se generuje ISAC model popř. rovnou model mikroarchitektury Vývojář generuje softwarové nástroje, popř. model mikroarchitektury Vytvoří se assemblerovský program Program je simulován a odladěn užitím simulátorů Program, softwarové nástroje, a model architektury jsou připraveny pro produkci 43
Fáze projektu Prototyp softwarových nástrojů byl dokončen, práce se soustřeďují na rozšiřování popisného jazyka a zdokonalování prototypů Běží návrh vývojového prostředí V budoucnu nutná podpora víceprocesorové simulace a cycle accurate simulátorů Implementovat transformace mezi různými modely nyní pokusy s podporou jazyka Python Zaměření se na verifikaci modelu 44