27.01.2015 Views

Corrigé - Inria

Corrigé - Inria

Corrigé - Inria

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

TD 4 41<br />

– L’instruction LEA est implémentée par l’état 11 : on concatène l’offset de page sur 9 bits<br />

avec les 7 bits de poids fort du PC, MARMX /2 = 10, puis le résultat est rangé dans le banc<br />

des registres en posant GateMARMX /1 = 1 et LD.REG /1 = 1.<br />

– L’instruction STR est implémentée par les états 13, 25 et 26 :<br />

– pour l’état 13, l’offset sur 6 bits étendu avec des zéros est ajouté au registre de base,<br />

SR1MX /2 = 01), et le résultat est rangé dans MAR en posant LD.MAR /1 = 1, GateMARMX /1 =<br />

1 et MARMX /2 = 01 ;<br />

– pour l’état 25, la valeur issue du banc des registres traverse l’ALU sans modification,<br />

ALUK /2 = 11, puis est rangé dans MDR en posant GateALU /1 = 1 et LD.MDR /1 = 1 ;<br />

– pour l’état 26 ; la valeur issue de MDR est rangée en mémoire en posant MIO.EN /1 = 1<br />

et R.W /1 = 1.<br />

Pour réaliser le microprogramme correspondant à ces 4 nouvelles instructions, le problème<br />

principal vient de la limitation des microinstructions de branchement conditionnel à un seul signal<br />

de condition. Pour détecter les opcodes de chacune des 5 instructions envisagées, on propose une<br />

structure conditionnelle en arbre.<br />

état adresse signaux de adresse LD. Gate MX divers<br />

contrôle suivante<br />

#1 00000000 01···000 00000000 ·1000001 ·1·000·· 00000000 ····0000<br />

#2 00000001 01···000 00000000 ·0100000 ·0·000·· 00000000 ····0010<br />

#3 00000010 01···000 00000000 ·0010000 ·0·100·· 00000000 ····0000<br />

#4 00000011 11···111 00001010 ·0001000 ·0·000·· 00000000 ····0000<br />

0 00000100 11···110 00010000 ·0000000 ·0·000·· 00000000 ····0000<br />

00 00000101 11···101 00001011 ·0000000 ·0·000·· 00000000 ····0000<br />

000 00000110 11···100 00001001 ·0000000 ·0·000·· 00000000 ····0000<br />

#20 (BR) 00000111 11···000 00000000 ·0000000 ·0·000·· 00000000 ····0000<br />

#35 00001000 10···000 00000000 ·0000001 ·0·000·· 11000000 ····0000<br />

#6 (ADD) 00001001 10···000 00000000 ·0000110 ·0·010·· 00000100 ····0000<br />

1 00001010 11···110 00001100 ·0000000 ·0·000·· 00000000 ····0000<br />

Stop 00001011 00···000 00000000 ·0000000 ·0·000·· 00000000 ····0000<br />

11 00001100 11···101 00001110 ·0000000 ·0·000·· 00000000 ····0000<br />

Stop 00001101 00···000 00000000 ·0000000 ·0·000·· 00000000 ····0000<br />

111 00001110 11···100 00001011 ·0000000 ·0·000·· 00000000 ····0000<br />

#11 (LEA) 00001111 10···000 00000000 ·0000010 ·0·001·· 00000010 ····0000<br />

01 00010000 11···101 00010100 ·0000000 ·0·000·· 00000000 ····0000<br />

010 00010001 11···100 00010011 ·0000000 ·0·000·· 00000000 ····0000<br />

Stop 00010010 00···000 00000000 ·0000000 ·0·000·· 00000000 ····0000<br />

#7 (AND) 00010011 10···000 00000000 ·0000110 ·0·010·· 00000100 ····0100<br />

011 00010100 11···100 00010110 ·0000000 ·0·000·· 00000000 ····0000<br />

Stop 00010101 00···000 00000000 ·0000000 ·0·000·· 00000000 ····0000<br />

#13 (STR) 00010110 01···000 00000000 ·1000000 ·0·001·· 00000101 ····0000<br />

#25 00010111 01···000 00000000 ·0100000 ·0·010·· 00000000 ····1100<br />

#26 00011000 10···000 00000000 ·0000000 ·0·000·· 00000000 ····0011<br />

Voir les fichiers slc2_micro_*.ram correspondant aux 6 ROM de microprogramme, et<br />

boucle_slc2_control.lgf pour le circuit de contrôle avec les ROM pré-chargées.<br />

La solution précédente est correcte, mais elle met clairement en évidence les lacunes du<br />

|<br />

|<br />

IRD<br />

COND<br />

INT.TEST<br />

J<br />

LD.MAR<br />

LD.MDR<br />

LD.IR<br />

LD.BEN<br />

LD.CC<br />

LD.REG<br />

LD.PC<br />

GatePC<br />

GatePC-1<br />

GateMDR<br />

GateALU<br />

GateMARMX<br />

GateINTV<br />

GateCC<br />

PCMX<br />

DRMX<br />

SR1MX<br />

MARMX<br />

STACKMX<br />

CCMX<br />

ALUK<br />

MIO.EN<br />

R.W<br />

42 TD 4<br />

microcontrôleur « maison » pour la selection des opcodes d’instructions. On propose donc une<br />

correction fondée sur le microcontrôleur « officiel » du processeur LC-2. La partie du microcontrôleur<br />

consacrée au contrôle de l’exécution des microinstructions s’appelle le microséquenceur ;<br />

celui-ci est optimisé pour le contrôle du LC-2, avec des microinstructions conditionnelles spécifiques,<br />

notamment le choix d’une destination parmi 16 états correspondant aux 16 opcodes du<br />

jeu d’instructions du LC-2. Ces optimisations rendent le microcontrôleur moins polyvalent mais<br />

beaucoup plus élégant et efficace dans la microprogrammation du LC-2.<br />

Le microséquenceur est conçu pour commencer à l’adresse 111011. Les microinstructions<br />

se décomposent en deux parties : 10 bits de contrôle du microséquenceur (branchement, adresse<br />

suivante sur 6 bits) et 29 bits pour les signaux de contrôle du LC-2 à générer. Le format des<br />

microinstructions est le suivant :<br />

x | x | x | x<br />

x | x<br />

| | | | |<br />

x x<br />

| | | | |<br />

Pour la microprogrammation des instructions ADD, AND et NOT, les signaux COND et IRD<br />

sont mis à 0 et J vaut toujours l’adresse de la microinstruction suivante, sauf pour :<br />

– l’état 2 où COND = 01 et J = 010000 (boucle sur la même microinstruction), le signal R<br />

provoquera le saut à l’adresse 010010 (état 3) ;<br />

– et l’état 4 où IRD = 1 force le saut à l’adresse 6, 7 ou 8, en fonction de l’opcode de<br />

l’instruction.<br />

Les microinstructions et leurs adresses pour les états 1, 2, 3, 4, 6, 7 et 8 sont décrites par le<br />

tableau suivant (toutes les valeurs sont en binaire, sauf l’état) :<br />

état adresse signaux de adresse LD. Gate MX divers<br />

contrôle suivante<br />

#1 111011 ····0000 ··010000 ·1000001 ·1000000 00000000 000·0000<br />

#2 010000 ····0010 ··010000 ·0100000 ·0000000 00000000 000·0010<br />

#3 010010 ····0000 ··110010 ·0010000 ·0010000 00000000 000·0000<br />

#4 110010 ····1000 ··000000 ·0001000 ·0000000 00000000 000·0000<br />

#6 000001 ····0000 ··111011 ·0000110 ·0001000 00000100 000·0000<br />

#7 000101 ····0000 ··111011 ·0000110 ·0001000 00000100 000·0100<br />

#8 001001 ····0000 ··111011 ·0000110 ·0001000 00000100 000·1000<br />

x<br />

Pour la microprogrammation de l’instruction BR, on doit réaliser les microinstructions correspondant<br />

aux états 20 et 35 :<br />

– pour l’état 20, on doit sauter à l’état 1 si BEN = 0 (COND = 10 et J = 111011, c’est-à-dire<br />

l’adresse de l’état 1) ;<br />

– pour l’état 35, on range le résultat du calcul d’adresse dans PC (LD.PC = 1, PCMX = 11<br />

et J = 111011, c’est-à-dire l’adresse de l’état 1).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!