URL:
https://linuxfr.org/news/sortie-de-la-version-0-6-0-du-configurateur-de-fpga-openfpgaloader
Title: Sortie de la version 0.6.0 du configurateur de FPGA openFPGALoader
Authors: martoni
Yves Bourguignon, palm123, gwenhael goavec-merou, Xavier Claude et patrick_g
Date: 2021-12-01T08:45:41+01:00
License: CC By-SA
Tags: open_hardware, fpga et open_fpga_platform
Score: 3
openFPGALoader est un utilitaire en ligne de commande, écrit en C++ et sous licence Apache 2.0. Il permet de configurer des FPGA de toutes marques. L’objectif du projet est de pouvoir prendre en charge tous les FPGA du marché ainsi que tous les adaptateurs et sondes de configuration.
----
[La version 0.6.0 d'openFPGALoader](
https://github.com/trabucayre/openFPGALoader/releases/tag/v0.6.0)
[Le dépot officiel](
https://github.com/trabucayre/openFPGALoader)
[La documentation](
https://trabucayre.github.io/openFPGALoader/)
----
La chaîne de développement sur FPGA
===================================
Pour développer sur un FPGA, nous avons besoin d'un ensemble de logiciels et de formats spécifiques. La chaîne de développement sur FPGA peut se résumer par la figure ci-dessous:

L'architecture du composant est décrite dans un langage de description ([HDL](
https://fr.wikipedia.org/wiki/Langage_de_description_de_mat%C3%A9riel) pour Hardware Description Language) matériel. Cette description est convertie en un schéma électronique (Netlist) par un procédé appelé «synthèse». Les composants de la Netlist sont ensuite placés dans la matrice du FPGA (placement) puis connectés ensemble (Routage) pour former le composant décrit au début.
Toutes ces informations sont ensuite décrites dans un fichier de configuration appelé bitstream (propriétaire). Et enfin, le fichier est transféré au FPGA pour le configurer.
À l'origine, toutes ces opérations sont réalisées par des logiciels privateurs, et les formats sont verrouillés. Quand on parle de libération des FPGA on aimerait bien sûr que toute la chaîne puisse être réalisée avec des logiciels libres et des formats ouverts. Mais le point le plus bloquant évoqué est souvent le format du bitstream, qui est LE maillon le plus critique de la chaîne jalousement gardé secret par ([presque](
https://linuxfr.org/news/eos-s3-le-bitstream-libere)) tous.
Toutes ces étapes ont désormais des projets open source qui sont suffisamment avancés pour pouvoir développer sur FPGA librement. À condition de bien choisir le modèle.
Chargement du bitstream ou « configuration »
==========================================
On en oublie souvent la dernière étape consistant à télécharger le bitstream dans le FPGA. Pourtant cette étape est également dépendante du constructeur qui propose l’adaptateur à vil prix (souvent une sonde USB-[JTAG](
https://fr.wikipedia.org/wiki/Joint_Test_Action_Group)). Et le logiciel est en général intégré au lourd IDE du constructeur (binaire x86) qu'il n'est pas toujours facile de configurer sur sa distribution Linux et encore moins sur une architecture exotique (raspberryPi, Risc-V, ...).
Le dessein d'**openFPGALoader** est donc d’être « l’anneau pour les programmer tous ». Pour cela il faut :
- prendre en charge les différentes sondes de programmation du marché. La documentation indique [les 14 (familles de) sondes](
https://trabucayre.github.io/openFPGALoader/compatibility/cable.html) qui le sont déjà.
- gérer le plus de FPGA possible. Même si tous ne sont pas pris en charge, [la liste des 22 FPGA compatibles (un total de 61 modèles différents)](
https://trabucayre.github.io/openFPGALoader/compatibility/fpga.html) est déjà impressionnante. Le logiciel semble même être devenu une référence open source pour des FPGA qui ne sont pas encore sortis. On pensera par exemple au [GateMate](
https://colognechip.com/programmable-logic/gatemate/) de CologneChip qui n’est pas encore sorti mais pour lequel [l’entreprise a contribué pour la prise en charge de son composant](
https://github.com/trabucayre/openFPGALoader/pull/148).
- gérer également les différentes [cartes électroniques intégrant les FPGA](
https://trabucayre.github.io/openFPGALoader/compatibility/board.html) ainsi que les différents modes de configuration (RAM de configuration, EEPROM maître/esclave, Flash, EEPROM interne…).
Avec cette version 0.6.0, le logiciel peut être considéré comme mature. C’est tellement devenu une référence qu’il est même intégré dans quelques distributions Linux, dans [buildroot](
https://git.buildroot.net/buildroot/tree/package/openfpgaloader). Le logiciel fonctionne également sur Mac et Windows avec cependant plus de problème du fait du passage par le pilote usb [zadig](
https://zadig.akeo.ie/).
C'est aujourd'hui un automatisme pour configurer un FPGA, de le tester d'abord avec openFPGALoader. Avant même d'utiliser l’outil constructeur. Le logiciel apporte un confort d'utilisation et de configuration qui n'a rien à envier aux autres.
Quelques exemples
=================
Pour illustrer, un peu l'utilisation d'openFPGALoader, supposons que nous ayons notre bitstream permettant de [faire clignoter la led de la carte Tang Nano 4K](
http://www.fabienm.eu/flf/reception-du-kit-tang-nano-4k/). L'avantage de cette carte est que l'adaptateur de programmation est inclus et que tout passe par le même port USB.
Une fois la carte branchée on peut commencer par détecter le FPGA avec `--detect` :
$ openFPGALoader --detect
write to ram
Jtag frequency : requested 6.00MHz -> real 6.00MHz
index 0:
idcode 0x100981b
manufacturer Gowin
family GW1NSR
model GW1NSR-4C
irlength 8
Le format de bitstream pour les gowin possède l'extension `fs`, on peut le configurer directement en donnant simplement le nom du fichier en argument :
$ openFPGALoader led_test/project/impl/pnr/led_test.fs
write to ram
Jtag frequency : requested 6.00MHz -> real 6.00MHz
Parse file Parse led_test/project/impl/pnr/led_test.fs:
Done
DONE
Jtag frequency : requested 2.50MHz -> real 2.00MHz
erase SRAM Done
Flash SRAM: [==================================================] 100.00%
Done
SRAM Flash: Success
Et si le bitstream nous satisfait on l’écrira dans la mémoire « flash » avec l’option `-f` pour qu’il se reconfigure à chaque allumage.
$ openFPGALoader ide/gbhdmi/impl/pnr/gbhdmi.fs -f
write to flash
Jtag frequency : requested 6.00MHz -> real 6.00MHz
Parse file Parse ide/gbhdmi/impl/pnr/gbhdmi.fs:
Done
DONE
Jtag frequency : requested 2.50MHz -> real 2.00MHz
erase SRAM Done
erase Flash Done
write Flash: [==================================================] 100.00%
Done
CRC check: Success
Les fichiers de configuration à télécharger dans le FPGA peuvent être assez volumineux pour certain gros FPGA. Les sondes de configuration n'étant pas toujours très rapide, il est intéressant de pouvoir envoyer le bitstream compressé.
Cette option est bien sûr supporté par openFPGALoader.
Plutôt que de prendre le nom du fichier bitstream en argument, il est également possible de [récupérer un «flux»](
https://trabucayre.github.io/openFPGALoader/guide/advanced.html) sur l'entrée standard:
cat /path/to/bitstream.ext | openFPGALoader --file-type ext [options]
Méthode très pratique si l'on souhaite configurer son FPGA via le réseau par exemple:
# Carte connectée au FPGA
nc -lp port | openFPGALoader --file-type xxx [option
# Ordinateur distant
nc -q 0 host port < /path/to/bitstream.ext
Et si vous trouvez que cette dépêche manque (scandaleusement) de [TapTempo](
https://linuxfr.org/wiki/taptempo), sachez qu'openFPGALoader fonctionne très bien sur le FPGA ECP5 présent sur [la carte colorlight](
https://connect.ed-diamond.com/Hackable/hk-035/une-carte-pilote-de-led-rgb-hackee-en-kit-de-developpement-fpga-a-bas-cout) pour y configurer le bitstream [TapTempo en VHDL](
https://linuxfr.org/news/portage-de-taptempo-en-vhdl#toc-en-avant-la-musique-avec-openfpgaloader) :
$ openFPGALoader taptempo.bit
Open file taptempo.bit DONE
Parse file DONE
Enable configuration: DONE
SRAM erase: DONE
Loading: [==================================================] 100.000000%
Done
Disable configuration: DONE
Pour conclure
=============
À l’heure où cette dépêche est mise sous presse, openFPGALoader a sorti une [version mineure 0.6.1](
https://github.com/trabucayre/openFPGALoader/releases/tag/v0.6.1) (principalement pour réduire le nombre d’« assets » dans l’archive.
openFPGALoader est maintenant bien installé dans la constellation des logiciels libres pour développer sur FPGA. Même s’il n’a pas encore atteint la version 1.0, il est désormais tout à fait mature pour une utilisation en « production ». Il méritait bien une dépêche sur LinuxFR.