show menu


Les utilisateurs connectés peuvent télécharger ce tutoriel en pdf

Première utilisation de la partie PS d'un Zynq-7000

Posté par Florent - 02 Décembre 2016

Introduction

Dans ce tutoriel nous allons utiliser la partie Processor System (PS) d’un Zynq-7000 sur en utilisant Vivado 2016.2. Pour ce tutoriel, nous allons utiliser rune carte de développement ZC702 de Xilinx mais il peut également être réalisé sur toutes autres cartes comportant un Zynq-7000 SoC.

Configurer la partie Processor System (PS) dans Vivado

Dans cette partie, nous allons utiliser Vivado pour configurer la partie Processor System du Zynq-7000. En particulier, nous allons voir le mappage des périphériques E/S (I/O peripherals - IOP) vers les pins du composant.

Créer un projet Vivado Project

Créez un nouveau projet RTL dans Vivado RTL ciblant la carte Xilinx ZC702. Créez un nouveau Block Diagram (BD) en cliquant sur “Create Block Diagram” dans le flow navigator.

Figure 1 - Créez un nouveau Block Diagram dans Vivado

Nommez le block diagram “zynq_platform”, garder la configuration par défaut pour “Directory” et “Specify Source set” et cliquez sur OK.

Figure 2 - Fenêtre “Create Block Design”

Ajouter la partie processing system du Zynq SoC dans le BD en cliquant sur le bouton d’ajout d’IP et en sélectionnant “ZYNQ7 Processing System”. Cette IP est appelée hard IP. Elle est déjà présente dans le Zynq SoC (en dur). L’ajouter à notre design nous permet simplement de sélectionner quel composant nous voulons activer et quels pins nous voulons utiliser (parmi les pins réservés pour la partie PS).

Figure 3 – Ajouter l’IP ZYNQ7 Processing System

Configurer l’IP Zynq7 PS

Double cliquez sur l’IP pour la configurer. Il y a une configuration par défaut pour la ZC702. Cliquez sur  “Presets > ZC702”.

Figure 4 - ZC702 Presets

Grace à cela, Vivado configure le MIO (Multi-use IO) pour mapper les périphériques E/S (IOP) qui peuvent être utilisés sur la ZC702 vers les pins correspondant.

Figure 5 - XC7Z020 AP SoC to CP2103 Connections (source: Xilinx UG850)

Par exemple, comme mentionne dans le guide utilisateur de Xilinx UG850, la carte de développement ZC702 contient un composant Silicon Labs CP2103GM USB-to-UART qui nous permet de communiquer avec la carte en UART en utilisant le port USB de notre PC. Les pins RX et TX du CP2013GM sont physiquement connectes au bloc UART_1 intégré dans le XC7Z020 AP SoC PS. Comme montre dans la Figure 5, les pins TX et RX du CP2013GM sont connectes aux pins MIO48 et MIO49 du Zynq-7000 SoC.

Si on clique sur “MIO configuration” dans IHM de configuration de l’IP Zynq7 PS, sous “I/O peripherals” on peut voir que Vivado a correctement mappe le périphérique UART 1 aux MIO48 et MIO49. Vous pouvez vérifier/configurer la Baud Rate de l’interface UART dans “PS-PL configuration” sous “General”. Par default, elle devrait être configurée à 115200.                            

Figure 6 - Zynq PS – Configuration des MIO

Fermer l’IHM de configuration de l’IP Zynq7 PS en cliquant sur OK. Dans le BD, connecter le pin de sortie FCLK_CLK0 du Zynq7 PS a son pin d’entrée M_AXI_GP0_ACLK.

Figure 7 - Connecter le pin de sortie FCLK_CLK0 du Zynq7 PS a son pin d’entrée M_AXI_GP0_ACLK

Vérifiez que le design soit correct en cliquant sur l’icône “Validate Design”. Vous ne devriez pas rencontrer d’erreur. Sauvegardez le BD.

Générer les fichiers HDL

Dans la fenêtre “Sources”, fait un clic droit sur le BD et cliquez sur “Generate Output Products”. Cela va générer les fichiers HDL correspondant à l’IP Zynq7 PS.

Figure 8 - Generate Output Products

Dans la fenêtre “Generate Output Products”, sélectionnez “Global” et cliquez sur “Generate”. Lorsque la génération des “Output Products” est terminée, faites de nouveau un clic droit sur le BD et cliquez sur “Create HDL Wrapper”.  Dans la fenêtre “Create HDL Wrapper” sélectionnez “Let Vivado manage wrapper and auto-update”.

Figure 9 - Let Vivado manage wrapper and auto-update

Vous pouvez voir qu’un fichier HDL (VHDL ou Verilog) a été créé au-dessus de votre BD. Le type de fichier (VHDL ou Verilog) dépend des configurations de votre projet. Vous pouvez le changez en cliquant sur “Project Setting” dans le Flow Navigator et en changeant le paramètre pour “Target language”.

Figure 10 – Paramètre Target language

Une fois le wrapper créé, cliquez sur “Generate Bitstream” dans Flow Navigator et cliquez sur Yes si une fenêtre “No Implementation Results Available” apparait.

Programmer la partie PS en utilisant Xilinx SDK

Exporter le design hardware vers Xilinx SDK

Pour programmer la partie PS du Zynq-7000 nous allons utiliser Xilinx SDK. Premièrement, nous devons exporter la configuration de la partie PS (et Bitstream généré (optionnel)) vers Xilinx SDK: Dans Vivado, cliquez sur “File > Export > Export Hardware”. Dans la fenêtre “Export Hardware”, sélectionnez “Include Bitstream”.

Figure 11 - Fenêtre Export Hardware

Lorsque l’on laisse l’option “Export to” en “<Local to Project>”, le design Hardware est exporte dans le dossier “<project_folder>/<project_name>.sdk”. Dans ce dossier, le fichier exporte est le fichier “zynq_platform_wrapper.hdf”, HDF pour Hardware Definition File (Fichier de Définition Hardware en français). Une chose intéressant à noter est que ce fichier est un fichier. Si on l’ouvre avec un outil comme 7-zip, on peut voir qu’il contient plusieurs fichiers dont le Bitstream “zynq_platform_wrapper.bit”.

Figure 12 – Fichier zynq_platform_wrapper.hdf

Ensuite, dans Vivado, lancer Xilinx SDK en cliquant sur “File > Launch SDK”. Garder les paramètres par défaut dans la fenêtre “Launch SDK” et cliquez sur OK.

Test de la partie Processing System avec le projet “Hello World”

Dans cette partie nous allons réaliser une application bare-metal. Le terme Bare-metal est utilisé pour un software sans Operating System.

Dans SDK, dans le “Project Explorer” on peut voir la Platform Hardware “zynq_platform_wrapper_ hw_platform_0” créée à partir de notre fichier .hdf (on peut voir qu’elle inclue les mêmes fichiers).

Au moins trois parties sont nécessaires pour avoir une application fonctionnant dans la partie PS d’un Zynq :

· Une plateforme hardware

· Une BSP (Board support Package) bare-metal. C’est une collection de librairies et de drivers et qui forme la couche basse de l’application.

· Une application.

Créer l’application

Pour créer une nouvelle application “Hello World”, cliquez sur “File > New > Application Project”. Nommez l’application “hello_world”. Assurez-vous que la valeur de “OS Platform value” est “standalone” ce qui correspond à une application bare-metal. Votre Platform Hardware doit être automatiquement sélectionnée. Nous allons utiliser le premier core (ps7_cortexa9_0). Comme vous pouvez le voir au bas de la fenêtre, Xilinx SDK va automatiquement créer une BSP pour notre application contenant tous les drivers dont nous pouvons avoir besoin.

Figure 13 – Créer une nouvelle application dans Xilinx SDK

Cliquez sur “NEXT”, sélectionnez le template “Hello World” et cliquez sur “FINISH”.

Figure 14 - Template Hello World

Lancer l’application sur la carte

Compiler l’application en cliquant sur l’icône build. Pour tester l’application sur la, assurez vous premierement que les cables USB-to-JTAG et USB-to-UART sont connectes du PC vers la carte. Ensuite alimentez la carte. Programmez le FPGA en cliqunt sur l’icone program et en cliquant ensuite sur “Program”.

Pour lancer le debbuger, selectionner votre application, cliquez sur la petite fleche a cote de l’icone de debug et cliquez sur “Debug Configurations…

Figure 15 - Xilinx SDK - Debug Configurations

Faites un clic droit sur “Xilinx C/C++ application (GDB)” et cliquez sur “New”.

Figure 16 - New Xilinx C/C++ Debug application (GDB)

Lorsque la nouvelle “Xilinx C/C++ Debug application (GDB)” a été créée, cliquez sur “Debug”.

Figure 17 – Lancer l’application de Debug

Si une fenêtre de Debug apparait vous demandant si vous voulez changer la vue pour la “Debug view“, cliquez sur YES.

Ouvrez un terminal UART terminal pour voir la réponse de la carte. Vous pouvez utiliser un outil “externe” tel que “Tera Term” ou ouvrir une console UART dans SDK en cliquant sur “Window > Show View > Other…” et sélectionnant “Terminal”.

Figure 18 – Ouvrir un terminal UART dans Xilinx SDK

Dans le terminal, cliquez sur l’icône  pour configurer le terminal. Sélectionnez “Serial” et “115200” pour le “Baud Rate”.

Figure 19 – UART terminal configuration

Lancez l’application en cliquant sur l’icône Resume.

On peut voir que le texte “Hello World” est imprime dans la console, montrant que notre application fonctionne correctement.

Figure 20 - Hello World imprimé dans le terminal UART

Comprendre le code Software

Figure 21 – Contenu du fichier helloworld.c crée par Xilinx SDK

Le code de l’application est montré dans la Figure 21. Vous pouvez voir ce contenu en ouvrant le fichier  helloworld.c dans l’application hello_world.

Figure 22 - Fichier helloworld.c créé by Xilinx SDK

Dans la partie déclaration des librairies du fichier, on peut voir que 3 librairies sont déclarées:

· stdio.h qui fait partie de la librairie standard C.

· platform.h qui contient les prototypes des fonctions init_platform() et cleanup_platform().

· xil_printf.h qui contient les prototypes des fonctions Xilinx utilisées pour écrire/lire des données via UART.

Dans la première ligne du main(), le SW appelle la fonction init_platform() qui initialise la plateforme. Pour faire simple, pour notre application, cette fonction configure l’UART. Dans la seconde ligne, la fonction print() est appelée pour envoyer le texte “Hello World” vers l’interface UART. Cette fonction est une version simplifiée de la fonction printf() de la librairie stdio C standard. La troisième ligne du main() appelle la fonction cleanup_platform() qui nettoie la plateforme (désactive le cache). La dernière ligne, “return 0” termine le programme.



Poster un commentaire

Seuls les utilisateurs connectés peuvent poster des commentaires