Arduino MKR Vidor 4000 – Programmation du FPGA

Partie 1

la carte ARDUINO™ MKR Vidor 4000 est disponible à l’achat au prix de €62,90 HT (montant auquel il faudra ajouter la TVA et le port).

La Vidor 4000 se démarque des autres cartes ARDUINO™ par la présence d’un FPGA. Celui-ci devrait permettre des traitements audio/vidéo, ce qui n’était jusqu’alors pas possible avec un simple microcontrôleur.

Je vous faisais part récemment d’une présentation de la nouvelle carte ARDUINO MKR Vidor 4000.

Dans cette première partie, je vais vous présenter les bases pour reprogrammer la configuration utilisateur du FPGA.

Commentez Donner une note  l'article (5)

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Avertissement

Image non disponible

Notez que je décline toute responsabilité quant aux conséquences que pourrait avoir la mise en pratique de ce tutoriel. Les composants de la carte sont sensibles et n’apprécieront pas une mauvaise tension sur leurs broches ou que vous mettiez celles-ci en court-circuit suite à une mauvaise configuration chargée dans le FPGA.

II. Installation de Quartus

Le FPGA étant un ALTERA Cyclone 10LP, commencez par installer le logiciel Quartus :

  • allez sur la page de téléchargement d’INTEL/ALTERA et choisissez la dernière version de Quartus en version Lite ;
  • les éléments à télécharger sont, au minimum, Quartus Prime (includes Nios II EDS) et Cyclone 10 LP device support. Placez-les dans le même répertoire.
  • si vous ne disposez pas déjà d’un compte ALTERA, vous aurez certainement besoin de vous inscrire.

Si vous pensez utiliser un boîtier USB BLASTER pour la programmation en direct du FPGA, vous pourriez avoir besoin du package « Quartus II Programmer and SignalTap II » de la version Web Edition 13.0.

Une fois le téléchargement effectué, lancez l’installation de Quartus (QuartusLiteSetup-xx.yy-windows.exe).

Si, par défaut, l’installation ne le propose pas, sélectionnez le support du Cyclone 10LP dans la boite de dialogue suivante :

Image non disponible

III. Projet Arduino de base

Il nous faut ensuite avoir une base de projet avec les configurations d’E/S de la carte ARDUINO.

Vous pourrez trouver celle-ci à cet emplacement.

Décompressez le fichier ZIP et ouvrez avec Quartus (File → Open Project) le fichier MKRVIDOR4000.qpf.

Celui-ci se trouve sous l’arborescence : …\VidorFPGA-master\projects\MKRVIDOR4000_template.

Le module de plus haut niveau « Top level entity » est pour ce projet le module MKRVIDOR4000_top.

Image non disponible

Ce fichier définit :

  • le nom des signaux d’E/S et leur direction (input, output, inout…) ;
  • les liaisons internes (Wire), les buffers ou registres (reg)… ;
  • les instances d’autres modules (ici cyclone10lp_oscillator et SYSTEM_PLL) ;
  • les règles combinatoires (assign) ou séquentielles (always/begin/end).

Un autre fichier indispensable est celui qui met en relation les signaux d’E/S avec le brochage du FPGA. Ce fichier définit également les niveaux de tension de ces signaux, donc NE LE MODIFIEZ PAS.

Vous pouvez le visualiser en sélectionnant « Assignments → Assignments Editor ».

Si vous compilez le projet (Processing → Start compilation), et regardez l’architecture générée (Tools → Netlist viewers → RTL viewer), vous constaterez que le projet ne contient pour le moment que peu de chose.

Image non disponible
L’entrée d’horloge iCLK à 48 Mhz venant du SAMD21 passe par une PLL générant en sortie une horloge à 100 Mhz reliée à la SDRAM.

IV. Clignotement d’une LED

Nous allons ajouter une feuille de schéma à ce projet. Faites File→New et choisissez « Block Diagram/Schematic File » :

Image non disponible

S’ouvre alors une feuille dans laquelle nous allons pouvoir ajouter et connecter des composants comme sur un schéma électronique.

IV-A. Ajout des E/S

Pour faire clignoter notre LED nous avons besoin d’un port d’entrée (une horloge), et d’un port de sortie (le signal de la LED).

Ajoutez ces ports (1 Input + 1 Output) sur la feuille en cliquant sur l’icône suivante :

Image non disponible

Puis, soit en cliquant deux fois sur le nom, soit en faisant un clic droit et « Properties », renommez l’entrée « iLEDCLK » et la sortie « oLED » :

Image non disponible

Avant d’ajouter toute la logique nécessaire entre ces deux ports, sauvegardez le schéma (CTRL+S) sous le nom « TUTO_Schematic.bdf ».

L’horloge que nous allons utiliser en entrée est celle fournie par l’oscillateur interne du Cyclone 10. Celle-ci a une fréquence d’environ 80 Mhz, ce qui est beaucoup trop élevé pour notre besoin. Plutôt que d’utiliser une PLL en diviseur de fréquence, nous allons ici lui préférer un compteur.

À chaque coup d’horloge en entrée, le compteur sera incrémenté. Chacun des bits du compteur changera donc d’état à une fréquence qui lui sera propre : Freq_bit_n = (Freq_entrée / (2 ^ (n+1))).

Pour un clignotement toutes les secondes, il faudra prendre n=25.

IV-B. Ajout du compteur

Pour ajouter le compteur, appuyez sur l’icône « Symbol Tool » :

Image non disponible

Sélectionnez un LPM_COUNTER et cliquez sur « OK » pour le positionner dans le schéma :

Image non disponible

Éditez ensuite les propriétés du compteur (clic droit + « Properties ») et entrez la valeur 26 pour LPM_WIDTH :

Image non disponible

IV-C. Finalisation du schéma

Vous allez ensuite :

  • relier l’entrée iLEDCLK à l’horloge du compteur en utilisant la commande « Node Tool » :

    Image non disponible
    Image non disponible
  • sortir un bus de données depuis la sortie q[] du compteur avec la commande « Bus Tool » :

    Image non disponible
  • nommer ce bus « compteur[25..0] » (Clic droit sur le bus et « Properties ») :

    Image non disponible
  • et finalement relier (avec l’outil Node Tool) la sortie oLED au bus compteur.
    Comme seulement un des signaux du bus nous intéresse, vous devez dire à Quartus lequel prendre en le nommant (ici : compteur[25]).
Image non disponible

Vous en avez fini avec le schéma. Sauvegardez-le !

IV-D. Compilation

La prochaine étape sera d’inclure ce schéma dans le « Top level entity » du projet.

Pour cela, double-cliquez sur le fichier MKRVIDOR4000_top.v :

Image non disponible

et ajoutez-y les lignes suivantes (au-dessus de reg [5:0] rRESETCNT;) :

 
Sélectionnez
TUTO_Schematic TUTO_Schematic_inst
(
.iLEDCLK(wOSC_CLK) , // L’entrée d’horloge est reliée à l’oscillateur interne 80Mhz
.oLED(bMKR_D[6]) // La sortie LED est reliée à la broche 6 du port MKR
);

Il ne vous reste plus qu’à recompiler le projet :

Image non disponible

IV-E. Création du fichier app.h et intégration dans le sketch

La compilation a généré un fichier MKRVIDOR4000.ttf dans le répertoire output_files. Ce fichier liste, au format texte, les octets décrivant la configuration du FPGA.

Il va falloir inverser bit à bit chacun de ces octets avant de l’envoyer à la carte ARDUINO.

Pour cela, téléchargez le logiciel écrit en Java disponible ici : ReverseByte_V2.zip

Exécutez la ligne de commande java ReverseByte MKRVIDOR4000.ttf app.h.

Cela va générer le fichier app.h que vous pourrez inclure dans le sketch vide disponible ici : EmptySketch.zip.

Il ne vous reste plus qu’à charger le sketch dans la carte avec l’IDE Arduino.

  • En aucun cas vous ne devez reconfigurer le port PA20 du SAMD21 en sortie. Celui-ci est déjà utilisé en sortie par le FPGA.
  • Le port PA20 (nommé bMKR_D[6] coté FPGA) correspond à la broche 1 du connecteur J5 (notée « 6 »). Vous devez connecter une LED en série avec une résistance de valeur appropriée entre cette broche et la masse (GND) pour voir clignoter la LED.

Dans la prochaine partie de ce tutoriel, nous verrons comment implémenter un bloc PWM, et le paramétrer via le SAMD21.

V. Annexe : les fichiers du projet Blink

ReverseByte_V2 : Version compilée avec Java 1.8, et incluant le code source.

EmptySketch : Sketch chargeant uniquement le fichier de configuration app.h (non inclus).

FPGABlinkLED : Projet Quartus.

FPGABlinkLED_Sketch : Sketch incluant le fichier app.h.

VI. Note de la rédaction Developpez

Cet article est une mise à jour par l'auteur lui-même d'un article initialement posté sur son blog https://www.systemes-embarques.fr/.

Merci à f-leb et à naute pour la mise en page et les corrections.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Philippe. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.