Tutoriel sur la conception d'additionneur FPGA
Tutoriel sur la conception d'additionneur FPGA
Premier projet
1.1 Introduction
Dans ce tutoriel, un additionneur complet est conçu à l'aide de demi-additionneurs. Nous allons
apprendre les méthodes suivantes pour créer/implémenter les conceptions numériques en utilisant
le logiciel Altera-Quartus,
Conception numérique à l'aide de " schémas de principe ",
Conception numérique à l'aide de "codes VHDL",
Affectation manuelle des broches pour l'implémentation,
Affectation des broches à l'aide d'un fichier '.csv',
Chargement de la conception sur le FPGA.
Convertir le 'design VHDL' en 'Symboles'.
Conversion du 'Schéma de principe' en 'Code VHDL' et 'Symboles'.
1
Fig. 1.1 : Créer un nouveau projet
2
Fig. 1.2 : Nom et emplacement du projet
3
Fig. 1.3 choix d’un projet vide
4
Fig. 1.4 Ajout de fichiers additionnels
5
Fig. 1.5 : Paramètres du dispositif
6
Image intermédiaire pour spécifié l’utilisation de ModelSim-Altera
7
Figure 1.6 Résumé des étapes de création d’un projet dans Quartus
8
1.3 Conception numérique à l'aide de "blocs de schémas".
La conception numérique peut être créée à l'aide de deux méthodes, à savoir l'utilisation de "blocs
schématiques" et d'un langage de programmation, par exemple VHDL.
Dans cette section, nous allons créer un démi additionneur (half_adder) en utilisant la méthode des
blocs-schémas, comme indiqué ci-dessous,
Pour cela, cliquez sur File->New->Block diagram/ Schematics files, comme le montre la
Fig. 1.8 ; et un fichier vierge sera créé.
9
Fig. 1.8: Créer un nouveau bloc de schémas de principe
Ensuite, faites un clic droit sur la porte 'and' et cliquez sur 'Generate Pins for Symbol Ports',
comme le montre la Fig. 1.9.
Maintenant, connectez les ports d'entrée de la porte 'xor' avec la porte 'et' (à l'aide de la
souris) ; ensuite, faites un clic droit sur la porte 'et' et cliquez ensuite sur 'Generate Pins for
Symbol Ports'. Enfin, renommez les ports d'entrée et de sortie (c'est-à-dire x, y, somme et
retenue) comme indiqué dans la Fig. 1.10.
Enfin, enregistrez la conception sous le nom de 'half_adder_sch.bdf'. Il est préférable
d'enregistrer la conception dans un dossier distinct, afin de pouvoir distinguer les fichiers
définis par l'utilisateur et ceux générés par le système (Quartus), comme le montre la Fig.
1.11 où les codes VHDL sont enregistrés dans le dossier 'VHDL_Code1', qui se trouve
dans le répertoire principal du projet.
Puisque le nom du projet est 'full_adder', alors que le nom de la conception du demi-
additionneur est 'half_adder_sch.bdf' (c'est-à-dire différent du nom du projet), nous devons
donc définir cette conception comme entité de niveau supérieur pour compiler le projet.
Pour cela, allez dans le navigateur du projet et faites un clic droit sur 'half_adder_sch.bdf'
et définissez-le comme entité de niveau supérieur, comme indiqué dans la Fig. 1.12.
10
Image intermédiaire de la Fig. 1.9 : Sélectionnez la porte 'et'.
11
Image de l’ajout des ports d’entrées / sorties
12
Fig. 1.11 : Sauvegarder le projet dans un répertoire séparé, c'est-à-dire VHDL_Code1 et non
Projet1
13
Image de l’analyse du fichier half_adder_sch.bdf (Processing > Analyze Current File)
14
1.4 Affectation manuelle des broches et compilation
Veuillez saisir l'emplacement correct des broches en fonction de votre carte FPGA, comme indiqué
dans cette section.
Une fois la conception analysée, l'étape suivante consiste à affecter l'emplacement correct des
broches aux ports d'entrée et de sortie. Dans cette section, nous allons assigner les broches
manuellement. Suivez les étapes ci-dessous pour l'affectation des broches,
Ouvrez d'abord le 'Pin Planner' en cliquant sur Assignments->Pin Planner comme indiqué
dans la Fig. 1.13.
Ensuite, tapez les noms des ports d'entrée et de sortie ainsi que les emplacements des
broches sur la carte, comme le montre la Fig. 1.14. Les détails de l'emplacement des
15
broches sont fournis dans le manuel des cartes FPGA, par exemple, sur la carte RZ-
EasyFPGA A2.2, la broche 'PIN_88' est connectée au commutateur S1. En assignant cette
broche à 'x', nous connectons le port 'x' au commutateur S1. De même la broche 'PIN_89'
est connectée au commutateur S2. En assignant cette broche à 'y', nous connectons le port
'y' au commutateur S2. Dans la même logique les ports de sorties sum et carry sont
connectées aux broches PIN_87 et PIN_86 respectivement.
Image avec une vue global sur notre dispositif EP4CE6E22C8 dans le Pin Planner
16
Après avoir assigné la broche, analysez à nouveau la conception (voir Image de
l’analyse du fichier half_adder_sch.bdf ). Après cela, nous pouvons voir les numéros
de broches dans le fichier '.bdf', comme le montre la Fig. 1.15.
Enfin, compilez la conception en utilisant le bouton 'ctrl+L' (ou en cliquant sur
Processing->Start compilation, comme indiqué dans la Fig. 1.16).
17
Image du rapport de compilation
Après une compilation réussie, si nous voyons à nouveau l'assignation des broches, nous
constaterons que la direction des broches est maintenant assignée, comme le montre la Fig.
1.17 (qui étaient définies comme 'inconnues' pendant l'analyse comme dans la Fig. 1.14).
18
1.5 Conception numérique à l'aide de "codes VHDL".
Dans cette section, le demi-additionneur est implémenté en utilisant des codes VHDL. Pour cela,
cliquez sur Fichier->Nouveau->Fichiers VHDL, comme indiqué dans la Fig. 1.18 ; un fichier
vierge sera créé. Saisissez la fiche complète de half_adder_vhdl' dans ce fichier et enregistrez-le
sous le nom de 'half_adder_vhdl.vhd'.
Maintenant, définissez cette conception comme "entité de niveau supérieur" (Fig. 1.10). Nous
pouvons maintenant analyser la conception.
library ieee;
use ieee.std_logic_1164.all;
entity half_adder_vhdl is
port(
a, b : in std_logic;
sum, carry : out std_logic
);
end half_adder_vhdl;
19
Image de procédé de création du fichier de saisir du code VHDL du demi-additionneur
Fig. 1.18 Feuille vierge ([Link]) en attente de saisie d’un code VHDL du demi-additionneur
20
Image de la feuille [Link] comportant le code VHDL du demi-additionneur
21
Image de la définition de half_adder_vhdl.vhd comme entité de niveau supérieur
22
Image de fin d’analyse du fichier courant de half_adder_vhdl.vhd du demi-additionneur
23
1.6 Conversion de la conception VHDL en symbole
Le code VHDL peut être converti en format de schéma de blocs, ce qui est très utile pour connecter
divers modules entre eux. Dans cette section, le fichier VHDL du demi-additionneur est converti
en schéma, puis deux demi-additionneurs sont connectés pour former un additionneur complet.
Suivez les étapes ci-dessous pour créer un additionneur complet en utilisant cette méthode,
Cliquez avec le bouton droit de la souris sur le fichier 'half_adder_vhdl.vhd' et cliquez sur
'Create symbol files for current file' (Créer des fichiers symbole pour le fichier actuel),
comme le montre la Fig. 1.19. Cela créera un symbole pour la conception de l'additionneur.
24
Maintenant, créez un nouveau 'fichier de schéma de bloc' montré à la Fig. 1.20 (Fig. 1.8).
Ensuite, double-cliquez sur ce fichier et ajoutez le symbole du demi-additionneur comme
indiqué dans les Fig. 1.21 et Fig. 1.22 et pour ajouter la porte ou voir Fig. 1.23.
Enfin, l’additionneur complet est montré à la Fig. 1.24.
25
Fig. 1.20 Création d’un nouveau 'fichier de schéma de bloc
26
Fig. 1.22 Ajoutez un autre demi-additionneur dans le 'fichier de schéma de bloc'
27
Fig. 1.24 : Additionneur complet utilisant des demi-additionneurs
Puisqu'un port supplémentaire (i.e. z) est ajouté à la conception, modifiez donc le Pin
Planner comme le montre la Fig. 1.25
Enregistrez la conception sous le nom de 'full_adder_sch.bdf' comme le montre la Fig.
1.26.
28
Image de l’additionneur complet déjà enregistré dans le fichier schéma blocs
29
Image obtenu dès que full_adder_sch.bdf est été défini comme entité de niveau supérieure
30
Image intermédiaire obtenu dans le fichier schéma blocs de full_adder_sch.bdf après
l’assignation manuelle de z dans le Pin Planner
31
Image intermédiaire de la bonne affectation des noms des nœuds (node) suivant les directions
(Input ou Output) et leurs locations après placement & routage sur leurs broches respectives.
Nous pouvons voir les nouvelles affectations de broches dans le Pin Planner (Ctrl+Shift+N)
comme indiqué ci-dessus. (Si les affectations ne sont pas correctes, vérifiez si la conception VHDL
est définie comme entité de niveau supérieur).
32
Fig. 1.27 Procédé d’ouverture de la fenêtre de création du fichier de conception HDL à partir du
fichier courant full_adder_sch.bdf
Fig. 1.28 Création du fichier de conception HDL à partir du fichier courant full_adder_sch.bdf
33
Image du rapport de création du fichier full_adder_sch.vhd comportant le code en langage VHDL de
notre additionneur complet généré par Quartus à partie de full_adder_sch.bdf
Image du procédé d’ouverture du fichier full_adder_sch.vhd dans lequel est saisi le code VHDL
de notre additionneur complet proposé par Quartus Prime (version 18.0) Lite Edition
34
Image du code de l’additionneur complet (full_adder_sch.vhd) proposé par Quartus à partie de
full_adder_sch.bdf que nous avons réalisé au paravent.
Fiche complète 1.2 : Code VHDL de l’additionneur complet (full_adder_sch.vhd)
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY work;
ENTITY full_adder_sch IS
PORT
(
b : IN STD_LOGIC;
a : IN STD_LOGIC;
c : IN STD_LOGIC;
sum : OUT STD_LOGIC;
carry : OUT STD_LOGIC
);
END full_adder_sch;
35
COMPONENT half_adder_vhdl
PORT(a : IN STD_LOGIC;
b : IN STD_LOGIC;
sum : OUT STD_LOGIC;
carry : OUT STD_LOGIC
);
END COMPONENT;
BEGIN
b2v_inst : half_adder_vhdl
PORT MAP(a => a,
b => b,
sum => SYNTHESIZED_WIRE_0,
carry => SYNTHESIZED_WIRE_1);
b2v_inst1 : half_adder_vhdl
PORT MAP(a => c,
b => SYNTHESIZED_WIRE_0,
sum => sum,
carry => SYNTHESIZED_WIRE_2);
36
Image des vues du navigateur de projet selon que nous sommes dans Hiérarchie, Fichiers, Unités
de Conception et Révisions à la fin de la réalisation de notre additionneur complet à partir de
deux (half_adder_sch.bdf) démi additionneurs et d’une porte ou dans le fichier de schéma de blocs
full_adder_sch.bdf et de la génération automatique de son code VHDL (full_adder_sch.vhd) par
Quartus.
Maintenant, nous pouvons convertir ce code VHDL en symbole, nous le verrons dans le prochain
module
Note : Notez que, si nous pouvons convertir le fichier '.bdf' en symbole, nous devons d'abord le
convertir en code VHDL, et ensuite nous pouvons convertir le code VHDL en fichier symbole.
37
1.8 Conclusion
Dans ce chapitre, nous avons appris à implémenter la conception en utilisant les méthodes de
schématique et de codage. Nous avons également effectué l'affectation des broches manuellement.
Enfin, nous avons appris à convertir le code VHDL en fichier de symboles et la conception
schématique en code VHDL.
38