Académique Documents
Professionnel Documents
Culture Documents
Tps Saïdane Pistone 2022
Tps Saïdane Pistone 2022
UE B
Architectures matérielles et réseaux de capteurs
2022-2023
Amer Baghdadi
2333
2.1333
2.2333
2.3666
2.4999
2.5999
3121212
3.1121212
3.2121212
4141414
4.1141414
4.2161616
5171717
5.1171717
5.2191919
6222222
7242424
0
1 INTRODUCTION
Nous nous intéressons dans cette série de travaux pratiques à la conception d’une architecture
matérielle en vue d’accélérer les performances de la détection de contours en terme de temps
d’exécution.
Une proposition incomplète d’une telle architecture a été introduite en cours ( Figure 1) avec deux
composants principaux :
Une unité opérative qui intègre des registres et des unités fonctionnelles (opérateurs
arithmétiques et logiques).
Une unité de contrôle qui intègre un automate ou machine à états finis et un générateur
d’adresses.
Memory OUT
Memory IN (dual ports)
Processeur dédié à la
VGA
détection de contours selon CTRL
la méthode de Sobel
Image d’entrée Image de sortie
100x100 100x100
Unités
FSM
Fonct.
Générateur Registres
d’Adr
1
La plateforme matérielle qui sera utilisée pour le prototypage est basée sur la carte Digilent Nexys
4 représentée en Figure 2 et comprenant un FPGA Xilinx Artix 7 (référence XC7A100T-CSG324)
et de nombreux périphériques et interfaces dont notamment une sortie VGA.
L’environnement de développement associé à cette carte sera la suite Vivado de Xilinx.
Concernant le dimensionnement de l’architecture, les simulations et les expérimentations sur
carte, nous allons considérer des images d’une définition de 100x100 codées sur 8 bits en niveau
de gris.
2
2 UNITE OPERATIVE DU PROCESSEUR
Nous allons débuter le développement du processeur dédié en commençant par l’unité opérative.
Dans un premier temps, il faudra lancer l’outil Vivado et ouvrir le projet fourni par l’enseignant sur
la page Moodle de l’UE.
Téléchargement de l’archive source
Une archive de projet Vivado contenant plusieurs fichiers sources vous est proposée sur la page
Moodle de l’UE. Cette archive contient plusieurs circuits et modules de tests décrits en langage
de description matérielle (VHDL), dont certains restent à compléter.
Une fois téléchargée, l’archive doit être décompressée dans un répertoire de travail que vous
aurez judicieusement créé dans l’arborescence de répertoires de votre compte informatique.
Ouverture de Vivado
Sous Linux, ouvrez un Terminal et lancez les commandes suivantes :
> SETUP MEE_VIVADO20192
> vivado &
L’interface graphique de Vivado démarre. Ouvrez le projet que vous venez de télécharger
(sobel.xpr) et identifier les différents modules de l’architecture du processeur.
3
Unité Opérative
clk
reset
-2*Pix32
2*Pix 12
-2*Pix21
2*Pix 23
-Pix 33
-Pix 31
-Pix 11
-Pix 31
Pix 11
Pix 13
Pix 13
Pix 33
ldPix 11
banc de registres regUnit
ldPix 21
Pix11 Pix12 Pix13
ldPix 31 ldPix 11
+ +
shReg
Pix21 Pix22 Pix23 Gh Gv
ldPix Edge ldPix 21
Abs Abs
Pix31 Pix32 Pix33
ldPix 31
+
shReg 255
8
gradientUnit >
ldPix Edge
PixEdge
pixedgeReg
pixel(7:0) pixEdge
Complétez le fichier regUnit.vhd pour décrire le banc de registres en respectant les règles
présentées en UE Electronique (en première année). Commentez votre code. Un document
d'introduction au VHDL incluant de nombreux exemples est disponible sur Moodle.
Validez le fonctionnement du banc de registres par simulation en utilisant le module de test
(testbench) fourni tb_regUnit.vhd.
Un testbench est un fichier VHDL (ou Verilog, …) qui spécifie des stimuli (entrées, horloges) à une
Unité Sous Test (Unit Under Test, UUT, en anglais) afin de valider son comportement pour les
différentes combinaisons possibles aux entrées.
4
Quelle est la nature du processus VHDL qui décrit le banc de registres ? sa liste de sensibilité ?
La simulation fonctionnelle a permis de valider le module ? justifiez.
La liste de sensibilité est constituée de l’horloge et du reset (clk et reset). Il s’agit d’un processus séquentiel.
La simulation valide notre modèle. A chaque fois que Pix11, Pix21 ou Pix31 valent 1 une
nouvelle valeur est chargée dans le pixel correspondant. D’autre part, lorsque shReg vaut 1, il y a un
décalage de l’information sur les pixels suivants.
5
Effectuez une synthèse logique et relever les performances obtenues en termes de ressources
occupées (Flip-Flops, LUTs) sur le FPGA cible considéré.
Nous avons besoin pour représenter le circuit de 3 registres à décalages consititués de 3 rangées de
registres de mots de 8 bits.
Un registre à décalage est constitué de 3 lignes de registres de mots de 8 bits en série et dans chaque
ligne il y a 8 flip-flops en parallèle. On a donc besoin de 3 * 3 * 8 flip-flops soit 72 flip-flops.
6
Donnez le type et la quantification que vous avez utilisé pour les signaux internes. Justifiez.
On introduit 5 grandeurs : Gh, Gv, Sum qui correspondent respectivement aux gradients horizontal et
vertical, à la valeur absolue de ces gradients et à la sum des deux valeurs absolues.
Le type de ces signaux est binaire signé pour Gh et Gv et binaire non signé pour Sum.
La quantification choisie est 11 bits pour Gh, Gv, en effet Gh et Gv prennent des valeurs comprises entre
1020 et -1020 (255 + 510 + 255).
Pour Sum, on choisit une quantification sur 11 bits car elle peut prendre des valeurs entre 0 et 2040. v
Il y a 3 processus utilisés. Le premier utilise la variable Pix, et le deuxième fait la comparaison. Finalement, le
troisième processus est un processus implicite. Nous n’utilisons pas de processus explicite pour déclarer les
variables Gh, Gv et Sum. Il n’y a pas de liste de sensibilité. La simulation permet de valider le composant. Les
valeurs de Gh et Gv correspondent aux valeurs des pixels. Toutes les sorties sont cohérentes
7
Effectuez une synthèse logique et relever les performances obtenues en termes de ressources
occupées (Flip-Flops, LUTs) sur le FPGA cible considéré.
8
2.4 REGISTRE DE SORTIE
Le troisième composant de l’unité opérative consiste d’une simple bascule D (Flip-Flop, ou registre
de taille 1 bit).
Complétez le fichier pixedgeReg.vhd pour décrire cette bascule D qui permet de mémoriser le
résultat du calcul de Sobel sur chaque pixel avant son transfert dans la mémoire de sortie.
Effectuez une synthèse logique et vérifier que les ressources occupées correspondent bien à un
seul Flip-Flop pour ce composant !
Le fichier operativeUnit.vhd avec l’entité qui porte le même nom instancie les trois sous-
composants qui constituent l’unité opérative. Ce fichier est fourni.
Analysez ce fichier, fourni, pour comprendre sa structure : déclaration des sous-composants,
instanciation, interconnexions.
Concernant les interconnexions, celles qui sont internes à l’unité opérative doivent être déclarées
comme signaux internes. Les interconnexions externes sont à réaliser en connectant directement
les ports des sous-composants aux ports de l’unité opérative.
Validez le fonctionnement de l’unité opérative par simulation en utilisant le testbench fourni
tb_operativeUnit.vhd.
9
Effectuez une synthèse logique et relever les performances obtenues en termes de ressources occupées
(Flip-Flops, LUTs) sur le FPGA cible considéré.
Comme on peut le voir sur l’image ci-jointe le nombre de Flip-Flops est de 73 et de LUTs est 86.
Cela correspond de manière logique à la somme des Flip-Flops et des LUTs nécessaires dans chacun des sous-
ensembles précédents.
10
11
3 GENERATEUR D’ADRESSES
12
13
4 AUTOMATE OU MACHINE A ETATS FINIS
L’automate ou machine à états finis représente le cœur de l’unité de contrôle du processeur dédié
à la détection de contours. Elle permet de générer tous les signaux de contrôle : pour l’unité
opérative, pour le générateur d’adresses, ainsi que pour les mémoires et les interfaces
d’entrée/sortie. Elle reçoit aussi des signaux d’états de ces composants, comme par exemple les
résultats des comparateurs.
reset ldPix31
go=0
go shReg
??
ldPixEdge
EndImage=1 incPtrLine
NewLine
?? clrPtrLine
NewLine=0
EndImage sh3 Pix7
incPtrCol
clrPtrCol
StartDisplay =1 ??
Pix8 enM_R
EndSobel
enM_W
?? selPix(1:0)
OutEdge Pix9 2
Exec
StartDisply
?? ??
Un squelette de cette automate a été présenté en cours d’introduction avec plusieurs signaux déjà
complétés (Figure 4). Ainsi, il est demandé de travailler sur la finalisation de cette automate.
14
Complétez le fichier automate.vhd pour modéliser cette automate en VHDL.
Combien de processus sont-ils utilisés pour décrire l’automate et de quelles natures sont-ils ?
liste de sensibilité ?
La simulation fonctionnelle a permis de valider le composant ? justifiez.
Nous observons deux processus pour décrire l’automate. Le premier est ‘state_reg’ et a uniquement
RESET et CLK dans sa liste de sensibilité. Ce processus est alors séquentiel.
Le second processus, nommé ‘comb_logic’, est un processus combinatoire qui possède comme liste
de sensibilité tous les signaux en entrée : I_go, I_EndImage, I_NewLine, current_state.
Nous affichons, ci-après, les résultats de la simulation. Cette dernière valide notre composant.
En effet, les valeurs de current_state et next_state sont cohérentes et bien décalées d’une horloge.
15
4.2 SYNTHESE LOGIQUE DE L’AUTOMATE
Effectuez une synthèse logique et relever les performances obtenues en termes de ressources
occupées (Flip-Flops, LUTs, …) sur le FPGA cible considéré.
16
5 INTEGRATION DU PROCESSEUR ET PROTOTYPAGE
Pour assembler les unités constituant le processeur de Sobel, le module VHDL sobelProc.vhd
a été créé et ajouté à votre projet. Ce module instancie l’unité opérative, le générateur d’adresses
et l’automate à états finis.
La simulation a permis de valider le processeur. En effet, la succession des états est correct.
De plus, on atteint bien la fin de l’image au bout d’un certain temps.
17
Effectuez une synthèse logique et relever les performances obtenues en termes de ressources
occupées (Flip-Flops, LUTs, …) sur le FPGA cible considéré.
18
Donnez et commentez les résultats obtenus. Quel est le pourcentage des ressources utilisées
par le processeur Sobel par rapport à celles disponibles sur le FPGA cible Artix 7 XC7A100T-
CSG324. Commentez.
Pour les LUTs nous devons avoir la somme de ceux obtenus précédemment.
On a 86 + 46 + 9 = 141 LUTs
Pour les FlipFlop, on doit avoir la même chose :
On a 73 + 14 + 17 = 104 Flip Flops
Pour finaliser la validation du processeur conçu, il faut l’intégrer dans un système complet avec
une mémoire d’entrée (image de test), une mémoire de sortie et un système d’affichage.
Pour l’image de test, la célèbre photo de Lena est mise à disposition avec une résolution 100x100
et un codage sur 8 bits en niveaux de gris.
Pour le système d’affichage, nous mettons à votre disposition un bloc d’interface codé en VHDL
pour utiliser le contrôleur VGA intégré à la carte.
Le module VHDL sobelSys.vhd a été créé et ajouté à votre projet. Ce module instancie le
processeur de Sobel, les mémoires en entrée et en sortie, ainsi que le contrôleur VGA. Vérifiez sa
structure et son contenu.
Effectuez une synthèse logique et relever les performances obtenues en termes de ressources
occupées (Flip-Flops, LUTs, mémoires, …) sur le FPGA cible considéré.
19
Donnez et commentez les résultats obtenus.
Nous avons au total 393 LUTs and 186 FlipFlops. Dans le logiciel, on peut voir que la MMCM, qui
gère l'horloge, est l'élément le plus utilisé.
Une fois la génération du bitstream terminée, vous pouvez connecter une carte Nexys 4 et un
écran VGA avant de transférer le bitstream sur le FPGA de la carte via le port USB dédié à la
programmation. Dans les conditions actuelles de TP, il faudra déposer le fichier de bitstream
généré (sobelSys.bit) sur Moodle. L’enseignant fera le test sur carte. Le bitstream généré
se trouve dans le sous-repertoire /sobel/sobel.runs/impl_1
20
Le prototypage et la démonstration sur carte sont-ils concluants ?
Nous avons pu vérifier que la démonstration sur carte a bien fonctionné. En effet,
nous bien les contours de l’image comme le montre l’image suivante.
21
6 ANALYSE DES PERFORMANCES
Dans ce rapport, cherchez la section « Max Delay Paths » et relevez la valeur du « Data Path
Delay ». Cette valeur correspond à la période minimale de l’horloge, i.e. au délai du chemin critique
du circuit. Le chemin critique est également indiqué (sa source et sa destination sont identifiées).
La fréquence maximale d’horloge est l’inverse de cette période minimale !
xxxxx ns
xxxxx ns
Notez que nous utilisons sur la carte une horloge de fréquence de 25 MHz (i.e. une période de 40
ns), bien inférieure à la fréquence maximale. Le système doit donc s’exécuter correctement avec
cette fréquence de fonctionnement.
22
Identifiez la fréquence d’horloge maximale atteignable sur ce FPGA.
Dans le rapport on trouve DataPathDelay = 12.210 ns ce qui nous donne un fréquence maximale
d’utilisation de environ 82MHz.
Pour traiter le premier pixel d’une ligne il faut 14 cycles d’horloge. En revanche, pour traiter les autres
pixels il est nécessaire d’avoir 6 cycles d’horloges.
23
Combien de cycles d’horloge sont nécessaires pour le traitement d’une image de définition
396x396 ?
D’après notre méthode, nous ne traitons pas les bordures. Ainsi, l’image filtrée est de dimension 394x394.
Ainsi, pour les 394 premiers pixels nous avons besoin de 5516 cycles d’horloges. Pour les pixels restants,
Il nous faudra 929 052 cycles d’horloges. Finalement, nous avons 934 568 cycles d’horloges.
Nous avons besoin de 87 images par seconde. En effet, le rapport du nombre d’images par le
nombre de cycles d’horloge nous donne notre nombre d’images par seconde pour une définition
de 396x396.
24
Pix11 Pix12 Pix13 Pix11 Pix12 Pix13
ldPix 11
25
26