{"id":842,"date":"2019-01-14T18:12:46","date_gmt":"2019-01-14T17:12:46","guid":{"rendered":"http:\/\/www.fabienm.eu\/flf\/?p=842"},"modified":"2019-01-16T14:33:17","modified_gmt":"2019-01-16T13:33:17","slug":"2019-lannee-de-la-liberation-des-fpga","status":"publish","type":"post","link":"http:\/\/www.fabienm.eu\/flf\/2019-lannee-de-la-liberation-des-fpga\/","title":{"rendered":"2019, l&rsquo;ann\u00e9e de la lib\u00e9ration des FPGA ?"},"content":{"rendered":"\n<p>En mati\u00e8re de libert\u00e9 le monde du FPGA est rest\u00e9 dans les ann\u00e9es 90. Une \u00e9poque obscure o\u00f9 l&rsquo;on cachait le mode de fonctionnement des logiciels, o\u00f9 il fallait signer des accords de non divulgation (NDA) avant de pouvoir simplement utiliser un logiciel. Une \u00e9poque o\u00f9 l&rsquo;on croyait encore que la <a href=\"https:\/\/fr.wikipedia.org\/wiki\/S%C3%A9curit%C3%A9_par_l%27obscurit%C3%A9\">s\u00e9curit\u00e9 par l&rsquo;obfuscation<\/a> \u00e9tait le summum de l&rsquo;\u00e9tat de l&rsquo;art pour s\u00e9curiser et prot\u00e9ger son logiciel et ses donn\u00e9es. Mais il est possible que les nouvelles de sorties de nouveaux logiciels libre de fin d&rsquo;ann\u00e9e 2018 changent la donne.<\/p>\n\n\n\n<p>Un FPGA est litt\u00e9ralement un champs de portes programmable. Le paysan-d\u00e9veloppeur ensemence son champs avec un fichier nomm\u00e9 \u00abbitstream\u00bb. Ce bitstream permet de configurer les liens entre les diff\u00e9rentes portes logiques du FPGA et constituer ainsi un circuit \u00e9lectronique (num\u00e9rique).<\/p>\n\n\n\n<p>C&rsquo;est ce fichier qui n&rsquo;est document\u00e9 par <strong>aucun<\/strong> fabricant de FPGA. <\/p>\n\n\n\n<p>Jusqu&rsquo;\u00e0 tr\u00e8s r\u00e9cemment pour ses semailles, le d\u00e9veloppeur devait passer par le logiciel fourni par le fabricant pour g\u00e9n\u00e9rer son bitstream. \u00c0 chaque mod\u00e8le un logiciel sp\u00e9cifique, avec tous les d\u00e9fauts inh\u00e9rent aux logiciels ferm\u00e9s :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Oblig\u00e9 d&rsquo;utiliser un ordinateur et un syst\u00e8me d&rsquo;exploitation support\u00e9 officiellement par le fabricant (impossible de g\u00e9n\u00e9rer le bitstream sur un syst\u00e8me embarqu\u00e9 ARM par exemple).<\/li><li>Grande difficult\u00e9 \u00e0 g\u00e9rer les bugs du logiciels (et les bugs c&rsquo;est vraiment pas \u00e7a qui manque)<\/li><li>Support al\u00e9atoire<\/li><li>Oblig\u00e9 de payer une licence pour les \u00abgros\u00bb FPGA<\/li><li>Licence Gratuite pour les petits FPGA mais un syst\u00e8me de gestion de ladite licence  obligeant \u00e0 \u00eatre fliqu\u00e9 par le fabricant (serveur de gestion de licence, obligation d&rsquo;identification, collectes de donn\u00e9es personnelles, &#8230;) .<\/li><\/ul>\n\n\n\n<p>L&rsquo;argument principale des fabricants est qu&rsquo;ils risquent de perdre toutes cr\u00e9dibilit\u00e9s en mati\u00e8re de s\u00e9curit\u00e9 aupr\u00e8s des clients militaires. Et qu&rsquo;ils risquent d&rsquo;\u00eatre plus facilement copi\u00e9 par les chinois (M\u00eame s&rsquo;ils y a d\u00e9j\u00e0 <a href=\"http:\/\/www.fabienm.eu\/flf\/fpga-chinois\/\">des copies fabriqu\u00e9es en chine<\/a>). Il a pourtant \u00e9t\u00e9 d\u00e9montr\u00e9 depuis longtemps qu&rsquo;il est tout \u00e0 fait possible de faire le reverse-engineering des bitstream. C&rsquo;est notamment ce qu&rsquo;avait fait en 2008 J<a href=\"http:\/\/citeseerx.ist.psu.edu\/viewdoc\/download?doi=10.1.1.117.6043&amp;rep=rep1&amp;type=pdf\">ean-Baptiste Note et \u00c9ric Rannaud<\/a> avec <a href=\"https:\/\/github.com\/Martoni\/debit\">debit<\/a> pour les FPGA de Xilinx. Mais c&rsquo;est surtout ce qu&rsquo;a fait Wolf Clifford en <a href=\"https:\/\/connect.ed-diamond.com\/Open-Silicium\/OS-017\/Icestorm-une-chaine-de-developpement-libre-pour-FPGA\">2015<\/a> avec <a href=\"http:\/\/www.clifford.at\/icestorm\/\">Icestorm<\/a> pour servir notamment \u00e0 son logiciel de synth\u00e8se <a href=\"http:\/\/www.clifford.at\/yosys\/\">Yosys<\/a> en utilisant une plate-forme r\u00e9el : les <a href=\"https:\/\/www.latticesemi.com\/Products\/FPGAandCPLD\/iCE40.aspx\">ice40<\/a> de Lattice.<\/p>\n\n\n\n<p>Ce \u00abd\u00e9verrouillage\u00bb des ice40 a permis une v\u00e9ritable r\u00e9volution dans le domaine du FPGA chez les bidouilleurs. Beaucoup de cartes \u00e9lectroniques utilisant un ice40 on vu le jours, et le projet \u00e0 f\u00e9d\u00e9r\u00e9 tout un tas de nouveau projet de logiciels libre.<\/p>\n\n\n\n<p>\u00c0 l&rsquo;origine, icestorm permettait de faire la synth\u00e8se avec yosys (transformer du verilog en netlist), le placement routage avec arachne-pnr (placer les diff\u00e9rentes portes dans le FPGA et les relier entre elles) ainsi que la g\u00e9n\u00e9ration du bitstream avec icestorm (icepack).<\/p>\n\n\n\n<p>Un fois le bitstream g\u00e9n\u00e9r\u00e9 il est n\u00e9cessaire de v\u00e9rifier que les temps de propagation entre les diff\u00e9rentes portes soient inf\u00e9rieur au cycle d&rsquo;horloge. Il est donc n\u00e9cessaire de poss\u00e9der la sp\u00e9cification des temps de propagation  entre les portes dans le FGPA. Chose qui a \u00e9galement \u00e9t\u00e9 faite dans le projet Icestorm (<a href=\"https:\/\/youtu.be\/IG5CpFJRnOk\">icetime<\/a>). <\/p>\n\n\n\n<p>Le probl\u00e8me qui persistait avec cette cha\u00eene de d\u00e9veloppement \u00e9tait <a href=\"https:\/\/github.com\/YosysHQ\/arachne-pnr\/commits\/master\">arachne-pnr<\/a> qui ne prenait pas en compte les timings du FPGA pour faire son placement routage. C&rsquo;est ce verrou qui vient de sauter fin 2018 avec <a href=\"https:\/\/www.youtube.com\/watch?v=Zi9gaSPFqM0\">la sortie du nouveau logiciel <\/a>de placement routage <a href=\"https:\/\/github.com\/YosysHQ\/nextpnr\">nextpnr<\/a> initi\u00e9 par Clifford mais f\u00e9d\u00e9rant une communaut\u00e9 de d\u00e9veloppeurs de plus en plus grosse.<\/p>\n\n\n\n<p>En plus de faire du placement routage en fonction des temps de propagations, nextpnr poss\u00e8de une interface graphique permettant une visualisation du FPGA une fois le projet rout\u00e9.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2019\/01\/68747470733a2f2f692e696d6775722e636f6d2f3073706d6c42612e706e67-1024x825.png\" alt=\"Vue de l'interface graphique de nextpnr\" class=\"wp-image-851\" width=\"512\" height=\"413\" srcset=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2019\/01\/68747470733a2f2f692e696d6775722e636f6d2f3073706d6c42612e706e67.png 1024w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2019\/01\/68747470733a2f2f692e696d6775722e636f6d2f3073706d6c42612e706e67-300x242.png 300w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2019\/01\/68747470733a2f2f692e696d6775722e636f6d2f3073706d6c42612e706e67-768x619.png 768w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><figcaption>Vu de l&rsquo;interface graphique de nextpnr (source github officiel)<\/figcaption><\/figure>\n\n\n\n<p>Tous ces outils sont d\u00e9sormais regroup\u00e9s dans un projet opensource ayant pour objectif de r\u00e9aliser un IDE complet pour les FPGA et nomm\u00e9 <a href=\"https:\/\/symbiflow.github.io\/\">SymbiFlow<\/a>.<\/p>\n\n\n\n<p>Le projet SymbiFlow a pour objectif de devenir le <a href=\"https:\/\/www.youtube.com\/watch?v=5RryRQ1Rr0M\">\u00abGCC du FPGA et des ASIC\u00bb. <\/a>En plus de icestorm, SymbiFlow int\u00e8gre d&rsquo;autres projets de \u00abreverse-bitstream\u00bb, notamment:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/cliffordwolf\/icestorm\">icestorm<\/a>: d\u00e9j\u00e0 longuement d\u00e9crit dans cet article, permet de faire un d\u00e9veloppement complet avec des outils opensource.<\/li><li><a href=\"https:\/\/github.com\/SymbiFlow\/prjxray\">X-Ray<\/a>: Projet de r\u00e9tro-ing\u00e9nierie des FPGA de la s\u00e9rie 7 de xilinx. Les \u00abtuiles standard\u00bb de ces FPGA sont d\u00e9j\u00e0 bien document\u00e9 et il est possible de g\u00e9n\u00e9rer un bitstream pour des Artix 7.<\/li><li><a href=\"https:\/\/github.com\/SymbiFlow\/prjtrellis\">Trellis<\/a>: Projet de r\u00e9tro-ing\u00e9nierie des FPGA <a href=\"https:\/\/www.latticesemi.com\/Products\/FPGAandCPLD\/ECP5.aspx\">ECP5<\/a> de Lattice. Toute la matrice a \u00e9t\u00e9 document\u00e9, et il est d\u00e9sormais possible de faire un projet pour ECP5 de bout en bout avec des outils open-source.<\/li><li><a href=\"https:\/\/github.com\/JohnDMcMaster\/project2064\">2064<\/a>: Projet de r\u00e9tro-ing\u00e9nierie des FPGA XC2064 de xilinx. Bon ce projet peut \u00eatre consid\u00e9r\u00e9 comme annecdotique puisque il vise \u00e0 reverser le premier fpga de Xilinx du d\u00e9but des ann\u00e9es 80 : le <a href=\"https:\/\/spectrum.ieee.org\/tech-history\/silicon-revolution\/chip-hall-of-fame-xilinx-xc2064-fpga\">xc2064<\/a>.<\/li><\/ul>\n\n\n\n<p>Le projet SymbiFlow est un projet encore \u00aben travaux\u00bb mais il permet de tracer une voie et fournir des outils permettant de faire la retro-ing\u00e9nierie d&rsquo;autres FPGA. Comme on le voit dans les diff\u00e9rents projets int\u00e9gr\u00e9s il est possible de voir fleurir d&rsquo;autre projets de retro-ing\u00e9nierie de FPGA et voir \u00e9merger une solution opensource solide pour d\u00e9velopper sur FPGA.<\/p>\n\n\n\n<p>L&rsquo;ann\u00e9e 2018 s&rsquo;est termin\u00e9e en fanfare avec la pr\u00e9sentation de <a href=\"https:\/\/www.youtube.com\/watch?v=Zi9gaSPFqM0\">nextpnr au 35c3<\/a>. L&rsquo;ann\u00e9e 2019 sera-t-elle celle de la lib\u00e9ration des FPGA avec une f\u00e9d\u00e9ration des projets de r\u00e9tro-ing\u00e9nierie de tous les FPGA du March\u00e9 ? Un fabricant de FPGA osera-t-il publier la documentation des ses bitstream pour ses FPGA ? Vera-t-on l\u2019\u00e9mergence de nouveaux acteur du FPGA faisant du libre ?<\/p>\n\n\n\n<p>Vous saurez tous cela en suivant le prochain \u00e9pisode de l&rsquo;ann\u00e9e 2019 !<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En mati\u00e8re de libert\u00e9 le monde du FPGA est rest\u00e9 dans les ann\u00e9es 90. Une \u00e9poque obscure o\u00f9 l&rsquo;on cachait le mode de fonctionnement des logiciels, o\u00f9 il fallait signer des accords de non divulgation (NDA) avant de pouvoir simplement utiliser un logiciel. Une \u00e9poque o\u00f9 l&rsquo;on croyait encore que la s\u00e9curit\u00e9 par l&rsquo;obfuscation \u00e9tait &hellip; <a href=\"http:\/\/www.fabienm.eu\/flf\/2019-lannee-de-la-liberation-des-fpga\/\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">2019, l&rsquo;ann\u00e9e de la lib\u00e9ration des FPGA ?<\/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":[1],"tags":[],"class_list":["post-842","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"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":"En mati\u00e8re de libert\u00e9 le monde du FPGA est rest\u00e9 dans les ann\u00e9es 90. Une \u00e9poque obscure o\u00f9 l&rsquo;on cachait le mode de fonctionnement des logiciels, o\u00f9 il fallait signer des accords de non divulgation (NDA) avant de pouvoir simplement utiliser un logiciel. Une \u00e9poque o\u00f9 l&rsquo;on croyait encore que la s\u00e9curit\u00e9 par l&rsquo;obfuscation \u00e9tait\u2026","_links":{"self":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/842","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=842"}],"version-history":[{"count":16,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/842\/revisions"}],"predecessor-version":[{"id":865,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/842\/revisions\/865"}],"wp:attachment":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/media?parent=842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/categories?post=842"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/tags?post=842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}