• Aucun résultat trouvé

Lancez l’outil « Vivado HLS 2014.3 » via son raccourci sous Windows

N/A
N/A
Protected

Academic year: 2022

Partager "Lancez l’outil « Vivado HLS 2014.3 » via son raccourci sous Windows"

Copied!
4
0
0

Texte intégral

(1)

p. 1/4

Année 2014-2015 Semestre S9

CONCEPTION NUMERIQUE AVANCEE

EN-325 BERTRAND LEGAL

FILIERE ELECTRONIQUE OPTION :SE

SUJETDUTP–INTRODUCTION A LA SYNHTESE DARCHITECTURES (HLS)

COMPTE RENDU

Aucun compte rendu ne doit être rendu à la fin des séances de TP. Toutefois, la rédaction d’un rapport d’expérimentation détaillant les aspects étudiés et les constatations est a envisager. En effet l’examen de EN325 porte en partie sur les observations et le travail effectués en TP.

Note : pour toute question spécifique à l’outil Vivado HLS et/ou au langage C, C++ ou SystemC supporté, référez vous au document UG902 fourni par Xilinx.

PARTIE 1-PRISE EN MAIN DE LOUTIL

La première partie du TP vise à vous familiariser avec l’outil Vivado de Xilinx. Vous implanterez votre premier circuit RTL décrit en langage C/C++ et étudierez l’impact des pragma supportés par l’outil.

1. Lancez l’outil « Vivado HLS 2014.3 » via son raccourci sous Windows.

2. Créez un nouveau projet « File : New project ».

− Nommez ce premier projet « test_tp_3a_se ».

− N’ajoutez pas de fichiers dans le projet pour le moment.

− Dans le dernier onglet lorsque vous devez indiquer la cible, utiliser le sous-menu « Boards » puis « ZedBoard… ».

− Valider et créez le projet vide.

3. Maintenant créez et ajouter deux fichiers dans votre projets. Pour cela cliquez sur « source » dans le panel de gauche et faites « new file ». Créez un fichier nommé « my_module.cpp » et un autre nommé « my_module.h ». Vous prendrez soin de ranger ces fichiers dans un répertoire nommé « src ».

− Cliquez sur votre projet (panneau de gauche) et sélectionnez « project settings » Dans le panneau « synthesis », indiquez que le nom du module à implanter est « my_module ».

(2)

p. 2/4

− Décrivez en SystemC un module nommé « my_module » qui possède : une entrée « x » de type sc_fifo, une sortie « y » de type sc_fifo et deux entrées de type sc_in<bool> (clk et reset).

− Implantez le comportement du module (équation ci-dessous) à l’aide d’un SC_CTHREAD sensible au front montant de l’horloge. Vous prendrez soin de déclarer « x » et « y » comme des données de type entier (int).

Y = 1000 / (2 * (X * X) – 7 * X + 1)

− Appuyez sur le bouton « Run C synthesis » afin de vérifier que votre code SystemC est syntaxiquement correct.

4. Avant de demander à l’outil de générer l’architecture RTL correspondant au comportement décrit, vous allez vérifier le comportement de votre code logiciel. Pour cela, vous allez devoir écrire 2 autres modules en SystemC.

− Le premier module génèrera des données de test. Les données seront produites toutes les 20 ns et leurs valeurs seront comprises entre 0 et 31.

− Le second module affichera les résultats du calcul à l’écran ainsi que la date à laquelle l’information a été reçue (sc_time_stamp).

− Ecrivez la fonction main permettant de rassembler ces éléments et de lancer la simulation pendant 4000 ns.

− Lancez la simulation de votre système et valider les valeurs obtenues en sortie.

Note : afin de supprimer certains warning lors de la simulation vous prendrez soin d’ajouter la ligne suivante dans votre fonction main : sc_report_handler::set_actions(

SC_ID_VECTOR_CONTAINS_LOGIC_VALUE_, SC_DO_NOTHING);

5. Maintenant que vous avez démontré que le comportement de votre code C est correct, réalisez sa synthèse. Pour cela cliquez, sur la petite flèche verte dans la barre d’outil.

− Une fois l’opération terminée, une nouvelle fenêtre est apparue. Analysez les informations fournies par l’outil après synthèse.

− Une vue plus détaillée des informations post-synthèse est disponible si vous cliquez sur la perspective « Analysis » en haut à droite de l’outil. Activez cette perspective et analysez toutes les informations fournies (performances, ressources).

6. Vous venez de générer une architecture matérielle de niveau RTL (sans vous en rendre compte). Les fichiers VHDL, Verilog et SystemC correspondant sont disponibles dans le panneau de gauche dans la sous rubrique « solution 1 ». Ouvrez les fichiers VHDL et essayer de reconstituer le circuit conçu pour vous par l’outil Vivado.

7. Les caractéristiques matérielles que vous avez analysées précédemment sont des estimations faites par l’outil Vivado. Afin de connaître de manière précise les performances du système, cliquez sur le menu « Solution » puis sur « Export RTL ». Sélectionnez « Evaluate » et choisissez le mode « VHDL » puis validez. Comparez les performances fournies dans ce nouveau rapport avec les estimations fournies précédemment par l’outil.

(3)

p. 3/4

8. Vous venez d’analyser les performances du circuit, mais vous avez oubliez de vérifier son fonctionnement… Corriger cela en lançant une simulation du circuit en mode SystemC CABA (Cycle Accurate, Bit Accurate).

− Afin de rendre la simulation possible, remplacer l’instanciation de « my_module » par l’instanciation de « my_module_rtl_wrapper » dans votre testbench.

9. Transformez votre programme source afin de faire en sorte que l’entrée « x » et la sortie « y » soient des codées sur 16 bits (tout comme les calculs intermédiaires). Recommencez toutes les étapes et comparez les performances des deux systèmes.

10. Transformez à nouveau votre programme source afin manipuler des données de type « int ».

Modifiez la fréquence d’horloge ciblée post-synthèse.

− Essayez avec les périodes 5 ns, 10 ns, 20 ns et 50 ns.

− Calculez les performances en terme de débit et de latence des circuits. Mettez ces chiffres en regard avec la complexité matérielle des circuits.

11. Maintenant vous allez changer la cible matérielle indiquée dans les paramètres de synthèse.

− Choisissez d’abord le FPGA présent sur la carte d’évaluation « Virtex-7 VC707 ». Faites la synthèse de votre description et interprétez les résultats.

− Faites de même lorsque la cible est un Kintex-7 (carte KC705).

Note : afin faciliter la comparaison des performances et l’interprétation des résultats vous respécifierez une contrainte de 10 ns pour la fréquence de fonctionnement.

PARTIE 2–IMPLANTATION DU MODULE RGB_2_YUV

Maintenant que vous maitrisez les concepts de base de l’outil Vivado HLS, vous allez mettre en œuvre vos connaissances afin d’intégrer le module de RGB_2_YUV développé en durant les TPs de SystemC. Dans cette partie, vous focaliserez votre attention sur les performances obtenues en fonction du niveau de description du modèle SystemC.

12. Reprenez le modèle SystemC réalisant la conversion RGB_2_YUV à l’aide d’opérations flottantes.

− Faites la synthèse de du modèle à l’aide de l’outil Vivado HLS.

− Analyser les résultats de synthèse.

13. Faites de même avec le modèle SystemC réalisant la conversion RGB_2_YUV à l’aide de données de type sc_fixed.

− Faites la synthèse de du modèle à l’aide de l’outil Vivado HLS. Réitérez pour différents formats de codage (nombre de bits pour la partie fractionnaire).

− Analyser les résultats de synthèse.

(4)

p. 4/4

14. Faites de même avec le modèle SystemC réalisant la conversion RGB_2_YUV à l’aide de données de type sc_int.

− Faites la synthèse de du modèle à l’aide de l’outil Vivado HLS. Réitérez pour différents formats de codage (nombre de bits pour la partie fractionnaire).

− Analyser les résultats de synthèse.

15. Comparez les performances obtenues vis à vis du module VHDL que vous avec décrit à la main durant les TP précédents.

16. Comparez les performances obtenues vis à vis du module VHDL que vous avec décrit à la main durant les TP précédents.

17. Afin d’améliorer les performances, il est possible de travailler sur plusieurs données en parallèle (données provenant d’itérations successives).

− Etudiez les pragmas [HLS stream] et [HLS PIPELINE] présentés dans la documentation de

l’outil Vivado HLS.

− Améliorez les performances de votre module en prenant en considération le fait que 64 échantillons sont toujours traités.

APPLICATION A UN CAS DETUDE REEL

Apres ces quelques exemples pédagogiques, vous avez suffisament de connaissances pour essayer d’intégrer la chaine de compression JPEG : RGB_2_YUV + DCT2d + Quantification + ZigZag.

18. Créez un projet par module pour commencer.

− Faites la synthèse de chacun des modules SystemC.

− En fonction des performances obtenues, si cela est nécessaire, optimisez la description SystemC et/ou ajoutez des pragma.

19. Une fois que l’ensemble des modules ont été synthétisé, développez un modèle SystemC qui regroupe l’ensemble de la chaine de traitement. Vous raccorderez les différents modules à l’aide de sc_fifo de profondeur 64.

− Faites la synthèse de la chaine JPEG. Quelles performances obtenez vous ?

− Combien de temps, faut il pour traiter une image de résolution 4k @ 100MHz ? 20. Optimisez votre description SystemC pour obtenir de meilleures performances.

Références

Documents relatifs

IP designers that provide AADL and SystemC models,.. and sub-systems previously modeled, generated and validated. Automatically generate the complete system model in

Une deuxième contribution de cette thèse a donc été d’exploiter ces propriétés pour développer la bibliothèque ASC qui permet de fidèlement modéliser en SystemC le

Our scheduling algorithm, called acyclic scheduling takes ad- vantage of the nature of the signal graphs corresponding to the implementation of processor and system architectures,

En fait, cette couche n'a pas vraiment été spécifiée ; la seule contrainte de cette couche, c'est de permettre un hôte d'envoyer des paquets IP sur le réseau... L'implémentation

La capacité de transport pour une ligne de longueur donnée peut être nettement améliorée par le passage d’un niveau nominal de tension de transport à un autre plus

Il existe ainsi de nombreuses situations, en sciences expérimentales et en sciences économiques, dans lesquels des phénomènes peuvent être modélisés par des équations du

run le script de compilation pour la simulation (lancer run compteur) cp_comteur le script de compilation et de synthèse du compteur pour dc_shell

La téléopéra- tion a pour défaut de demander plus de temps à l’humain que les recommandations : le temps requis d’un humain pour aider un agent détermine la qualité