Configuration de la plate-forme matérielle

Démarrer Vivado et créer un nouveau projet

Ouvrez un terminal et exécutez les commandes suivantes :

source /opt/Xilinx/Vivado/2019.1/settings64.sh
source /opt/Xilinx/SDK/2019.1/settings64.sh
cd /Data/etudiant/soc2020
LANG=en_US.UTF-8 vivado &

Dans la fenêtre d’accueil de Vivado, choisissez Create Project et renseignez les paramètres suivants :

Page Champ Valeur
Project Name Project name zybo-minimal
Project location fpga
Create project subdirectory Oui
Project Type RTL Project
Add Sources Target language VHDL
Add Constraints Ajoutez le fichier fpga/conf/ZYBO_Master.xdc
Copy constraints file into project Oui
Default Part Family Zynq-7000
Package clg400
Speed -2
Part xc7z010clg400-2

Décrire l’architecture matérielle

À cette étape, nous allons définir le schéma de notre System-on-Chip en ajoutant et en interconnectant des blocs IP.

Le constructeur, Digilent, fournit déjà un projet complet qui peut servir de base pour tous les développements sur la carte ZYBO. Ici, nous avons choisi de développer un projet plus petit en partant de zéro afin de mieux comprendre comment est construit un tel système.

  1. Dans le panneau Flow Navigator (à gauche), sous IP Integrator, choisissez Create Block Design.
  2. Renseignez le nom du design : zybo_minimal_design et validez.

Ajouter le processeur

Notre système sera construit autour d’un processeur ARM Cortex A9 intégré au FPGA. Nous commençons par ajouter le processeur au schéma. Nous devons également le configurer pour activer les périphériques nécessaires au fonctionnement du noyau Linux.

  1. Dans l’onglet Diagram, pressez le bouton « + » (Add IP) de la barre d’outils.
  2. Choisissez le composant ZYNQ7 processing system.
  3. Double-cliquez sur le composant ZYNQ pour accéder à sa configuration.
  4. Pressez le bouton Import XPS settings.
  5. Importez le fichier fpga/conf/ZYBO_zynq_def.xml.
  6. Pressez le bouton OK.
  7. En haut de l’onglet Diagram, repérez le message Designer Assistance available et pressez Run Block Automation.
  8. Acceptez la configuration sans la modifier.

Ajouter des entrées/sorties

Ajoutons des périphériques d’entrées/sorties simples (GPIO) afin de piloter les voyants de la carte et les boutons-poussoirs à partir du processeur.

  1. Dans l’onglet Diagram, pressez le bouton « + » (Add IP) de la barre d’outils.
  2. Choisissez le composant AXI GPIO.
  3. Répéter les opérations 1 et 2 pour ajouter un second composant GPIO.
  4. Double-cliquez sur chaque composant GPIO pour modifier sa configuration :
Composant Champ Valeur
axi_gpio_0 All Outputs Oui
GPIO Width 4
axi_gpio_1 All Inputs Oui
GPIO Width 4
  1. En haut de l’onglet Diagram, repérez le message Designer Assistance available et pressez Run Connection Automation.
  2. Sélectionnez All Automation et pressez le bouton OK.
  3. Dans le diagramme, sélectionnez le port gpio_rtl_0.
  4. Dans le panneau External Interface Properties, remplacez la valeur du champ Name par : leds.
  5. Dans le diagramme, sélectionnez le port gpio_rtl_1.
  6. Dans le panneau External Interface Properties, remplacez la valeur du champ Name par : btns.

Dans l’onglet Address Editor, vous pouvez afficher et modifier les adresses affectées à chaque périphérique vu du processeur.

Enregistrer et valider le schéma

  1. Dans le menu File, choisissez Save Block Design.
  2. Cliquez avec le bouton droit dans le schéma et choisissez Validate Design.

L’étape de validation peut afficher des Critical warnings de la forme :

[PSU-1] Parameter : PCW_UIPARAM_DDR_DQS_TO_CLK_DELAY_0 has negative value -0.073. PS DDR interfaces might fail when entering negative DQS skew values.

Pressez OK et ignorez ces messages.

Modifier les affectations d’entrées/sorties

À cette étape, Vivado va générer des fichiers sources VHDL à partir de notre schéma.

  1. Dans l’onglet Sources, depliez l’arborescence Design Sources.
  2. Cliquez avec le bouton droit sur zybo_minimal_design et choisissez Create HDL Wrapper.
  3. Acceptez l’option Let Vivado manage wrapper and auto-update et pressez OK.

Le fichier de contraintes fourni par Digilent définit la correspondance entre les noms des ports d’entrée/sortie du schéma et les numéros de broches du FPGA. Pour le moment, toutes les affectations de broches sont en commentaires et les noms de ports doivent être modifiés.

  1. Dans l’onglet Sources, depliez l’arborescence Constraints.
  2. Ouvrez le fichier ZYBO_Master.xdc.
  3. Décommentez les contraintes pour les ports btn et led (lignes 29 à 61) en retirant le premier # de chaque ligne (ou utilisez le bouton « // » de la barre d’outils).
  4. Renommez le port led en leds_tri_o.
  5. Renommez le port btn en btns_tri_i.
  6. Enregistrer le fichier.

Synthétiser et exporter la définition du matériel

Pour terminer, nous allons synthétiser le schéma, produire un fichier de configuration pour la logique programmable du composant Zynq 7000, et produire un fichier de définition de matériel destiné à configurer un noyau Linux.

  1. Dans le panneau Flow Navigator, sous Program and Debug, choisissez Generate Bitstream.
  2. À la fin de la synthèse, dans la boîte de dialogue Bitstream Generation Completed, pressez le bouton Cancel.
  3. Dans le menu File, choisissez Export puis Export Hardware.
  4. Pressez OK pour accepter le choix par défaut.