Comment créer un projet sur Xilinx, le simuler et le mettre sur votre carte FPGA ?

Introduction

Dans ce cours on va voir comment créer un projet sur vivado HLS puis l’utiliser sur Vivado jusqu’à la programmation sur votre carte FPGA. Pour cela vous aurez besoin des deux logiciels venant de Xilinx : Vivado HLS et Vivado. Si vous ne les avez pas installé vous pouvez regarder notre cours dessus.

La première étape sera de créer notre programme en langage C sur Vivado HLS, puis de le tester. Une fois que le programme a le comportement que l’on souhaite on utilise le logiciel vivado pour générer les composants avec des blocs design et on met le logiciel sur la carte.

Vivado HLS

 Ce logiciel va nous permettre de créer notre projet, créer nos fichier en C++ (programme et test bench) et de les simuler pour voir si tous fonctionne correctement.

La première étape est d’ouvrir un nouveau projet dans Vivado HLS. Pour cela vous devez cliquer sur create new project :

Dans les futurs étapes nous n’allons pas ajouter de fichier dans la création de projet. Nous créerons les fichiers une fois la création du projet terminé.

La première étape est de donner un nom à votre projet et un répertoire. Pour cela vous devez donner un répertoire ne contenant pas d’espace ni de caractère spéciaux et pareil pour le nom de votre projet :

On nous propose ensuite d’ajouter des fichiers C++  au projet si vous les avez déjà crée. Si vous ajouter un fichier il est nécessaire de l’ajouter en top functions  pour le simuler (le fichier contenant le main). En ce qui nous concerner nous allons créer nos fichiers après la création du projet :

Ici vous avez la possibilté d’ajouter vos fichiers testbench. Un teste bench permet de vérifier si votre programme fonctionne correctement.

Ici vous allez cliquer sur les trois petits points afin de pouvoir choisir votre carte FPGA. Celle-ci sera associé à votre projet jusqu’à la programmation de la carte.

Ici vous pouvez choisir votre carte FPGA. Pour nous c’est la Zybo Z7-20. Faite attention a bien choisir la bonne carte car la génération du projet sera adapté à celle-ci.

Une fois que vous avez cliqué sur finish, on arrive sur Vivado HLS :

On va créer un nouveau fichier contenant notre programme. Pour cela il faut clique droit sur Source dans explorer puis New file :

Ensuite vous tapez le nom que vous souhaitez donner à votre fichier et ou vous souhaitez l’enregistrer (on vous conseille dans votre dossier) :

Voici un exemple de fichier en C. Comme vous pouvez voir il y a des pragmas au début de celui-ci.

Un pragma peut être utilisé pour donner une directive conditionnelle pour fournir de nouvelles fonctionnalités de préprocesseur. Vous pouvez également utiliser les pragmas pour fournir des informations définies par l’implémentation au compilateur.

On va maintenant dire à notre logiciel Vivado quel programme compiler en premier, quel est le fichier principal (pas le testbench donc). Pour cela on clique sur project puis Project Settings :

On va maintenant créer notre testbench.

Ensuite vous tapez le nom que vous souhaitez donner à votre fichier et ou vous souhaitez l’enregistrer (on vous conseil dans votre dossier) :

Voici un exemple de testbench pour l’algorithme Syracuse. Un testbench sert à vérifier que votre programme principal fonctionne bien. Pour cela vous devez réecrire votre programme principal puis vous devez appeler le programme principal et comparer les deux résultats.

Une fois nos programmes crées on va les simuler faire la synthèse…

  • Simulation

La première étape pour mettre le projet votre carte FPGA est de lancer la simulation pour voir si vous avez des erreurs et si votre programme à le comportement que vous souhaitez.

Pour cela vous avez différent boutons en haut de Vivado hls

Voici le premier bouton que l’on va utiliser pour simuler notre projet :

Voici ce que l’on a en cliquant sur le bouton. Cliquer sur ok.

Une fois la simulation terminée, on peut voir que les différents affichages que l’on a fait dans le testbench sont apparu dans la console et nous permet de vérifier que notre programme fonctionne bien. De plus il n’y a pas de warning en blue ni d’erreur en rouge donc on peut continuer.

  • Synthèse

Pour faire la synthèse du circuit on clique sur ce bouton :

Une fois le bouton appuyé voici ce que l’on obtient :

Une fois la synthèse terminé on peut voir que l’on n’a pas de ligne rouge qui signifierait une erreur donc on peut continuer.

  • Co-Simulation

Pour faire la cosimulation du circuit on clique sur ce bouton :

Une fois le bouton appuyé voici ce que l’on obtient :

Une fois la co-simulation terminé on peut voir que l’on a pas de ligne rouge qui signifierait une erreur donc on peut continuer.

  • Export RTL

Pour faire l’exportation RTLde notre IP on clique sur ce bouton :

L’exportation RTL va nous permettre d’utiliser notre projet crée sur Vivado HLS dans Vivado.

Vivado

Voici ce que l’on obtient en ouvrant le logiciel :

En cliquant sur quick start puis New Project, une page s’ouvre :

Ici vous devez nommer votre projet et où il sera situé sur votre ordinateur. Vous devez pas avoir d’espace dans le chemin d’accès à votre fichier.

On choisit ici de faire un RTL Project :

Ici vous devez choisir la carte sur laquelle vous allez travailler. C’est très important car les fichiers crées seront unique pour la carte et vous ne pourrez pas changer de carte une fois le projet crée.

Pour cela vous devez allez dans board puis choisir votre carte :

Une fois les configurations finis on valide le projet :

Voici ce que l’on obtient une fois le projet crée :

La première étape est de créer un Block Design où l’on va mettre nos composants. Pour cela on clique sur create Block Design. On va obtenir cette pop-up où l’on clique sur ok sans modifier.

Après avoir cliqué sur ok on voit qu’une page sur la droite s’est crée et qui s’appelle diagram. On va maintenant cliquer sur le plus pour ajouter notre premier composant.

Une fois cliquer sur le plus vous pouvez taper le nom du composant que vous souhaitez ajouter. Vous avez des exemples ci-dessous :

Pour ajouter d’autres composants vous pouvez faire un clique droit sur votre diagram puis add ip comme sur l’image  et taper le nom du composant que vous pouvez ajouter.

Voici des exemples de composants que vous pouvez ajouter :

Après l’ajout de composant vous aller avoir un message Run Block Automation et run Connection Automation comme ci-dessous :

Ici on a cliqué sur Run Block Automation. On va cocher toute les cases afin que le logiciel prenne en compte tous les composants sur notre diagramme :

La deuxième étape est de cliquer sur Run Connection Automation pour avoir les liens entre les composants :

Ici on a cliqué sur Run Connection Automation. On va cocher toute les cases afin que le logiciel prenne en compte tous les composants sur notre diagramme. Ceci va permettre d’obtenir les liaisons entres les composants :

Voici le diagramme avec les liens entre les composants :

Comment ajouter son composant ?

Si vous vous rappelez bien on a crée un projet sur vivado HLS. Ce projet nous a permit de générer notre propre composant. On va voir comment l’ajouter sur Vivado :

La première étape est d’ajouter le lien de notre projet Vivado HLS vers Vivado.

Pour cela on va faire clique droit sur le diagramme puis IP Settings :

Une fois cliqué sur IP Settings une page s’ouvre et vous devez cliquer sur IP puis Repository. Vous allez arriver sur la page ci-dessous.  Vous devez ensuite cliquer sur le + et choisir le projet que vous avez crée sur Vivado HLS. Ceci va permettre d’ajouter le composant et le code en C que l’on a crée sur vivado HLS.

Une cliqué sur le +, vous allez dans le dossier de votre projet Vivado HLS et vous prenez les fichiers VHDL crée. Une fois cliqué sur selecte une pop up va s’ouvrir pour vous dire qu’il a trouvé votre IP et vous faites ok.

Une fois votre IP trouvé vous devriez avoir le lien de celle-ci dans IP Repositeries :

En revenant sur votre diagramme et en faisant clique droit puis add ip on va pouvoir ajouter notre nouveau composant.

En tapant le nom de notre fonction on retrouve bien celle crée dans Vivado HLS :

Ici on peut voir notre composant ajouté. Pour avoir les liaisons avec les autres composants vous devez avoir cliqué sur Run Block Automation et Run Connection Automation.

La dernière étape est de faire valider notre projet par le logiciel. Pour cela vous devez allez dans l’onglet Design puis clique droit sur Design 1 et Validate Design :

  • Synthesis

 

Comme pour notre projet Vivado HLS, on va faire la synthèse de notre projet afin de voir si tous fonctionne correctement.

Une fois cliqué sur Run Synthesis, vous devez attendre que le processus se termine (cela peut-être long).

  • Implementation

Comme pour notre projet Vivado HLS, on va ensuite faire l’implementation de notre projet afin de voir si tous fonctionne correctement.

Une fois cliqué sur Run Implementation, vous devez attendre que le processus se termine (cela peut-être long).

  • Le Bitstream

La dernière étape pour notre projet est de générer le Bitstream. C’est l’opération la plus longue des trois et permet de génerer notre fichier sdk que l’on va utiliser dans Eclipse.

Si vous avez une erreur sur une des trois opérations précédentes, vous devez reprendre le tutoriel pour voir où est le soucis et ne pas passer à la suite.

  • Export Hardware

On va maintenant exporter notre hardware pour que notre projet soit disponible sur Eclipse. Pour cela on va dans file puis export et export hardware :

Une fois la pop up ouverte, on n’oublie pas d’inclure notre bistream en cochant la case afin de le retrouver dans notre projet Eclipse :

 

La dernière étape à faire sur Vivado est de faire file puis Launch SDK pour ouvrir Eclipse.

Eclipse

Une fois Eclispe lancé, on va créer un nouveau projet.

On clique sur file puis new et Application project :

Une fois la pop up ouverte vous devez donner un nom à votre projet. Faites attention à ne pas avoir d’espace ni de caractère spéciaux dans celui-ci :

Dans le choix des templates on choisit le fichier HelloWord.c :

Après avoir cliqué sur finish, on peut voir notre projet apparaître sur Eclipse :

On clique droit sur notre projet ArduinoFactory_bsp et fait Board Support Package Settings :

Sur la page Board Support Package Settings on clique sur standalone puis on règle stin et stdout sur ps7_coresignt_comp_0 :

  • Programmation du FPGA

La dernière étape est de programmer votre carte FPGA. Pour cela vous devez avoir branché votre carte . Ensuite cliquer sur Xilinx puis Program FPGA :

Sur la pop up de la programmation FPGA vous faites Program :

On lance maintenant Eclipse avec File puis Run As et Lauch :

Une fois le programme mis sur la carte et qu’on la lancé, on peut voir qu’il ne se passe dans la console :

Ceci est normal car la console est reglé par défaut sur ARM Cortex-A9 MPcore #1 alors que nous avons redirigé notre sortie “stdin” sur ps7_coresight_comp_0. On doit donc changer ce que la console lit par ARM Cortex-A9 MPCore #0 :

Une fois la console bien reglé on peut voir les valeurs venant du programme sur la carte FPGA :