MISE EN ŒUVRE D`UN PROCESSEUR 4BITS PAR SYNTHESE

publicité
27/04/2009
M1 EEA
MISE EN ŒUVRE D’UN PROCESSEUR 4 BITS PAR
SYNTHESE LOGIQUE DE HAUT NIVEAU SUR FPGA
[Copyright LAGIN GARY]
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
SOMMAIRE
I .Mise en place du décodeur d’instruction.......P4
II. Mise en place du décodeur d’instruction complet......15
III. Développement de la partie calcul...........P16
IV. Développement de la partie de contrôle....P17
LAGIN GARY M1 EEA
Page 2
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
Présentation du projet
L e but de ce projet est de réaliser un microprocesseur 4 bits et d’implémenter la structure sur un
FPGA. On introduira ainsi les concepts élémentaires de l’architecture des microcontrôleurs.
Avantages du projet :
•
•
•
•
•
Maitrise du logiciel Quartus.
Progrès en langageVHDL.
Notions de schémas bloc.
Compréhension du principe de l’architecture d’un microprocesseur très simple qui sera
bénéfique si nous devions travailler sur une architecture plus complexe en entreprise.
Autonomie d’apprentissage et explication des professeurs.
Inconvénient du projet.
•
•
Durée des séances assez lourdes.
Bug du logiciel Quartus qui nous fait perdre du temps.
Schéma de principe du microprocesseur.
LAGIN GARY M1 EEA
Page 3
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
I .Mise en place du décodeur d’instruction
La première étape consistera à lire dans la mémoire de programme, l’instruction et sa donnée et de
faire parvenir l’instruction au bloc « MicroInstruction » (MI).
Nous mettrons en place les 3 blocs suivants que nous étudierons séparément :
•
•
•
Le compteur de programme PC (PC.qpf)
La mémoire de programme PM (PM.qpf)
Le registre d’instruction RI (RI.qpf)
Nous commencerons à étudier et puis créer le bloc PC dont sa structure a déjà été vue en TD.
Etude du compteur de programme PC :
La commande PC est un pointeur qui va pointer et se déplacer par incrémentation sur les adresses de
la mémoire PM où le programme a été crée (par l’utilisateur).
LAGIN GARY M1 EEA
Page 4
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
Ainsi :
Admettons le programme ci-dessous : (sens de lecture du programme de haut en bas) :
mnémonique
LDA 2
ADD 1
OUT
Instruction & donnée (sur 8 bits)
0101|0010
0010|0001
0100|0000
NOP
0000|0000
commentaire
On charge 2 dans l’accu A.
On addition le contenu par 1.
Le résultat est transmis le
registre « output register ».
Arrêt du programme.
De plus, le cahier des charges nous informe que PC compte de 0000 à 1111 soit en décimal de 0 à 15
et que le pointeur est initialisé à 0.
Ainsi nous en déduisons une mémoire PM de 16 mots de 8 bits (capacité 128 bits).
Voici ce que cela nous donne :
Mémoire programme (PM)
Au début PC=0
@0000
0101 0010
@0001
PC+1
0010 0001
@0010
0100 0000
@0011
0000 0000
@0100
@1111
LAGIN GARY M1 EEA
Page 5
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
Pseudo code :
Tableau de l’entité PC
Nom
Mode
Type
clk
entrée
Bit
clear
entrée
Bit
S
sortie
Entier (0à 15)
Début ;
Si clear=1
alors S=0 ;
Sinon si clk=
alors count<= count +1 ;
S<=count ;
Fin de SI
Fin ;
Programme : prog_count.vhd
Library IEEE;--librairie offrant les outils pour la programmation vhdl
use ieee.std_logic_1164.all;
entity PC is
port ( clk,clear:IN bit;
S:out integer range 0 to 15
);--déclaration entrée/sortie end PC;
architecture beh of PC is--architecture nommée BEH d'entité PC
LAGIN GARY M1 EEA
Page 6
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
begin
process (clk,clear)--pour rendre la lecture du programme séquentielle,clk et clear sont les
événements en entrée.
variable count:integer range 0 to 15;--variable interne au process variant de 0 à 15
begin
if clear='1' then
S<=0;--clear ne dépend pas de l'horloge, il est dit asynchrone (prioritaire
devant l'horloge clk, si clear=1 alors S=0)
elsif clk'event and clk='1' then count:=count+1;--incrémentation à chaque coup d’horloge
S<=count;--mettre la valeur de count dans la sortie S
end if;--fin de condition-end process;--fin de process
end beh;--fin d'architecture
Résultat de simulation:
Dans le fichier PC.vwf, on règle les paramètres en entrée (attention : l’horloge clk doit être inférieur à
l’horloge du microprocesseur qui est de 50 Mhz) de façon à avoir tous les cas en sortie puis on lance
la simulation.
clear
clk
S
Interprétation :
LAGIN GARY M1 EEA
Page 7
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
On s’aperçoit que lorsque le clear est activé « clear=1 », le compteur n’est pas réinitialisé.
Il nous faut donc réinitialiser la 0 la variable interne count.
Correction du programme
Library IEEE;--librairie offrant les outils pour la programmation vhdl
use ieee.std_logic_1164.all;
entity PC is
port ( clk,clear:IN bit;
S: out integer range 0 to 15
);
architecture beh of PC is--architecture nommé beh d'entité PC
begin
process (clk,clear)--pour rendreà la lecture du programme sequentielle,
variable count:integer range 0 to 15; variable interne du process
begin
if clear='1' then
count :=0;--initialiser count à zéro
S<=count ;
elsif clk'event and clk='1' then count:=count+1;
S<=count;--mettre la valeur de count dans la sortie S
end if;--fin de condition-end process;--fin de process
end beh;--fin d'architecture
LAGIN GARY M1 EEA
Page 8
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
Résultat de simulation :
clear
clk
S
Delay
Théoriquement, il devrait
y avoir 0 sur la sortie S à
cet emplacement.
Interprétation :
On observe un retard (Delay) entre la donnée émise et le coup d’horloge.
En temps normal la sortie S qui est initialisé à 0 par la commande asynchrone « clear=1 », restera à 0
jusqu’au prochain front d’horloge montant de S. Malheureusement, en réalité il y a un retard qui est
du à l’accumulation des bascules en `cascade’ et à la fréquence d’horloge.
La mémoire de programme PM :
Pour créer la mémoire, nous utiliserons les macro-fonctions disponibles sur Quartus.
Nous allons donc créer un bloc Ram défini en tant que macro fonction.
Pour simuler la structure, il nous faudra initialiser la mémoire PM. Ainsi dans « new memory
initialization file », nous spécifions la taille de la mémoire, c'est-à-dire 16 mots de 8 bits.
Une fenêtre (ci-dessous) apparait, dans laquelle nous mettons les données en décimal.
LAGIN GARY M1 EEA
Page 9
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
PM.mif
Adresse de 0 à 7.
Adresse de 8 à 15
Nous allons maintenant associer le fichier PM.mif avec macro-fonction « LPM_RAM_DQ » qui est le
bloc RAM crée.
RAM : (random access memory) est une mémoire volatile, sur laquelle nous pouvons écrire à
volonté.
Ce qui nous donne la structure ci-dessous :
Nous testons ce bloc pour connaitre plus précisément son fonctionnement.
Simulation :
2 coups d’horloge
address
clk
q
wren
Pour avoir une valeur sur q, la durée de temps de latence est de 2 coups d’horloge. Cela semblerait
être du au temps mis au bloc pour pointer l’@ de la valeur choisi et lire cette dernière sur q.
La période de l’adresse fait 5 fois celle du clk pour laisser le temps à q de s’afficher correctement.
LAGIN GARY M1 EEA
Page 10
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
Interprétation.
WREN : c’est une entrée prioritaire (asynchrone).
Lorsque :
Wren=1 droit écriture dans la mémoire
Wren=0 autorisation `lecture’ d’une valeur d’une case mémoire pointée à une adresse.
Clock : horloge de synchronisation pour que le contenu de l’@ soit lu sur la sortie q.
Data : bus de donnée (c’est les entrées avec lesquelles nous allons stocker nos données.
Address : bus d’adresse (c’est les entrées avec lesquelles nous choisissons l’emplacement de la
mémoire qu’on veut stocker).
Nous pouvons implémenter notre structure sur le Stratix (FPGA) de la plaquette qui contient de
manière interne une mémoire RAM. Nous avons une mémoire de 128 bit à implémenter qui sera
« taillé »sur la mémoire 512 du FPGA.
Fmax :la fréquence max est la fréquence pour laquelle la donnée q devient instable (limitatif).
Fmax=1 Ghz
Analyse temporelle (voir annexe)
LAGIN GARY M1 EEA
Page 11
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
Le registre d’instruction RI
Le registre d’instruction reçoit les données de la mémoire :
Les 8 bits de données sont séparés
en deux : Les bits les plus significatifs correspondent aux instructions, les bits les moins
significatifs aux données. Créer un modèle VHDL nommé « instr_reg ». Le registre
d’instruction sera définit de la façon suivante :
- Une entrée clear de mise à zéro
- Une entrée Clock de synchronisation sur une horloge.
- Une entrée EnableInstr permettant de valider le fonctionnement.
- Une entrée 8 bits venant de la mémoire.
- Une sortie sur 4 bits : « to_Micro » contenant l’instruction
- Une sortie sur 4 bits « to_bus » contenant la donnée à transmettre sur le bus interne.
Pour connecter la sortie « to_bus » sur le bus interne, les différentes sorties des blocs
devront être déclarées sous la forme de STD_LOGIC. Ceci permet de définir un cas où les
sorties vers le bus interne peuvent être déclarées en haute impédance (Z) lorsque le bloc est
inactif et ne doit pas écrire sur le bus.
Attention, tout composant qui est relié avec le bus interne IB, doit déclarer son entité (sortie) en
std_logic.
Nous avons mis l’entrée clear puis Enableinstruct en état prioritaire sur tout le reste des entrées du
montage.
Le pseudo-code nous donne :
Table de l’entité
Nom
Mode
Type
clear
entrée
1bit
LAGIN GARY M1 EEA
clk
entrée
1bit
Enableinstruct instruct
entrée
entrée
1bit
Bus 8 Bit
To_micro
sortie
Bus 4 Bit
To_bus
sortie
Bus 4 bit
Page 12
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
Si clear=0 alors
Si Enableinstr=1 alors
Si clk=
alors
To_micro<=instru(D7 à D4)
To_bus<=instru(D3 à D0)
Fin de si
Sinon to_micro<=ZZZZ
to_micro<ZZZZ
fin de si
sinon to_micro<=0000
sinon to_bus<=0000
fin de si
Ce qui nous donne
Programme: instr_reg.vhd
library IEEE;
use ieee.std_logic_1164.all;
entity instr_reg is
port(
clear,clk,EnableInstr :in bit;
Instruct:in std_logic_vector(7 downto 0);
to_micro,to_bus:out std_logic_vector(3 downto 0)
);
end instr_reg;
LAGIN GARY M1 EEA
Page 13
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
architecture beh of instr_reg is
begin
process(clear,clk,EnableInstr,Instruct)
begin
if clear='0' then
if EnableInstr='1' then
if clk'event and clk='1' then
to_micro<=Instruct(7 downto 4);sur les 4 bits de poids forts
sur to_micro
to_bus<=Instruct(3 downto 0);sur les 4 bits de poids faible
sur to_bus
end if;
else -- sinon enableinstr=0 alors
to_micro<="ZZZZ";--haute impedancesur sortie si enableinstr=0
to_bus<="ZZZZ";
end if;
else -- sinon clera=0 alors
to_micro<="0000";
to_bus<="0000";
end if;
end process;
end beh;
Simulation:
LAGIN GARY M1 EEA
Page 14
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
On observe bien la valeur 7 (4 bits de poids forts) sur to_micro et la valeur 4 (4 bits de poids faible)
sur to _bus.
II. Mise en place du décodeur d’instruction complet :
Simulation et explication de chronogramme (cf. Annexe 2)
LAGIN GARY M1 EEA
Page 15
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
III. Développement de la partie calcul
Mise en place de l’accu A
Entity ACCUA is port
port(D,C :in std_logic ;Q,NQ :out_logic) ;
End ACCUA ;
Architecture arc of ACCUA is
Signal Qint:std_logic;
Begin
Qint <= D when (C’event and c=’1’) else Qint;
Q<= Qint;
NQ<=not Qint;
End arc;
La simulation voir annexe 4
Mise en place de l’accu B :
Idem que celui de l’accuA
Assemblage ALU+ACCUA+ACCUB (voir annexe 5)
Simulation et commentaire (voir annexe 6)
LAGIN GARY M1 EEA
Page 16
Mise en œuvre d’un processeur 4 bits par synthèse logique de
haut niveau sur FPGA
IV. Développement de la partie de contrôle.
Mise en place du générateur de phase
LIBRARY ieee;
USE ieee.std_logic_1164.all;
--USE ieee.std_logic_arith.all;
ENTITY GENE_3 IS
PORT
(
H : IN STD_LOGIC; -- Horloge
ONE : INOUT STD_LOGIC; -- Phase
TWO : INOUT STD_LOGIC; -- Phase
THREE : INOUT STD_LOGIC -- Phase
);
}
END GENE_3;
ARCHITECTURE a OF GENE_3 IS
SIGNAL ONE_Tmp : STD_Logic;
BEGIN
PROCESS (H)
BEGIN
ONE_Tmp <= TWO NOR THREE;
IF (H'EVENT AND H = '1') THEN
ONE <= THREE;
TWO <= ONE_Tmp;
THREE <= TWO;
END IF;
END PROCESS;
END a;
LAGIN GARY M1 EEA
Page 17
Téléchargement