I.
Introduction
Contexte et objectifs du TP :
Ce compte rendu présente la réalisation d'un simple additionneur complet puis
un additionneur complet 4 Bits en utilisant Xilinx Vivado et en intégrant un
circuit FPGA.
L'additionneur complet, également connu sous le nom de "full adder" en
anglais, est un circuit logique combinatoire qui permet d'additionner deux bits
ainsi qu'une retenue d'entrée et de produire une somme et une retenue de sortie.
L'objectif principal de ce TP était de comprendre et de maîtriser le processus de
conception d'un circuit FPGA en utilisant Vivado. Nous avons commencé par
décrire le circuit de l'additionneur complet en utilisant un langage de description
matérielle VHDL. Ensuite, nous avons effectué la simulation du circuit pour
vérifier son fonctionnement correct.
Ce compte rendu détaillera les différentes étapes de conception, de simulation,
de synthèse et de génération de bitstreams réalisées dans Vivado.
II. Description de l'architecture :
Figure 1 : Architecture d'additionneur complet
Pour la description de circuit en VHDL on fait recourt à ce code comme ci-
dessous en utilisant l'environnement Xilinx Vivado et après avoir défini les ports
entrés/sorties comme présentés par la figure 1.
On a recours à des fonction logiques de base XOR et AND qui sont prés défini en
VHDL.
En suite, pour tester le fonctionnement de demi additionneur on crée un test
bench comme suit :
Pour le test bench on implémente les valeurs des entrées A,B et C.
III. Simulation d’ additionneur :
On lance la simulation en cliquant sur Run Behavioral Simulation comme montré ci-
dessous :
La simulation est donnée par suite :
IV. Implantation du demi additionneur sur le FPGA :
Ajout du fichier de contraintes :
Un fichier de contraintes .xdc, abréviation de "Xilinx Design Constraints", est
un fichier utilisé dans le cadre de la conception de circuits numériques sur une
plate-forme FPGA Xilinx. Ce fichier contient des directives et des contraintes
spécifiques qui définissent les caractéristiques de fonctionnement et de
synchronisation du circuit, ainsi que les interconnexions avec d'autres
composants ou interfaces.
A l'aide du Datasheet de la carte FPGA Zybo Z010 on implémente nos
entrées/sorties comme suit :
entrée A : PIN G15 :
SW0 entrée B : PIN
P15 : SW1 entrée C :
PIN W13 : SW2
sortie SUM : PIN M14 : LED0
sortie Carry : PIN M15 : LED1
Pour notre cas le fichier contrainte est présenté comme ci-dessous :
Synthèse logique :
Lancement de la synthèse en cliquant sur Run Synthesis comme montré :
Placement et routage :
On retrouve ensuite les LUTs, les entrées et les sorties :
figure 2 : Exemple d'entrée B
Génération du bitsream et configuration du FPGA :
Pour générer le programme à la carte FPGA on effectue cette étape :
On clique sur Generate Bitstream et on sélectionne Open Hardware Manager :
Le résultat est obtenue sur la carte FPGA en utilisant SW0 , SW1 et SW2 dont on
n'a pas pris une photo de résultat.
V. Les rapports :
The Utilization report nous indique le nombre utilisé des LUTs pour notre cas on a
utilisé seulement un seul LUT sur 17600 LUTs qui sont disponibles.
Dans le même rapport, on a les type de registres qui sont divisés en Clock
Enable, des registres Synchrones et des registres Asynchrones.
Dans le Power Report trouvé ci-dessous, on peut trouver le Total On-Chip
Power en W utilisé. Pour notre cas on a utilisé 2.844 W.
Dans le Timing report on trouve :
WNS (Worst Negative Slack) : Le WNS est la valeur la plus négative de
tous les retards de chemin dans un FPGA. Il représente le pire cas de retard
excessif par rapport aux contraintes de temporisation spécifiées.
TNS (Total Negative Slack) : Le TNS est la somme de tous les retards de
chemin négatifs dans un FPGA. Il représente la quantité totale de retard
excessif par rapport aux contraintes de temporisation.
Pour notre cas WNS et TNS ne sont pas disponibles car on n'a pas ajouté la
configuration de Clock dans le fichier contraintes.
VI. Description de l'architecture d’Additionneur 4 bits :
Figure 3 : Architecture d'additionneur complet 4 Bits
Pour la description de circuit en VHDL on fait recourt à ce code comme ci-dessous en utilisant
l'environnement Xilinx Vivado et après avoir défini les ports entrés/sorties comme présentés par la
figure 3.
Pour réaliser un additionneur 4 bits à partir d'un additionneur complet (full adder) en
VHDL dans Vivado, vous commencez par définir un module pour l'additionneur
complet, qui prend deux bits d'entrée et un bit de retenue (carry-in) et produit un bit
de somme et un bit de retenue (carry-out). Ensuite, vous créez un module pour
l'additionneur 4 bits en instanciant quatre de ces additionneurs complets en série.
Chaque additionneur complet prend une paire de bits correspondants des deux
nombres 4 bits à additionner ainsi que le bit de retenue généré par l'additionneur
complet précédent. Le premier additionneur complet prend un bit de retenue initial
de zéro. Vous connectez les sorties des bits de somme des additionneurs complets
aux bits correspondants de la sortie 4 bits de l'additionneur, et le bit de retenue final
donne le carry-out global.
En suite, pour tester le fonctionnement de demi additionneur on crée un test bench
comme suit :
V. Simulation d’ additionneur :
On lance la simulation en cliquant sur Run Behavioral Simulation comme montré ci-
dessous
La simulation est donnée par suite :
VI. Implantation d’ additionneur complet 4 Bits sur le FPGA :
Nous avons réalisé le même travail d'implémentation que pour l'additionneur complet, mais pour
l'additionneur 4 bits, nous l'avons implémenté sur un seul bit en raison des périphériques
disponibles sur la carte FPGA Zybo 7.
VII. Les rapports :
Dans le Power Report trouvé ci-dessous, on peut trouver le Total On-Chip Power
en W utilisé. Pour notre cas on a utilisé 2.853 W.
Dans le Timing report on trouve :
WPWS (Worst Positive Slack) : Indique la meilleure marge positive de temps dans votre
design.
Dans notre cas on trouve 3.5ns
V. Conclusion:
En conclusion, ce travail pratique a abordé les principales clefs pour utiliser la suite d'outils
Vivado de la société Xilinx en basant sur la description en VHDL d'un additionneur simple 1 et
4 Bits.