Conception et exploitation des processeurs Structure du cours Conception et exploitation des processeurs Chargé de cours : Frédéric Pétrot C1 Présentation du projet CEP et rappels de VHDL Chaîne de compilation et assembleur MIPS Conventions pour les appels de fonctions Gestion des interruptions C2 C3 C4 Équipe pédagogique : Alban Bourge, Stéphane Mancini, Claire Maiza, Luc Michel, Olivier Muller (resp.), Sebastien Viardot Année universitaire 2013-2014 2 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs Introduction Introduction Plan Introduction 1 Introduction 2 De ... à ... 3 Processeur 4 Fournitures et objectifs 5 VHDL des périphériques simples : LED, boutons 6 Description structurelle des périphériques complexes : carte VGA, clavier, ... 7 Description comportementale Objectif : Conception d’un ordinateur minimaliste Comprenant : un processeur de la mémoire des périphériques moins simples : 7-segments, timer, ... 3 / 38 4 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs Introduction Introduction Introduction Introduction Comment ? Challenge, ... Conception du processeur ISA : MIPS R3000 stratégie de conception : PC/PO langage de conception : VHDL sur les cartes Spartan 3 de Xilinx Notez bien : on ne part pas d’une feuille blanche, ... Conception de l’environnement utilisation de blocs existants : mémoire par ex. conception de périphériques : VHDL utilisation d’un « bus » permettant la connexion des composants 5 / 38 Conception et exploitation des processeurs 6 / 38 Conception et exploitation des processeurs De ... à ... De ... à ... Plan Structure initiale 1 Introduction 2 De ... à ... 3 Processeur 4 Fournitures et objectifs 5 VHDL 6 Description structurelle 7 Description comportementale 7 / 38 8 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs De ... à ... De ... à ... Quelques précisions importantes Structure finale Mémoire RAM synchrone : ce n’est pas un bloc combinatoire ! Positionne addr => datain disponible au cycle suivant Positionne addr/dataout/we=1 => dataout échantillonné clk " Comportement registre, toujours lisible a a. sans lecture/écriture simultanée Impact vital ! sur la lecture de l’instruction à exécuter (ifetch) positionner $pc dans un état, écrire $ir dans le suivant sur la lecture de la donnée lors d’un lw positionner ad dans un état, écrire $rt dans le suivant 9 / 38 Conception et exploitation des processeurs 10 / 38 Conception et exploitation des processeurs De ... à ... Processeur Quelques précisions Plan Bus pour accès différents composants : principes 1 Introduction 2 De ... à ... bus décode adresses pour calcul bus_ce(i) et bus_we(i) (mutuellement exclusifs) 3 Processeur mem_dataout échantillonné par composant avec bus_ce(i) = 1 et bus_we(i) = 1 sur clk " 4 Fournitures et objectifs 5 VHDL processeur positionne mem_addr/mem_we=0/mem_ce=1 6 Description structurelle sur clk ", composants produisent bus_datai(i) 7 Description comportementale Écriture combinatoire : processeur positionne mem_addr/mem_dataout/mem_we=1/mem_ce=1 Lecture séquentielle : bus utilise ce(i) du cycle précédent pour choisir quel signal produire sur mem_datain 11 / 38 12 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs Processeur Processeur Processeur Rappel des formats Rappel des caractéristiques globales de l’architecture : bus de données et d’adresse sur 32 bits Où récupérer l’information dans l’instruction registre 5 bits dans l’instruction taille de l’instruction : 32 bits ISA 3-adresses 32 registres opérandes des instructions, notés $0 à $31 immédiat 5 bits dans l’instruction, pour les décalages 16 bits dans l’instruction, différentes interprétations possibles 26 bits dans l’instruction, pour les sauts inconditionnels indirect registre (+ déplacement) registres $1 à $30 : usage général registre $0 : vaut toujours 0 registre $31 : contient adresse de retour de fonction (imposé par 2 instructions) registre pc : adresse de l’instruction suivante 5 bits pour identifier le registre + 16 bits pour la constante relatif à pc (2 cas) registre ir : instruction en cours d’exécution registres hi et lo : résultat multiplication ou division entière non demandés en CP, utilisés en EP 13 / 38 Conception et exploitation des processeurs 14 / 38 Conception et exploitation des processeurs Processeur Processeur Processeur Processeur Partie opérative Debug : $28 toujours visible (par morceau) sur les LEDs 15 / 38 16 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs Processeur Fournitures et objectifs Processeur Plan Partie contrôle Etats Init Waitfetch Fetch Decode LUI Opérations PC 0x0 Emission de PC sur le bus d’adresse IR mem[PC ] PC PC + 4, décodage de IR RD IR15···0 ||016 1 Introduction 2 De ... à ... 3 Processeur 4 Fournitures et objectifs 5 VHDL 6 Description structurelle 7 Description comportementale 17 / 38 Conception et exploitation des processeurs 18 / 38 Conception et exploitation des processeurs Fournitures et objectifs Fournitures et objectifs Fournitures Objectifs Partie Contrôle interface complètement spécifiée (sauf extensions) Séance 1 registre d’état 2 squelette fonction transition et génération Partie Opérative 3 interface complètement spécifiée comportement complet donnée sauf en ce qui concerne les interruptions (dernière séance) 4 Divers outils de développement croisés pour MIPS : asm, cc, ld, objdump, ... base de tests sur site web validant les étapes 5 Jackpot 19 / 38 Instruction typique Etats : fetch, decode,... Inst. : ORI, LUI Programme : Afficher valeur sur LED ADDU SLL Programme : Compteur sur LED ou Programme : Chenillard minimaliste sur LED J BEQ JAL Programme : Chenillard à motif (rotation) ou Programme : Multiplication Egyptienne LW, SW SLT Système : VGA Programme : tracé de droite “bresenham” PO : interruption 1 source ERET Programme : démonstration d’interruption Jouer à MIPS invader Famille SUBU, NOR, AND, XOR OR, ANDI, XORI,ADDI, ADDIU SRL, SRA, SLLV, SRAV, SRLV JR BNE, BLEZ, BGTZ, BGEZ, BLTZ JALR, BLTZAL, BGEZAL SLTI, SLTU, SLTIU 20 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs Fournitures et objectifs Fournitures et objectifs Objectifs Bon courage ! http://www.ponggame.org/ À faire 1 En premier lieu lire le cahier des charges complètement une première fois 2 Ensuite faire les étapes dans l’ordre imposé choisir quelques extensions en fonction de vos objectifs et vitesse de progression Vérification et suivi 1 faire des tests minimaux pour valider par vous même l’implantation 2 outil de validation web fourni mais limité à 3 essais par séance 21 / 38 Conception et exploitation des processeurs 22 / 38 Conception et exploitation des processeurs VHDL VHDL Plan VHDL 1 Introduction 2 De ... à ... 3 Processeur 4 Fournitures et objectifs 5 VHDL 6 Description structurelle 7 Description comportementale VHDL : VHDL is a Hardware Description Language Descriptions synthétisables structurelles comportementales flot de données séquentielles Les descriptions peuvent ne pas être réalisables en matériel ! 23 / 38 24 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs Description structurelle Description structurelle Plan Description structurelle De base : Déjà vue moult fois 1 Introduction 2 De ... à ... 3 Processeur 4 Fournitures et objectifs 5 VHDL 6 Description structurelle 7 Description comportementale entity BOX is port(A, B, C : in std_logic; D : out std_logic); end BOX; architecture STRUCTURAL of BOX is signal S1 : std_logic; component XOR2 port(I0, I1 : in std_logic; O : out std_logic); end component; component AND2 port(I0, I1 : in std_logic; O : out std_logic); end component; begin BLOC1 : XOR2 port map(B, A, S1); BLOC2 : AND2 port map(I0=>C, I1=>S1, O=>D); end STRUCTURAL; Ou plus aisément : D <= C and (A xor B); 25 / 38 Conception et exploitation des processeurs 26 / 38 Conception et exploitation des processeurs Description comportementale Description comportementale Plan Description comportementale Exprime un comportement séquentiel ou concurrent 1 Introduction 2 De ... à ... 3 Processeur 4 Fournitures et objectifs 5 VHDL 6 Description structurelle 7 Description comportementale Séquentiel processus, avec liste de sensibilité process(i0, i1, sel) ... instructions similaires à celles d’Ada : instructions conditionnelles : if, case boucles : loop, for, while variables internes au processus x := y; affecte immédiatement y dans x Concurrent affectations hors de tout processus : a <= b xor c; instructions spécifiques : 27 / 38 sélection combinatoire : with ... select ..., when ... else ... 28 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs Description comportementale Description comportementale Description comportementale Description comportementale Notion fondamentale : l’assignation notée <= Assignation dite postée <= prend effet lorsque tous les membres de droite ont été évalués a <= b; b <= a échangent les contenus de a et b Temps de l’évaluation = -cycle Attention ! Production de matériel lors de la synthèse ifs produisent des multiplexeurs, cases produisent des décodeurs, ... D <= C and peut s’écrire X <= A xor D <= C and ou encore D <= C and X <= A xor loop, for, while produisent autant d’éléments que d’itérations de boucles, ... Si cœur de boucles complexes, alors beaucoup de matériel (A xor B); B; X; X; B; Assignation ré-évaluée si événement sur membre de droite => Comportement idem portes logiques 29 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs Description comportementale Description comportementale Description comportementale Exemple : MUX 1 parmi 4 Notion fondamentale : liste de sensibilité process(a, b, c, d, ...) : process ré-évalué si événement sur signal de la liste de sensibilité Tous signaux lus dans le process ) processus combinatoire Typique pour fonction de transistion/generation de machines d’états process(CUR_STATE, A, B, C, D) begin case CUR_STATE is when S0 => if A ... then NXT_STATE <= S1 else NXT_STATE <= S2 end if; when S1 => ... end case; end process; 30 / 38 Quelques signaux lus dans le process ) processus mémorisant entity DFF is ... end DFF; architecture SEQ of dff is begin process(ck) begin if rising_edge(ck) then q <= d end if; end process; end SEQ; 31 / 38 Séquentiel Concurrent architecture SEQ of MUX is begin process(I0, I1, I2, I3, SEL) begin case SEL is when 0 => O <= I0; when 1 => O <= I1; when 2 => O <= I2; when others => O <= I3; end case; end process; end SEQ; architecture CUR of MUX is begin with SEL select O <= I0 when 0, I1 when 1, I2 when 2, I3 when others; end CUR; Note : affectation concurrente ⌘ process avec membres de droite dans liste de sensibilité et affectant membre de gauche 32 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs Description comportementale Description comportementale Autres éléments mémorisants Reset synchrone entity DFF is ... end DFF; architecture SEQ of dff is begin process(ck) begin if rising_edge(ck) then if reset = ’1’ then q <= ’0’; else q <= d end if; end process; end SEQ; Types et attributs Reset asynchrone, à éviter, en particulier sur FPGA entity DFF is ... end DFF; architecture SEQ of dff is begin process(ck, reset) begin if reset = ’1’ then q <= ’0’; elsif rising_edge(ck) then q <= d end if; end process; end SEQ; Définition de types dérivés subtype w32 is std_logic_vector(31 downto 0); type w32_vec is array (natural range <>) of w32; Définition de types énumérés type RF_sel_type is ( RFS_RD, -- 00 RFS_RT, -- 01 RFS_31 -- 10 ); Attention ! Vérifiez que les affections de q sont toutes conditionnées par le même front d’horloge, sinon latches => pas bon ! 33 / 38 Conception et exploitation des processeurs 34 / 38 Conception et exploitation des processeurs Description comportementale Description comportementale Types et attributs Types et attributs Définition d’agrégats Attibuts : chaque élémént connaît des choses sur lui-même (introspection) type MMIPS_PO_status is record IR : w32; s,z,c : boolean; it : boolean; end record; subtype TRIBYTE is std_logic_vector(23 downto 0); type VIDEO_MEM is array(positive range <>, positive range <>) of TRIBYTE; variable SCREEN : VIDEO_MEM(1 to 640, 1 to 480); variable PIXEL : TRIBYTE; ... PIXEL <= VIDEO_MEM(I, J); Typiquement utilisé pour simplifier l’écriture des connexions entity MMIPS_CPU_PO is port ( .... status : out MMIPS_PO_status; .... entity MMIPS_CPU_PC is port ( .... status : in MMIPS_PO_status; .... PIXEL’length PIXEL’left PIXEL’right PIXEL’range 35 / 38 : : : : 24 23 0 23 downto 0 SCREEN’range(1) SCREEN’range(2) SCREEN’right(1) SCREEN’left(2) : : : : 1 to 640 1 to 480 640 1 36 / 38 Conception et exploitation des processeurs Conception et exploitation des processeurs Description comportementale Description comportementale Fonctions Résumé Fonction : intégrées lors de la synthèse Définition function sign_extension (sub_opc : std_logic_vector(2 downto 0)) return std_logic is begin -- test opc if sign extension is required if sub_opc = "010" then return ’1’; else return ’0’; end if; end arith_sel; Langage spécifique à la production de matériel avec une sémantique du temps simulable synthétisable (sous ensemble que nous utiliserons) Utilisation cmd.ALU_sign_extend <= sign_extension(status.IR(2 downto 0)); ... cmd.ALU_sign_extend <= sign_extension(status.IR(28 downto 26)); 37 / 38 38 / 38