{"id":2519,"date":"2026-02-10T09:08:54","date_gmt":"2026-02-10T08:08:54","guid":{"rendered":"https:\/\/www.fabienm.eu\/flf\/?p=2519"},"modified":"2026-02-10T09:10:22","modified_gmt":"2026-02-10T08:10:22","slug":"de-la-synthese-et-du-test-fpga-grace-au-fediverse","status":"publish","type":"post","link":"http:\/\/www.fabienm.eu\/flf\/de-la-synthese-et-du-test-fpga-grace-au-fediverse\/","title":{"rendered":"De la synth\u00e8se et du test FPGA grace au fediverse"},"content":{"rendered":"\n<p><a href=\"https:\/\/linuxfr.org\/users\/martoni\/journaux\/de-la-synthese-et-du-test-fpga-grace-au-fediverse\">[publi\u00e9 en premier sur Linuxfr]<\/a><\/p>\n\n\n\n<p>Je pratique pas mal la conception sur ces dr\u00f4les de b\u00eates que l&rsquo;on appelle des <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Circuit_logique_programmable\">FPGA<\/a>. Les deux langages principaux pour d\u00e9crire un composant FPGA sont le <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Verilog\">Verilog<\/a> et le <a href=\"https:\/\/fr.wikipedia.org\/wiki\/VHDL\">VHDL<\/a>.<\/p>\n\n\n\n<p>Pour d\u00e9velopper son composant il est pr\u00e9f\u00e9rable de le simuler pour ensuite le synth\u00e9tiser pour une cible et enfin le configurer et le tester \u00absur table\u00bb.<\/p>\n\n\n\n<p>S&rsquo;il est aujourd&rsquo;hui courant de simuler ses composants avec des logiciels libres comme <a href=\"http:\/\/ghdl.free.fr\/\">GHDL<\/a>, <a href=\"https:\/\/steveicarus.github.io\/iverilog\/\">Icarus<\/a>, <a href=\"https:\/\/github.com\/nickg\/nvc\">NVC<\/a> ou <a href=\"https:\/\/verilator.org\/guide\/latest\/\">Verilator<\/a>. Il est d\u00e9j\u00e0 plus compliqu\u00e9 de trouver des cibles compatibles avec les rares logiciels libre de synth\u00e8se comme <a href=\"https:\/\/github.com\/YosysHQ\/yosys\">Yosys<\/a> ou <a href=\"https:\/\/docs.verilogtorouting.org\/en\/latest\/abc\/\">abc<\/a>.<\/p>\n\n\n\n<p>Et ne parlons m\u00eame pas des logiciels libre de placement routages comme <a href=\"https:\/\/github.com\/YosysHQ\/nextpnr\">nextpnr<\/a>, <a href=\"https:\/\/docs.verilogtorouting.org\/en\/latest\/vpr\/\">vpr<\/a> ou <a href=\"https:\/\/github.com\/YosysHQ\/arachne-pnr\">arachne-pnr (abandonn\u00e9)<\/a>.<\/p>\n\n\n\n<p>Mais une fois que l&rsquo;on a trouv\u00e9 une cha\u00eene compl\u00e8tement libre pour son d\u00e9veloppement, il n&rsquo;en reste pas moins qu&rsquo;il faudra quand m\u00eame acqu\u00e9rir une carte de d\u00e9veloppement pour faire ses tests r\u00e9els.<\/p>\n\n\n\n<p>On n&rsquo;est pas \u00e0 l&rsquo;age du <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Cloud_computing\">Claude<\/a> ici, on fait pas \u00e7a sur un serveur install\u00e9 on ne sais o\u00f9 et qui pompe toute l&rsquo;eau et l\u2019\u00e9lectricit\u00e9 des villes d&rsquo;\u00e0 cot\u00e9\u2026<\/p>\n\n\n\n<p>Et bien si&nbsp;! <a href=\"https:\/\/github.com\/JnCrMx\">JCM<\/a> sur le net (<a href=\"https:\/\/wafrn.jcm.re\/blog\/jcm\">un allemand&nbsp;?<\/a> bon le nom de domaine est \u00e0 la R\u00e9union, allez savoir \u2026) s&rsquo;est amus\u00e9 \u00e0 brancher une carte de d\u00e9veloppement <a href=\"https:\/\/www.crowdsupply.com\/icy-electronics\/icepi-zero\/\">Icepi Zero<\/a> sur un ordinateur avec sa sortie vid\u00e9o (HDMI). Sur cet ordinateur tourne un service de synth\u00e8se\/placementroutage\/configuration\/ex\u00e9cution du composant en VHDL\/Verilog\/Amaranth que vous lui envoyez et enregistre 30 secondes d&rsquo;ex\u00e9cution de la vid\u00e9o qui sort sur le <a href=\"https:\/\/fr.wikipedia.org\/wiki\/High-Definition_Multimedia_Interface\">HDMI<\/a>.<\/p>\n\n\n\n<p>Il suffit pour cela de lui demander gentiment par <a href=\"https:\/\/wafrn.jcm.re\/blog\/icepi-zero-bot\">message mastodon priv\u00e9<\/a>. Il synth\u00e9tisera le design, postera la vid\u00e9o et les r\u00e9sultats de synth\u00e8se\/P&amp;R (nombre de cellules utilis\u00e9s, vitesse max de l&rsquo;horloge, \u2026) sur son compte mastodon.<\/p>\n\n\n\n<p>Le probl\u00e8me c&rsquo;est que les instances mastodon limitent la taille des pouets. Alors il est bien s\u00fbr possible de copier coller chaque partie du code (par blocs de 666 caract\u00e8res dans le cas de piaille.fr) mais c&rsquo;est fastidieux et sujet \u00e0 par mal d&rsquo;erreur.<\/p>\n\n\n\n<p>C&rsquo;est pourquoi, mon cher journal, je te propose un petit script python qui se sert du fantastique client en console <a href=\"https:\/\/github.com\/ihabunek\/toot\">toot<\/a> pour envoyer directement le fichier hdl que tu donneras en param\u00e8tre. Tu n&rsquo;auras plus qu&rsquo;\u00e0 attendre quelques minutes pour voir appara\u00eetre la vid\u00e9o en gif sur ta timeline mastodon.<\/p>\n\n\n\n<p>Le script se nomme <code>masto_synth.py<\/code> et se contente du nom du fichier \u00e0 envoyer comme param\u00e8tre obligatoire.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ python masto_synth.py -h\nusage: masto_synth &#91;-h] &#91;-M MAX_CHAR] filename\n\nSend an HDL file to @icepi-zero-bot@wafrn.jcm.re via mastodon\n\npositional arguments:\n  filename              HDL filename\n\noptions:\n  -h, --help            show this help message and exit\n  -M MAX_CHAR, --max_char MAX_CHAR\n                        Mastodon toot maximum chars size\n\nneed toot for mastodon posting<\/code><\/pre>\n\n\n\n<p>Bien sur on peut adapter la taille des pouets \u00e0 son instance mastodon, ici c&rsquo;est configur\u00e9 \u00e0 500 par d\u00e9faut.<\/p>\n\n\n\n<p>Il faut avoir configur\u00e9 <code>toot<\/code> au pr\u00e9alable pour \u00eatre logg\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ toot login<\/code><\/pre>\n\n\n\n<p>Un fichier d&rsquo;exemple est donn\u00e9 dans le profil de jcm que l&rsquo;on peu modifier \u00e0 sa guise (voir le fichier <a href=\"https:\/\/gitlab.com\/fmarteau\/icepi-zero-client\/-\/blob\/main\/pif.vhd?ref_type=heads\">pif.vhd<\/a> dans le d\u00e9p\u00f4t du client).<\/p>\n\n\n\n<p>L&rsquo;envoi se fait simplement en ajoutant le chemin du fichier en unique param\u00e8tre :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ python masto_synth.py pif.vhd<\/code><\/pre>\n\n\n\n<p>On attend quelques minutes (~3 minutes pour cet exemple) et \u2026<\/p>\n\n\n\n<p>On r\u00e9cup\u00e8re <a href=\"https:\/\/wafrn.jcm.re\/fediverse\/post\/ca60717c-1b67-4acd-840b-f4a1558c2c1d\">les r\u00e9sultats avec la vid\u00e9o<\/a> du fonctionnement de notre design.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2026\/02\/222a411aec93ac62.png\"><img loading=\"lazy\" decoding=\"async\" width=\"641\" height=\"482\" src=\"https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2026\/02\/222a411aec93ac62.png\" alt=\"\" class=\"wp-image-2522\" srcset=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2026\/02\/222a411aec93ac62.png 641w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2026\/02\/222a411aec93ac62-300x226.png 300w\" sizes=\"auto, (max-width: 641px) 100vw, 641px\" \/><\/a><\/figure>\n\n\n\n<p>La vid\u00e9o est totalement statique dans cet exemple, mais elle ouvre plein de perspectives de nuits blanches \u00e0 jouer avec le kit sans m\u00eame l&rsquo;avoir achet\u00e9 \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[publi\u00e9 en premier sur Linuxfr] Je pratique pas mal la conception sur ces dr\u00f4les de b\u00eates que l&rsquo;on appelle des FPGA. Les deux langages principaux pour d\u00e9crire un composant FPGA sont le Verilog et le VHDL. Pour d\u00e9velopper son composant il est pr\u00e9f\u00e9rable de le simuler pour ensuite le synth\u00e9tiser pour une cible et enfin &hellip; <a href=\"http:\/\/www.fabienm.eu\/flf\/de-la-synthese-et-du-test-fpga-grace-au-fediverse\/\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">De la synth\u00e8se et du test FPGA grace au fediverse<\/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":[20,11],"tags":[284,174,283,30,60],"class_list":["post-2519","post","type-post","status-publish","format-standard","hentry","category-verilog","category-vhdl","tag-cloud","tag-ecp5","tag-icepi-zero","tag-verilog","tag-vhdl"],"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":"[publi\u00e9 en premier sur Linuxfr] Je pratique pas mal la conception sur ces dr\u00f4les de b\u00eates que l&rsquo;on appelle des FPGA. Les deux langages principaux pour d\u00e9crire un composant FPGA sont le Verilog et le VHDL. Pour d\u00e9velopper son composant il est pr\u00e9f\u00e9rable de le simuler pour ensuite le synth\u00e9tiser pour une cible et enfin\u2026","_links":{"self":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/2519","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=2519"}],"version-history":[{"count":3,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/2519\/revisions"}],"predecessor-version":[{"id":2523,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/2519\/revisions\/2523"}],"wp:attachment":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/media?parent=2519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/categories?post=2519"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/tags?post=2519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}