MC-ENSL1 - Julien VILLEMEJANE

publicité
IUT Créteil-Vitry / GEII 2A / Projet / Sujet A
Dept GEII
MC-ENSL1
Année universitaire 2012-2013 - Durée : 4 x 3 heures
J. VILLEMEJANE - [email protected]
Mise en oeuvre d’un microcontroleur simple
Objectifs
– Réaliser l’architecture d’un microcontroleur simple en VHDL.
Consignes
– Chaque module devra être réalisé dans un fichier séparé.
– Chaque module devra être validé par l’enseignant.
– L’ensemble des modules devra être fourni à la fin de la dernière séance à l’enseignant.
1. Architecture d’un microcontroleur
Les systèmes basés sur des microprocesseurs, tel que les microcontroleurs, possèdent les éléments suivants :
– Processeur
– Mémoires (Programme - ROM / Données - RAM)
– Entrée-Sorties
Afin de relier l’ensemble de ces éléments, différents bus sont indispensables : le bus de données, le bus
d’adresses et le décodeur d’adresse.
Le microprocesseur est composé : d’une Unité Arithmétique et Logique (UAL / ALU), de Registres,
d’un Contrôleur (registre d’instruction, décodeur d’instruction et séquenceur) et d’un Compteur programme.
Concernant l’architecture des microcontroleurs et le traitement des instructions, il vous est conseillé de
revoir votre cours de II2.
2. Séquenceur microprogrammé
2.1. Cahier des charges
On souhaite à présent réaliser un microprocesseur à jeu d’instruction très réduit (8 instructions) mais
relativement complet dans sa structure et pouvant traiter des données de 4 bits.
Le microprocesseur sera composé :
– d’une unité arithmétique et logique (addition, soustraction, logique booléenne)
– d’un registre interne A
– d’un contrôleur/séquenceur
– d’un compteur programme
Afin de pouvoir tester ce système sur la carte d’étude, nous rajouterons :
– une ROM programme
– des gestionnaires d’entrées/sorties
Le tout s’apparentera donc plutôt à un microcontrôleur.
IUT Créteil-Vitry / GEII 2A / Projet / Sujet A
IUT Créteil - GEII - MC-ENSL1
2.2. Le jeu d’instruction
Chaque instruction sera codée sur un mot de 8 bits (1 octet).
instruction
oc2 oc1 oc0
3 bits
adr
ad
1 bit
op3
Opérande
op2 op1
4 bits
op0
Deux modes d’adressage seront possibles :
– littéral opérande fourni (cste) - ad = 0
– direct adresse de l’opérande fourni (adr) - bit ad = 1
Le jeu d’instruction sera le suivant :
Chargement
LDA #cste
LDA $adr
ET logique
ANDA #cste
ANDA $adr
Sauvegarde
STA $adr
Décalage gauche ROLA #cste
000 0 XXXX
000 1 XXXX
100 0 XXXX
100 1 XXXX
001 1 XXXX
101 0 XXXX
Addition
ADDA #cste
ADDA $adr
Soustraction
SUBA #cste
SUBA $adr
Remise à zéro
RST #cste
Décalage droite RORA #cste
010 0 XXXX
010 1 XXXX
011 0 XXXX
011 1 XXXX
111 0 XXXX
110 0 XXXX
3. Réalisation du microprocesseur
Le processeur sera réalisé à l’aide des différents blocs présentés dans le diagramme suivant.
3.1. L’accumulateur / le registre
Selon son instanciation, ce registre doit pouvoir mémoriser une donnée de 4 ou 8 bits présente en entrée
lors de la sélection du registre (entrée WR). Le registre doit être synchrone.
MODULE 1
1. Décrire un registre générique en VHDL (fichier registre.vhd).
2. Instancier un composant de ce type ayant 8 entrées, dans un système (fichier micropro.vhd).
3. Tester ce registre en attribuant les interrupteurs aux entrées et les leds aux sorties. L’horloge
sera réalisée avec un bouton-poussoir, ainsi que la validation de l’écriture.
–2–
IUT Créteil-Vitry / GEII 2A / Projet / Sujet A
IUT Créteil - GEII - MC-ENSL1
3.2. L’unité arithmétique et logique
Comme son nom l’indique, cet élément réalise des opérations arithmétiques (addition, soustraction...) et
logiques (et, ou...) entre deux données A et B, ici chacune sur 4 bits.
Dans le cadre de notre application, l’ALU doit réaliser 5 opérations différentes. Pour pouvoir les différencier, il est impératif de les coder, ici sur 3 bits : ADD = 000 ; SUB = 001 ; ROR = 010 ; ROL = 011 ; AND =
100.
MODULE 2
1. Décrire cette unité en VHDL (fichier alu.vhd).
2. Instancier ce composant dans le système précédent (fichier micropro.vhd).
3. Tester cette unité en attribuant 3 interrupteurs à l’entrée A, 3 à l’entrée B et 4 leds aux sorties.
Les deux derniers interrupteurs serviront comme sélection de la fonction à réaliser.
3.3. Le compteur programme
Le compteur programme contient l’adresse de la prochaine instruction à exécuter. Il ne doit pas être
incrémenté à chaque coup d’horloge mais seulement lorsque le contrôleur le lui ordonne (une instruction n’étant
pas exécutée en un seul coup d’horloge).
Il doit pouvoir être remis à zéro de façon asynchrone.
MODULE 3
1. Décrire ce compteur en VHDL (fichier cpt_pgm.vhd).
2. Instancier ce composant dans le système précédent (fichier micropro.vhd).
3. Tester cette unité en attribuant les leds aux sorties, un bouton-poussoir comme remise à zéro
et un bouton-poussoir comme validation de comptage.
3.4. Le contrôleur
Le contrôleur est l’organe principal du microprocesseur. C’est lui le chef d’orchestre du système. En
fonction des instructions qui se succèdent, il doit décoder les instructions, les opérandes, mettre en relation les
différents organes de traitement et enfin exécuter ces instructions.
Dans cet exemple, nous allons reprendre le cycle du PIC16F84 pour réaliser une machine à état de type
Moore. FETCH, DECODE, EXECUTE, WRITEBACK seront les 4 états possibles de cette machine qui se
succéderont.
Le décodage des sorties sera réalisé dans un second processus.
MODULE 4
1. Décrire le contrôleur en VHDL (fichier controleur.vhd) en le décomposant en 2 processus
concurrents : la machine à état (séquenceur) et le décodage des sorties en fonction :
– de l’état ;
– de l’instruction à exécuter.
2. Instancier ce composant dans le système précédent (fichier micropro.vhd).
3. Tester cette unité seule en attribuant :
– 7 leds aux différentes sorties (wr_accu, up... ) ;
– 4 switchs en entrée prog ;
– 1 bouton poussoir pour l’horloge clk ;
– 1 bouton poussoir pour la remise à zéro raz.
–3–
IUT Créteil-Vitry / GEII 2A / Projet / Sujet A
IUT Créteil - GEII - MC-ENSL1
On pourra aussi utiliser un décodeur 7 segments ainsi qu’un des afficheurs pour afficher le numéro de l’instruction décodée par
le contrôleur.
3.5. Le processeur
Maintenant que tous les composants ont été testés séparément, on peut les lier ensemble pour réaliser le
processeur.
MODULE 5
1. Instancier tous les composants nécessaires dans un système (fichier micropro.vhd). Vous
veillerez à créer les signaux internes nécessaires au bon fonctionnement.
2. Rajouter une sortie fct_out sur votre composant processeur, image de l’instruction à exécuter.
3. Pour tester, ajouter un affichage multiplexé (voir TP 3).
4. Application autour du microprocesseur
Nous allons utiliser ce processeur dans le cadre d’une application simple mettant en jeu :
– une ROM (pour le programme) ;
– deux périphériques distincts.
4.1. Les périphériques
Notre système utilisera deux types de périphériques différents :
– un bloc d’affichage (2 x 4 Leds) ;
– un bloc d’entrée (2 x 4 interrupteurs).
Le bloc d’affichage écrit les données qu’il reçoit en entrée sur l’une de ces 2 adresses.
Le bloc d’entrée écrit sur sa sortie (4 bits) les données qu’il récupère sur l’un des deux sous-ensembles
d’interrupteurs.
Les deux blocs sont équipés d’une entrée de validation.
MODULE 6
1. Décrire ces deux blocs dans 2 fichiers séparés (periph_1.vhd et periph_2.vhd).
–4–
IUT Créteil-Vitry / GEII 2A / Projet / Sujet A
IUT Créteil - GEII - MC-ENSL1
4.2. Le décodage d’adresse
Le décodage des adresses d’entrées/sorties est indispensable pour éviter d’attribuer des données à des périphériques non concernés.
MODULE 7
1. Décrire le décodeur d’adresse (decodeur.vhd).
4.3. Premier essai
Nous nous servirons du bloc d’interrupteurs pour entrer les données.
Les leds serviront de sortie du périphérique 1. Le périphérique d’entrée 2 se verra attribuer une valeur par
défaut. L’afficheur affichera d’une part l’instruction à décoder et d’autre part l’adresse programme.
MODULE 8
1. Instancier tous les composants nécessaires dans un fichier application.vhd.
2. Tester un programme quelconque et vérifier le bon fonctionnement de votre microcontrôleur.
On pourra par exemple tester la séquence suivante : LDA # 0101, STA $ 0000.
Que se passe-t-il dans ce cas ?
4.4. Mémoire programme
ENTITY rom IS
PORT( a d r e s s e : i n STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ;
d a t a _ o u t : o u t STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ) ;
END rom ;
ARCHITECTURE s i m p l e OF rom IS
TYPE t a b l e a u IS a r r a y ( 0 TO 1 5 ) OF STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;
CONSTANT r o m _ t a b : t a b l e a u :=
(X" E0 " ,X" 12 " ,X" 30 " ,X" E0 " ,X" 00 " ,X" 00 " ,X" 00 " ,X" 00 " ,
X" 00 " ,X" 00 " ,X" 00 " ,X" 00 " ,X" 00 " ,X" 00 " ,X" 00 " ,X" 00 " ) ;
BEGIN
d a t a _ o u t <= r o m _ t a b ( t o _ i n t e g e r ( u n s i g n e d ( a d r e s s e ) ) ) ;
END s i m p l e ;
–5–
IUT Créteil-Vitry / GEII 2A / Projet / Sujet A
IUT Créteil - GEII - MC-ENSL1
MODULE 9
1. Rajouter une mémoire ROM au système précédent (rom.vhd).
4.5. Second essai
Les interrupteurs seront à présent reliés au périphérique 2.
L’horloge sera réalisée, dans un premier temps, par un bouton poussoir.
MODULE 10
1. Instancier tous les composants nécessaires dans un fichier application.vhd.
2. Tester un programme quelconque et vérifier le bon fonctionnement de votre microcontrôleur.
L’horloge sera reliée, à présent, à l’horloge 50 MHz de la carte d’étude.
–6–
Téléchargement