ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle
Projet: Microprocesseur RISC 32 bits
avec pipeline à quatre étages
Automne 2008
1 Introduction:
Dans ce projet, on vous propose de réaliser l'implémentation complète d'un
microprocesseur simple avec pipeline à quatre étages.
L'implémentation comprend la compréhension d'une architecture simple de
microprocesseur pipeliné, la description/modélisation/simulation VHDL du circuit, la
synthèse et finalement le placement et le routage automatiques.
L'objectif est de vous permettre de vous familiariser avec chacune des étapes
nécessaires à la réalisation d'un circuit VLSI.
Le processeur proposé a une architecture RISC à 32 bit. Il ressemble donc à certains
processeurs communs comme le MIPS, le SPARC ou le NIOS II. Par contre, il diffère
de ceux-ci en ce que l'objectif principal de conception a été la facilité
d'implémentation. Dans cette optique, certaines simplifications de l'architecture ont
été nécessaires.
Figure 1: Exemple de microprocesseur – un MIPS R2000
1
1.1 Objectifs spécifiques:
1. Utiliser le langage VHDL afin de modéliser, décrire et simuler le circuit du
microprocesseur à partir de l'information fournie dans ce document.
2. Créer un banc d'essais pour chaque module du circuit et montrer les
simulations vérifiant toute la fonctionnalité de vos modules.
3. Développer des aptitudes avec les outils de synthèse de Synopsys.
4. Comprendre et réaliser chacune des étapes de placement et de routage
d'une description VHDL.
5. Faire la simulation fonctionnelle et post-synthèse complète du circuit.
1.2 Méthodologie pour la synthèse:
Une fois vos modules et bancs d'essais décrits en VHDL, vous allez procéder à la simulation
fonctionnelle, puis à la synthèse et optimisation de ceux-ci, et finalement à celle de votre circuit
entier (voir Documents de Laboratoire).
Pour la synthèse du projet en vue du placement/routage, vous devez vous férer au Guide
pour le Placement et Routage et non au Chapitre 3 des Documents de Laboratoire. Plusieurs
modifications aux étapes de synthèse sont nécessaires pour le placement/routage.
Faire le placement/routage de votre design dans SoC Encounter. Imprimez le résultat final
après le placement/routage. Pour le routage, veuillez faire un zoom sur le circuit pour montrer
les fils. Importez le design après le « place & route » dans l'éditeur de design de masques de
Cadence. Imprimez le design final. Pensez-vous que le circuit est à ce stade prêt pour la
fabrique? Donnez une brève discussion.
Durant la phase de vérification, vous devez utiliser le même banc d'essais avant et
après synthèse pour ainsi montrer le bon fonctionnement du circuit et la notion de
délai.
Trouvez, à l'aide de Synopsys, la fréquence maximale de l'horloge de votre modèle. Trouvez
par simulation la fréquence maximale du circuit. Expliquez ce qui pourrait différencier les deux
mesures de fréquences.
2
2 Partie 1 : Modules du microprocesseur
Au premier laboratoire, deux modules du microprocesseur ont été réalisés, soit le
compteur de programme et un circuit de décalage de bits. Dans cette partie, les
modules restant seront créés.
2.1 Bloc de registres
La figure 2 montre un aperçu du bloc de registre. Les signaux à gauche sont les
entrées et ceux de droite sont les sorties.
Figure 2: Aperçu du bloc de registre
Le bloc de registre comprend deux ports de lecture et un port d'écriture. Chaque
port de lecture comporte un signal d'entrée (in_addr_a et addr_b) est placé
l'adresse d'un registre et un signal de sortie (out_data_a et out_data_b) est
retournée la valeur contenue dans le registre adressé. La lecture d'un registre est
asynchrone; lors d'un changement d'un changement d'adresse, la valeur
correspondante doit être retournée immédiatement, sans attendre un front
d'horloge. Pour ce qui est du port d'écriture, lorsque le signal in_wr est à 1, la valeur
présentée sur in_data_d est écrite dans le registre adressé sur in_addr_d. L'écriture
d'un registre est effectué de manière synchrone (sur front montant).
La valeur du registre 0 est fixé à 0. Ce registre ne peut jamais être modifié.
Votre module comportera deux paramètres génériques. Le premier, nommé
WIDTH_ADDR, correspond au nombre de bits des adresses (par défaut: 5). Bien sûr,
le nombre de registres dépend de ce paramètre. Le second, nommé WIDTH_DATA,
est le nombre de bits de chaque registre (par défaut: 32).
3
Le nom d'enti de votre module sera reg_file. On vous demande de respecter
l'interface décrite à la figure 2 et ci-dessus (mêmes noms des signaux et des
paramètres génériques, tous les signaux présents, aucun ajouté).
2.2 Unité arithmétique et logique
La figure 2 montre un aperçu de l'unité arithmétique et logique. Il n'est pas
demandé que ce module soit générique.
Figure 3: Aperçu de l'unité arithmétique et logique
L'unité arithmétique et logique constitue le coeur du microprocesseur et, comme
son nom l'indique, permet de réaliser diverses opérations arithmétiques et logiques.
Un opérande est présenté sur chacune des deux entrées in_a et in_b et, en fonction
d'un code d'opération donné sur in_op, une opération est réalisée, et le résultat
correspondant est fourni sur out_result de manière purement combinatoire. Les
données ont une largeur de 32 bits et le code d'opération est codé sur 8 bits.
2.2.1 Drapeaux
L'unité arithmétique et logique comporte trois sorties d'un bit chacune nommées
drapeaux (
flags
). Ces drapeaux fournissent certaines caractéristiques du résultat de
l'opération. Ils sont mis à jour de manière synchrone. Leur description est celle-ci:
c indicateur de retenue (
carry flag
) : Ceci indique qu'une addition a produit
une retenue. Dans le cas de l'addition de deux opérandes de 32 bits, on peut
le voir comme le 33ème bit du résultat. On pourrait l'implémenter en VHDL de
la manière suivante: sum <= '0' & a + '0' & b; Dans ce cas, sum(32)
représente l'indicateur de retenue et sum(31 downto 0) le résultat de
l'addition.
4
s bit de signe : comme le drapeau précédent, celui-ci s'applique à
l'opération d'addition, ainsi qu'à l'opération de soustraction qui est en fait
réalisée par une addition l'opérande à soustraire est remplacé par son
complément à deux. Ce drapeau vaut un lorsque le résultat de l'opération est
négatif, en supposant que les opérandes et le résultats utilisent la
représentation en complément à deux. Attention cependant, ce drapeau doit
être valide même en cas de débordement, et il ne suffit donc pas de
seulement prendre le bit le plus significatif du résultat. L'information
concernant la manière correcte de déterminer le signe du résultat est
facilement disponible.
z indicateur de valeur nulle : indique que le résultat de l'opération vaut
zéro.
2.2.2 Liste des instructions de l'unité arithmétique et logique
Le tableau 1 donne un aperçu des instructions implémentées par l'unité
arithmétique et logique.
Instruction Description Code
d'opération (hex)
Drapeaux
affectés
ADD Addition 1 (01) csz
ADDI Addition avec opérande immédiat 3 (03) csz
AND Opération ET binaire 5 (05) z
FLIP Inversion de l'ordre des bits 6 (06) z
NOT Opération NON binaire 9 (09) z
OR Opération OU binaire 10 (0a) z
SLL Décalage logique vers la gauche 11 (0b) z
SRA Décalage arithmétique vers la droite 12 (0c) z
SRL Décalage logique vers la droite 13 (0d) z
SUB Soustraction 14 (0e) csz
SUBI Soustraction avec opérande immédiat 15 (0f) csz
XOR Opération OU exclusif binaire 16 (10) z
BCF, BEQ, BNE et BSF Branchements 70 (46) à 73 (49) -
CALL et RET Appel et retour de fonction 50 (32) et 51 (33) -
Tableau 1: Description des instructions
de l'unité arithmétique et logique
La dernière colonne montre les drapeaux affectés par chaque instruction. Les
drapeaux doivent conserver leur valeur actuelle lors de l'exécution d'une instruction
qui ne les affecte pas.
5
1 / 23 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !