©Frédéric Bastien 2006 Université de Montréal 1 LISATek LISATek pour concevoir des processeurs
2 ©Frédéric Bastien 2006 Université de Montréal LisaTek Plan de la présentation Caractéristique Le codage du modèle PipelineSynthèse Génération de documentation Modèle déjà existant ConclusionRéférence
3 ©Frédéric Bastien 2006 Université de Montréal LisaTek Caractéristique publicitaire Environnement de développement intégré pour le design de processeur et la création d'outils de développement de logiciel (tools chains). Aucune expertise en conception de processeur nest requise. Diminue en nombre de mois le temps de conception de processeur.
4 ©Frédéric Bastien 2006 Université de Montréal LisaTek Caractéristique publicitaire Élimine des années de travail pour la création d'outils de développement de programme – même pour des processeurs non crée avec LISATek Garantie la compatibilité du simulateur d'instruction, des outils de création de programme et du RTL. [C'est dû au fait que tout est dérivé de la même source]
5 ©Frédéric Bastien 2006 Université de Montréal LisaTek Caractéristique publicitaire L'environnement de développement des programmes permet le développement des programmes avant la disponibilité du silicone.
©Frédéric Bastien 2006 Université de Montréal 6 Vue globale
7 ©Frédéric Bastien 2006 Université de Montréal LisaTek Autres caractéristique Précis à l'instruction ou au cycle Débuggeur inclus. Profileur inclus. Aide à la conception des instructions, des ressources et du compilateur. Peut générer l'assembleur, le linker, le HDL (VHDL ou Vérilog) synthétisable (avec certaine restriction), le compilateur C, PSP (Package Support Processor) et la documentation du jet dinstruction. Langage du modèle semblable au C.
8 ©Frédéric Bastien 2006 Université de Montréal LisaTek Le codage du modèle On définit les Ressources globales RESOURCE {...} On définit les opérations (instructions, opérandes)OPERATION{...} Les opérations main et reset sont nécessaire pour générer le simulateur.
©Frédéric Bastien 2006 Université de Montréal 9 La section RESOURCE RESOURCE{ BUS char common_bus{ ADDRTYPE(unsigned long); ADDRTYPE(unsigned long); BLOCKSIZE(8,8); BLOCKSIZE(8,8); }; };MEMORY_MAP{ BUS(common_bus), RANGE(0x0000, 0x0fff) BUS(common_bus), RANGE(0x0000, 0x0fff) -> prog_mem[(31..0)]; BUS(common_bus), RANGE(0x1000, 0x1fff) BUS(common_bus), RANGE(0x1000, 0x1fff) -> data_mem[(31..0)]; } RAM char prog_mem{ SIZE(0x1000); SIZE(0x1000); BLOCKSIZE(8,8); BLOCKSIZE(8,8); FLAGS(R|X); // Obligatoire par défaut pas X FLAGS(R|X); // Obligatoire par défaut pas X }; };
©Frédéric Bastien 2006 Université de Montréal 10 La section RESOURCE RAM char data_mem{ RAM char data_mem{ SIZE(0x1000); SIZE(0x1000); BLOCKSIZE(8,8); BLOCKSIZE(8,8); FLAGS(R|W); FLAGS(R|W); }; }; PROGRAM_COUNTER int PC; PROGRAM_COUNTER int PC; REGISTER short R[0..15]; REGISTER short R[0..15]; REGISTER unsigned short IR; REGISTER unsigned short IR; CONTROL_REGISTER short ST; bit[17] MUL_IN[0..1]; bit[17] MUL_IN[0..1]; long cycle, instruction_counter; long cycle, instruction_counter;}
11 ©Frédéric Bastien 2006 Université de Montréal LisaTek Lopération main Est lopération qui sera activée à chaque cycle. Cest elle qui doit activer les autres opérations nécessaires. Donc, elle appellera dautres opérations.
12 ©Frédéric Bastien 2006 Université de Montréal LisaTek Lopération main OPERATION main { DECLARE { INSTANCE decode; } BEHAVIOR { char tmp1, tmp2; common_bus.read(PC+1, &tmp1); common_bus.read(PC, &tmp2); IR = (((unsigned char)tmp1) << 8) | ((unsigned char) tmp2); decode(); PC += 2; }}
13 ©Frédéric Bastien 2006 Université de Montréal LisaTek Lopération reset Sers à mettre les ressources du processeur à des valeurs par défaut. Sers à initialiser le processeur au démarrage. Sert lors dune réinitialisions du processeur. Cette opération contient quune partie comportementale (behavior).
14 ©Frédéric Bastien 2006 Université de Montréal LisaTek Lopération reset OPERATION reset { BEHAVIOR { for (int i = 0 ; i < 16 ; i++) { R[i] = 0; } IR = 0; ST = 0; MUL_IN[0] = MUL_IN[1] = 0; cycle = instruction_counter = 0; PC = LISA_PROGRAM_COUNTER; }
15 ©Frédéric Bastien 2006 Université de Montréal LisaTek LISA_PROGRAM_COUNTER LISA_PROGRAM_COUNTER est une variable spécifique de LISA qui contient ladresse de début du programme qui roule sur le processeur. Cest défini à partir du fichier ELF/COFF quand le programme est chargé.
16 ©Frédéric Bastien 2006 Université de Montréal LisaTek Lopération decode OPERATION decode { DECLARE { GROUP instruction = { NOP }; } CODING AT (PC) { IR == instruction } SYNTAX { instruction } BEHAVIOR {instruction(); } }
17 ©Frédéric Bastien 2006 Université de Montréal LisaTek Lopération NOP OPERATION NOP { CODING { 0b0[16] } SYNTAX { "NOP" }// NOP BEHAVIOR { printf("Nothing to do\n"); } }
18 ©Frédéric Bastien 2006 Université de Montréal LisaTek Lopération ADD OPERATION ADD { DECLARE { GROUP src1, src2, dst = { reg16 }; } CODING { 0b0011 dst src1 src2 } SYNTAX { "ADD" ~" " dst "," src1 "," src2 } //ADD R[1],R[2],R[3] BEHAVIOR { dst = src1 + src2; } }
19 ©Frédéric Bastien 2006 Université de Montréal LisaTek reg16 OPERATION reg16 { DECLARE { LABEL index; }//LABEL variable local CODING { index=0bx[4] } SYNTAX { "R[" ~index=#U ~"]" } // R[4], index est un caractère EXPRESSION { R[index] } //index est un entier }
20 ©Frédéric Bastien 2006 Université de Montréal LisaTek Stockage de données OPERATION STR { DECLARE { GROUP address = { addr8 }; GROUP addr_mode = { direct_addressing || indirect_addressing }; INSTANCE reg16, load_addr; } CODING { 0b101 addr_mode address reg16 } SYNTAX { "STR" ~" " reg16 "," address } BEHAVIOR { load_addr(); char tmp1, tmp2; tmp1 = (reg16 >> 8) & 0x00fff; tmp2 = reg16 & 0x00ff; common_bus.write(AR+1, &tmp1); common_bus.write(AR, &tmp2); }
21 ©Frédéric Bastien 2006 Université de Montréal LisaTek Contrôle de flot de donnée OPERATION load_addr { DECLARE { REFERENCE addr_mode, address; } SWITCH (addr_mode) { CASE direct_addressing: { BEHAVIOR { AR = ((R[0] << 8) | address); } }CASE indirect_addressing: { BEHAVIOR { AR = address; } } }
22 ©Frédéric Bastien 2006 Université de Montréal LisaTek Contrôle de flot de donnée OPERATION addr8 { DECLARE { LABEL addr; REFERENCE addr_mode; INSTANCE reg16;} SWITCH (addr_mode) { CASE direct_addressing: { CODING { addr=0bx[8] } SYNTAX { ~SYMBOL("0x" addr=#X) } EXPRESSION { addr } } CASE indirect_addressing: { CODING { reg16 0bx[4] } SYNTAX { reg16 } EXPRESSION { reg16 } } } }
23 ©Frédéric Bastien 2006 Université de Montréal LisaTek Les ressources des pipelines Ajout de la ressource dans RESOURCE –PIPELINE pipe = { FD; AG; EX }; Ajout des codes dans le main: –PIPELINE(pipe).execute(); –PIPELINE(pipe).shift(); Ajout de la section ACTIVATION dans les opérations –ACTIVATION { decode }
24 ©Frédéric Bastien 2006 Université de Montréal LisaTek Pipeline opération PIPELINE(pipe).execute();PIPELINE(pipe).shift();PIPELINE(pipe).flush(); PIPELINE(pipe).stall(cycles); //default 0
25 ©Frédéric Bastien 2006 Université de Montréal LisaTek Lopération main dune pipeline OPERATION main { DECLARE { INSTANCE decode; } BEHAVIOR { char tmp1, tmp2; common_bus.read(PC+1, &tmp1); common_bus.read(PC, &tmp2); IR = (((unsigned char)tmp1) << 8) | ((unsigned char) tmp2); PIPELINE(pipe).execute(); PIPELINE(pipe).shift(); cycle += 1; } ACTIVATION { decode } }
26 ©Frédéric Bastien 2006 Université de Montréal LisaTek Les opérations dune pipeline OPERATION decode IN pipe.FD { DECLARE { GROUP instruction = { insn_memory_access || insn_no_memory_access };} CODING AT (PC) { IR == instruction } SYNTAX { instruction } BEHAVIOR { PC += 2; instruction_counter += 1; } ACTIVATION { instruction } }
27 ©Frédéric Bastien 2006 Université de Montréal LisaTek Registre de pipeline
28 ©Frédéric Bastien 2006 Université de Montréal LisaTek Registre de pipeline Évite les conflits de données. RESOURCE{… PIPELINE_REGISTER IN pipe { unsigned short instr; short pc; };…}
29 ©Frédéric Bastien 2006 Université de Montréal LisaTek Registre de pipeline PIPELINE_REGISTER(pipe_ident, stage1 / stage2 ).element PIPELINE_REGISTER(pipe_ident, stage1 / stage2 ).execute() PIPELINE_REGISTER(pipe_ident, stage1 / stage2 ).flush() PIPELINE_REGISTER(pipe_ident, stage1 / stage2 ).shift() PIPELINE_REGISTER(pipe_ident, stage1 / stage2 ).stall() PIPELINE_REGISTER(pipe_ident, stage1 / stage2 ).stalled()
30 ©Frédéric Bastien 2006 Université de Montréal LisaTek Synthèse UNIT –Les opérations assignées à une unité doivent être activées par dautres opérations. –Toutes les opérations dans lunité doivent être dans le même étage du pipeline. USES –Les interconnections de/a des ressources qui ne sont pas dans létage courant du pipeline doivent être spécifier par le mot clé USES. –Le mot-clé USES nest pas requis si on active lanalyse comportementale dans la configuration. –Elle est nécessaire seulement si lopération a une section BEHAVIOR. REGISTER –Pour agir comme un Flip-Flop utiliser le mot clé TClocked.
31 ©Frédéric Bastien 2006 Université de Montréal LisaTek Synthèse UNIT UNIT Fetch {fetch;}; UNIT AddressGeneration {load_address;}; UNIT LoadStoreBranches {LDL,LDH,LDR,STR,BC,B,BDS;}; UNIT Arithmetic {MUL,ADD, reset_branch_flag;}; USES BEHAVIOR USES ( READ src1, src2; WRITE dst; ) { dst = src1 + src2; }REGISTER REGISTER TClocked R[0..15];
32 ©Frédéric Bastien 2006 Université de Montréal LisaTek Synthèse BEHAVIOR –Une règle importante de LISATek 2.0 pour la génération de HDL est que les appelles de fonction de pipeline comme flushes et stalls doivent être appelé de la section ACTIVATION. Les fonctions de pipeline appelé dans la section BEHAVIOR sont ignoré pour la génération du code HDL. –Comme linstruction load_addr est assigné a une unité, lappel dans linstruction insn_memory_access doit être remplacer par une activation.
33 ©Frédéric Bastien 2006 Université de Montréal LisaTek Synthèse BEHAVIOR OPERATION insn_memory_access IN pipe.AG { //... BEHAVIOR { // load_addr(); } ACTIVATION { insn, load_addr } }
34 ©Frédéric Bastien 2006 Université de Montréal LisaTek Génération de documentation Si crée un processeur VLIW il faut utiliser le mots clé INSTRUCTION a la place des opérations qui on dans leur hiérarchie des instructions. Sil nest pas présent, le simulateur va utiliser la racine. Permet de documenter les instructions et les opérandes La section DOCUMENTATION peut être mise dans un IF-THEN-ELSE, SWITCH- CASE ou OPERATION
35 ©Frédéric Bastien 2006 Université de Montréal LisaTek Génération de documentation Format utilisé pour décrire une instruction. –DOCUMENTATION ( InstructionName ) { commentaire } Format utilisé pour décrire une opérandes. –DOCUMENTATION { commentaire sur une ligne}
36 ©Frédéric Bastien 2006 Université de Montréal LisaTek
37 ©Frédéric Bastien 2006 Université de Montréal LisaTek Les modèles déjà existants Il y a plusieurs modèles déjà fournis, dont tous ceux des tutoriels. Il y a des processeurs RISC à 4 étages qui sont synthétisables et dont on peut générer le compilateur C Il y a des VLIW Il y a une FFT Il y a des modèles incomplets pour partir un processeur RISC, VLIW ou RISC avec des instructions de tailles différence (8 et 16 bits)
38 ©Frédéric Bastien 2006 Université de Montréal LisaTek Conclusion LISATek semble est un produit qui rend plus facile la création dun processeur pour quelquun qui nest pas expérimenter. LISATek simplifie la création doutils de développement de logiciel. Un non expert peut créer un processeur. Mais pour avoir une bonne performance en vitesse à la synthèse, je pense quil doit bien comprendre le fonctionnement et les implémentations possibles.
39 ©Frédéric Bastien 2006 Université de Montréal LisaTek Référence LISA 2.0 Language Tutorial : The QSIP Architecture (HTML) LISA Language Reference Manual INFINEONSUCCESS.pdfLISATEKSTMSUCCESSFINAL.PDF