{"id":1898,"date":"2021-12-22T06:52:51","date_gmt":"2021-12-22T05:52:51","guid":{"rendered":"http:\/\/www.fabienm.eu\/flf\/?p=1898"},"modified":"2021-12-22T06:52:52","modified_gmt":"2021-12-22T05:52:52","slug":"sortie-de-la-version-0-6-0-du-configurateur-de-fpga-openfpgaloader","status":"publish","type":"post","link":"http:\/\/www.fabienm.eu\/flf\/sortie-de-la-version-0-6-0-du-configurateur-de-fpga-openfpgaloader\/","title":{"rendered":"Sortie de la version 0.6.0 du configurateur de FPGA openFPGALoader"},"content":{"rendered":"\n<p><a href=\"https:\/\/linuxfr.org\/news\/sortie-de-la-version-0-6-0-du-configurateur-de-fpga-openfpgaloader\">[D\u00e9p\u00eache parue initialement sur <strong>LinuxFR<\/strong>]<\/a><\/p>\n\n\n\n<p>openFPGALoader est un utilitaire en ligne de commande, \u00e9crit en C++ et sous licence Apache 2.0. Il permet de configurer des FPGA de toutes marques. L\u2019objectif du projet est de pouvoir prendre en charge tous les FPGA du march\u00e9 ainsi que tous les adaptateurs et sondes de configuration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sommaire<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/linuxfr.org\/news\/sortie-de-la-version-0-6-0-du-configurateur-de-fpga-openfpgaloader#toc-la-cha%C3%AEne-de-d%C3%A9veloppement-sur-fpga\">La cha\u00eene de d\u00e9veloppement sur FPGA<\/a><\/li><li><a href=\"https:\/\/linuxfr.org\/news\/sortie-de-la-version-0-6-0-du-configurateur-de-fpga-openfpgaloader#toc-chargement-du-bitstream-ou-configuration\">Chargement du bitstream ou \u00ab\u202fconfiguration\u202f\u00bb<\/a><\/li><li><a href=\"https:\/\/linuxfr.org\/news\/sortie-de-la-version-0-6-0-du-configurateur-de-fpga-openfpgaloader#toc-quelques-exemples\">Quelques exemples<\/a><\/li><li><a href=\"https:\/\/linuxfr.org\/news\/sortie-de-la-version-0-6-0-du-configurateur-de-fpga-openfpgaloader#toc-pour-conclure\">Pour conclure<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc-la-cha\u00eene-de-d\u00e9veloppement-sur-fpga\">La cha\u00eene de d\u00e9veloppement sur FPGA<\/h2>\n\n\n\n<p>Pour d\u00e9velopper sur un FPGA, nous avons besoin d&rsquo;un ensemble de logiciels et de formats sp\u00e9cifiques. La cha\u00eene de d\u00e9veloppement sur FPGA peut se r\u00e9sumer par la figure ci-dessous:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/img.linuxfr.org\/img\/687474703a2f2f7777772e66616269656e6d2e65752f706172746167652f6c696e757866722f436861696e655f667067612e706e67\/Chaine_fpga.png\" alt=\"Cha\u00eene de d\u00e9veloppement FPGA\" title=\"Source : http:\/\/www.fabienm.eu\/partage\/linuxfr\/Chaine_fpga.png\"\/><\/figure>\n\n\n\n<p>L&rsquo;architecture du composant est d\u00e9crite dans un langage de description (<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Langage_de_description_de_mat%C3%A9riel\">HDL<\/a> pour Hardware Description Language) mat\u00e9riel. Cette description est convertie en un sch\u00e9ma \u00e9lectronique (Netlist) par un proc\u00e9d\u00e9 appel\u00e9 \u00absynth\u00e8se\u00bb. Les composants de la Netlist sont ensuite plac\u00e9s dans la matrice du FPGA (placement) puis connect\u00e9s ensemble (Routage) pour former le composant d\u00e9crit au d\u00e9but.<br>Toutes ces informations sont ensuite d\u00e9crites dans un fichier de configuration appel\u00e9 bitstream (propri\u00e9taire). Et enfin, le fichier est transf\u00e9r\u00e9 au FPGA pour le configurer.<\/p>\n\n\n\n<p>\u00c0 l&rsquo;origine, toutes ces op\u00e9rations sont r\u00e9alis\u00e9es par des logiciels privateurs, et les formats sont verrouill\u00e9s. Quand on parle de lib\u00e9ration des FPGA on aimerait bien s\u00fbr que toute la cha\u00eene puisse \u00eatre r\u00e9alis\u00e9e avec des logiciels libres et des formats ouverts. Mais le point le plus bloquant \u00e9voqu\u00e9 est souvent le format du bitstream, qui est LE maillon le plus critique de la cha\u00eene jalousement gard\u00e9 secret par (<a href=\"https:\/\/linuxfr.org\/news\/eos-s3-le-bitstream-libere\">presque<\/a>) tous.<\/p>\n\n\n\n<p>Toutes ces \u00e9tapes ont d\u00e9sormais des projets open source qui sont suffisamment avanc\u00e9s pour pouvoir d\u00e9velopper sur FPGA librement. \u00c0 condition de bien choisir le mod\u00e8le.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc-chargement-du-bitstream-ou-configuration\">Chargement du bitstream ou \u00ab\u202fconfiguration\u202f\u00bb<\/h2>\n\n\n\n<p>On en oublie souvent la derni\u00e8re \u00e9tape consistant \u00e0 t\u00e9l\u00e9charger le bitstream dans le FPGA. Pourtant cette \u00e9tape est \u00e9galement d\u00e9pendante du constructeur qui propose l\u2019adaptateur \u00e0 vil prix (souvent une sonde USB-<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Joint_Test_Action_Group\">JTAG<\/a>). Et le logiciel est en g\u00e9n\u00e9ral int\u00e9gr\u00e9 au lourd IDE du constructeur (binaire x86) qu&rsquo;il n&rsquo;est pas toujours facile de configurer sur sa distribution Linux et encore moins sur une architecture exotique (raspberryPi, Risc-V, \u2026).<\/p>\n\n\n\n<p>Le dessein d&rsquo;<strong>openFPGALoader<\/strong> est donc d\u2019\u00eatre \u00ab\u202fl\u2019anneau pour les programmer tous\u202f\u00bb. Pour cela il faut\u202f:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>prendre en charge les diff\u00e9rentes sondes de programmation du march\u00e9. La documentation indique <a href=\"https:\/\/trabucayre.github.io\/openFPGALoader\/compatibility\/cable.html\">les 14 (familles de) sondes<\/a> qui le sont d\u00e9j\u00e0.<\/li><li>g\u00e9rer le plus de FPGA possible. M\u00eame si tous ne sont pas pris en charge, <a href=\"https:\/\/trabucayre.github.io\/openFPGALoader\/compatibility\/fpga.html\">la liste des 22&nbsp;FPGA compatibles (un total de 61 mod\u00e8les diff\u00e9rents)<\/a> est d\u00e9j\u00e0 impressionnante. Le logiciel semble m\u00eame \u00eatre devenu une r\u00e9f\u00e9rence open source pour des FPGA&nbsp;qui ne sont pas encore sortis. On pensera par exemple au <a href=\"https:\/\/colognechip.com\/programmable-logic\/gatemate\/\">GateMate<\/a> de CologneChip qui n\u2019est pas encore sorti mais pour lequel <a href=\"https:\/\/github.com\/trabucayre\/openFPGALoader\/pull\/148\">l\u2019entreprise a contribu\u00e9 pour la prise en charge de son composant<\/a>.<\/li><li>g\u00e9rer \u00e9galement les diff\u00e9rentes <a href=\"https:\/\/trabucayre.github.io\/openFPGALoader\/compatibility\/board.html\">cartes \u00e9lectroniques int\u00e9grant les FPGA<\/a> ainsi que les diff\u00e9rents modes de configuration (RAM de configuration, EEPROM ma\u00eetre\/esclave, Flash, EEPROM interne\u2026).<\/li><\/ul>\n\n\n\n<p>Avec cette version 0.6.0, le logiciel peut \u00eatre consid\u00e9r\u00e9 comme mature. C\u2019est tellement devenu une r\u00e9f\u00e9rence qu\u2019il est m\u00eame int\u00e9gr\u00e9 dans quelques distributions Linux, dans <a href=\"https:\/\/git.buildroot.net\/buildroot\/tree\/package\/openfpgaloader\">buildroot<\/a>. Le logiciel fonctionne \u00e9galement sur Mac et Windows avec cependant plus de probl\u00e8me du fait du passage par le pilote usb <a href=\"https:\/\/zadig.akeo.ie\/\">zadig<\/a>.<\/p>\n\n\n\n<p>C&rsquo;est aujourd&rsquo;hui un automatisme pour configurer un FPGA,&nbsp;de le tester d&rsquo;abord avec openFPGALoader. Avant m\u00eame d&rsquo;utiliser l\u2019outil constructeur. Le logiciel apporte un confort d&rsquo;utilisation et de configuration qui n&rsquo;a rien \u00e0 envier aux autres.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc-quelques-exemples\">Quelques exemples<\/h2>\n\n\n\n<p>Pour illustrer, un peu l&rsquo;utilisation d&rsquo;openFPGALoader, supposons que nous ayons notre bitstream permettant de <a href=\"http:\/\/www.fabienm.eu\/flf\/reception-du-kit-tang-nano-4k\/\">faire clignoter la led de la carte Tang Nano 4K<\/a>. L&rsquo;avantage de cette carte est que l&rsquo;adaptateur de programmation est inclus et que tout passe par le m\u00eame port USB.<br>Une fois la carte branch\u00e9e on peut commencer par d\u00e9tecter le FPGA avec <code>--detect<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    $ openFPGALoader --detect\n    write to ram\n    Jtag frequency : requested 6.00MHz   -&gt; real 6.00MHz  \n    index 0:\n        idcode 0x100981b\n        manufacturer Gowin\n        family GW1NSR\n        model  GW1NSR-4C\n        irlength 8\n<\/code><\/pre>\n\n\n\n<p>Le format de bitstream pour les gowin poss\u00e8de l&rsquo;extension <code>fs<\/code>, on peut le configurer directement en donnant simplement le nom du fichier en argument&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    $ openFPGALoader led_test\/project\/impl\/pnr\/led_test.fs\n    write to ram\n    Jtag frequency : requested 6.00MHz   -&gt; real 6.00MHz  \n    Parse file Parse led_test\/project\/impl\/pnr\/led_test.fs: \n    Done\n    DONE\n    Jtag frequency : requested 2.50MHz   -&gt; real 2.00MHz  \n    erase SRAM Done\n    Flash SRAM: &#91;==================================================] 100.00%\n    Done\n    SRAM Flash: Success\n<\/code><\/pre>\n\n\n\n<p>Et si le bitstream nous satisfait on l\u2019\u00e9crira dans la m\u00e9moire \u00ab\u202fflash\u202f\u00bb avec l\u2019option <code>-f<\/code> pour qu\u2019il se reconfigure \u00e0 chaque allumage.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    $ openFPGALoader ide\/gbhdmi\/impl\/pnr\/gbhdmi.fs -f\n    write to flash\n    Jtag frequency : requested 6.00MHz   -&gt; real 6.00MHz  \n    Parse file Parse ide\/gbhdmi\/impl\/pnr\/gbhdmi.fs: \n    Done\n    DONE\n    Jtag frequency : requested 2.50MHz   -&gt; real 2.00MHz  \n    erase SRAM Done\n    erase Flash Done\n    write Flash: &#91;==================================================] 100.00%\n    Done\n    CRC check: Success\n<\/code><\/pre>\n\n\n\n<p>Les fichiers de configuration \u00e0 t\u00e9l\u00e9charger dans le FPGA peuvent \u00eatre assez volumineux pour certain gros FPGA. Les sondes de configuration n&rsquo;\u00e9tant pas toujours tr\u00e8s rapide, il est int\u00e9ressant de pouvoir envoyer le bitstream compress\u00e9.<br>Cette option est bien s\u00fbr support\u00e9 par openFPGALoader.<\/p>\n\n\n\n<p>Plut\u00f4t que de prendre le nom du fichier bitstream en argument, il est \u00e9galement possible de <a href=\"https:\/\/trabucayre.github.io\/openFPGALoader\/guide\/advanced.html\">r\u00e9cup\u00e9rer un \u00abflux\u00bb<\/a> sur l&rsquo;entr\u00e9e standard:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    cat \/path\/to\/bitstream.ext | openFPGALoader --file-type ext &#91;options]\n<\/code><\/pre>\n\n\n\n<p>M\u00e9thode tr\u00e8s pratique si l&rsquo;on souhaite configurer son FPGA via le r\u00e9seau par exemple:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    # Carte connect\u00e9e au FPGA\n    nc -lp port | openFPGALoader --file-type xxx &#91;option\n\n    # Ordinateur distant\n    nc -q 0 host port &lt; \/path\/to\/bitstream.ext\n<\/code><\/pre>\n\n\n\n<p>Et si vous trouvez que cette d\u00e9p\u00eache manque (scandaleusement) de <a href=\"https:\/\/linuxfr.org\/wiki\/taptempo\">TapTempo<\/a>, sachez qu&rsquo;openFPGALoader fonctionne tr\u00e8s bien sur le FPGA ECP5 pr\u00e9sent sur <a href=\"https:\/\/connect.ed-diamond.com\/Hackable\/hk-035\/une-carte-pilote-de-led-rgb-hackee-en-kit-de-developpement-fpga-a-bas-cout\">la carte colorlight<\/a> pour y configurer le bitstream <a href=\"https:\/\/linuxfr.org\/news\/portage-de-taptempo-en-vhdl#toc-en-avant-la-musique-avec-openfpgaloader\">TapTempo en VHDL<\/a> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    $ openFPGALoader taptempo.bit \n    Open file taptempo.bit DONE\n    Parse file DONE\n    Enable configuration: DONE\n    SRAM erase: DONE\n    Loading: &#91;==================================================] 100.000000%\n    Done\n    Disable configuration: DONE\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc-pour-conclure\">Pour conclure<\/h2>\n\n\n\n<p>\u00c0 l\u2019heure o\u00f9 cette d\u00e9p\u00eache est mise sous presse, openFPGALoader a sorti une <a href=\"https:\/\/github.com\/trabucayre\/openFPGALoader\/releases\/tag\/v0.6.1\">version mineure 0.6.1<\/a> (principalement pour r\u00e9duire le nombre d\u2019\u00ab\u202fassets\u202f\u00bb dans l\u2019archive.<\/p>\n\n\n\n<p>openFPGALoader est maintenant bien install\u00e9 dans la constellation des logiciels libres pour d\u00e9velopper sur FPGA. M\u00eame s\u2019il n\u2019a pas encore atteint la version 1.0, il est d\u00e9sormais tout \u00e0 fait mature pour une utilisation en \u00ab\u202fproduction\u202f\u00bb. Il m\u00e9ritait bien une d\u00e9p\u00eache sur LinuxFR.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aller plus loin<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/linuxfr.org\/redirect\/109499\">La version 0.6.0 d&rsquo;openFPGALoader<\/a> (21 clics)<\/li><li><a href=\"https:\/\/linuxfr.org\/redirect\/109500\">Le d\u00e9pot officiel<\/a> (22 clics)<\/li><li><a href=\"https:\/\/linuxfr.org\/redirect\/109501\">La documentation<\/a> (8 clics)<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>[D\u00e9p\u00eache parue initialement sur LinuxFR] openFPGALoader est un utilitaire en ligne de commande, \u00e9crit en C++ et sous licence Apache 2.0. Il permet de configurer des FPGA de toutes marques. L\u2019objectif du projet est de pouvoir prendre en charge tous les FPGA du march\u00e9 ainsi que tous les adaptateurs et sondes de configuration. Sommaire La &hellip; <a href=\"http:\/\/www.fabienm.eu\/flf\/sortie-de-la-version-0-6-0-du-configurateur-de-fpga-openfpgaloader\/\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Sortie de la version 0.6.0 du configurateur de FPGA openFPGALoader<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[15,22,24,9],"tags":[61,209,158],"class_list":["post-1898","post","type-post","status-publish","format-standard","hentry","category-bitstream","category-blog","category-materiel","category-outils","tag-bitstream","tag-configuration","tag-openfpgaloader"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-thumbnail":false},"uagb_author_info":{"display_name":"Fabien Marteau","author_link":"http:\/\/www.fabienm.eu\/flf\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"[D\u00e9p\u00eache parue initialement sur LinuxFR] openFPGALoader est un utilitaire en ligne de commande, \u00e9crit en C++ et sous licence Apache 2.0. Il permet de configurer des FPGA de toutes marques. L\u2019objectif du projet est de pouvoir prendre en charge tous les FPGA du march\u00e9 ainsi que tous les adaptateurs et sondes de configuration. Sommaire La\u2026","_links":{"self":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/1898","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/comments?post=1898"}],"version-history":[{"count":1,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/1898\/revisions"}],"predecessor-version":[{"id":1899,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/1898\/revisions\/1899"}],"wp:attachment":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/media?parent=1898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/categories?post=1898"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/tags?post=1898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}