URL:     https://linuxfr.org/news/la-liberation-des-fpga-et-des-asic-bien-engagee-pour-2020
Title:   La libération des FPGA et des ASIC bien engagée pour 2020
Authors: martoni
        Yves Bourguignon, BAud, Davy Defaud, Pierre Jarillon, gUI, ZeroHeure et Ysabeau
Date:    2019-12-10T11:06:30+01:00
License: CC by-sa
Tags:
Score:   5


En début d’année 2019 se posait la question de savoir si ce serait l’année de la [libération des FPGA](https://linuxfr.org/users/martoni/journaux/2019-l-annee-de-la-liberation-des-fpga). En ce début d’année 2020, essayons de faire un bilan.


FPGA, ASC, HDL, RISC‑Ⅴ et PCB sont les chapitres que nous allons découvrir dans la suite de cet article. Si vous connaissez déjà ces sigles et acronymes, vous allez adorer ; mais si vous ne les connaissez pas, c’est indispensable car ces vocables sont à la base de la culture universelle de notre siècle.

Nous sommes actuellement arrivés à un moment clé pour le matériel informatique. Il en est au même point que le logiciel libre en était en 2000, quand il est devenu mature. Le mouvement est lancé et les projets deviennent utilisables. On ne rêve plus…

----

[Page Wikipédia sur le matériel libre](https://fr.wikipedia.org/wiki/Mat%C3%A9riel_libre)
[LinuxFr.org : k1g1 : un FPGA libre conçu avec des outils libres](https://linuxfr.org/news/k1g1-le-premier-fpga-libre)
[LinuxFr.org : Raven : Le premier microcontrôleur réalisé avec des outils libres](https://linuxfr.org/news/un-asic-concu-integralement-avec-des-logiciels-libres)

----

FPGA
====
À condition de choisir son [FPGA](https://fr.wikipedia.org/wiki/Circuit_logique_programmable#FPGA "Field‐Programmable Gate Array — circuit logique programmable") cible, il est aujourd’hui possible de faire son développement intégralement à base de logiciels libres. Tout cela principalement grâce à Yosys et Nextpnr.


Les grandes avancées de Yosys
-----------------------------
[Yosys](http://www.clifford.at/yosys/) est un logiciel libre de synthèse [[Verilog]]. Il permet de convertir un modèle Verilog en une _netlist_. La _netlist_ est tout simplement un schéma électronique comme on peut en faire avec un logiciel de saisie de schéma. On relie entre eux des connecteurs d’entrées‐sorties de composants pour réaliser un circuit électronique.


Cependant, en général, un logiciel de synthèse cible des [FPGA](https://fr.wikipedia.org/wiki/Circuit_logique_programmable#FPGA "Field‐Programmable Gate Array — circuit logique programmable") ou des [ASIC](https://fr.wikipedia.org/wiki/Application-specific_integrated_circuit "Application‐Specific Integrated Circuit — circuit intégré spécialisé") qui ont leurs propres bibliothèques de composants. Et la _netlist_ générée est au format texte, même si une fonction de Yosys permet d’afficher le « schéma » au moyen de Graphviz.

Yosys augmente le nombre des FPGA officiellement pris en charge avec les FPGA de Gowin. L’ingénierie inverse du Gowin n’est pas encore terminée mais elle est déjà utilisable. C’est tout le travail de Pepijn De Vos avec son [Project Apicula](https://github.com/pepijndevos/apicula).

Plusieurs gammes de FPGA de [Lattice](https://fr.wikipedia.org/wiki/Lattice_Semiconductor) sont désormais prises en charge. En plus du ICE40 initial, les ECP5 sont maintenant parfaitement utilisables et les nouveaux CrossLink (Nexus) sont en cours de « _reverse engineering_ » (rétro‑ingénierie, voir ci‑dessous) avec le [Project Oxide](https://github.com/daveshah1/prjoxide) de David Sha.


Hormis la partie placement routage et _bitstream_, les FPGA de la série 7 de Xilinx sont assez bien gérés par Yosys (mais Yosys ne fait pas le [placement‐routage](https://fr.wikipedia.org/wiki/Placement-routage)). Et Google a fait un petit cadeau à la communauté libre en [annonçant financer](https://medium.com/librecores/el-correo-libre-issue-22-8dcfdcc057f) la prise en charge des (pas si) vieux Spartan3 et Spartan6.


NextPnR, le placement‐routage libre
-----------------------------------
[Nextpnr](https://github.com/YosysHQ/nextpnr) est un logiciel libre permettant de faire le [placement‐routage(https://fr.wikipedia.org/wiki/Placement-routage). Le principe est assez simple, un FPGA disposant d’une matrice de composants gravés sur la puce, il faut décider quel composant de la _netlist_ générée par le logiciel de synthèse ira sur quel composant présent dans le FPGA. Une fois les composants placés, il faut router les entrées‐sorties en réalisant les connexions.

Nextpnr est aujourd’hui parfaitement utilisable pour les FPGA ICE40 et ECP5 de Lattice. Pour les FPGA de Gowin, cela ne saurait tarder à mon avis.


Rétro‑ingénierie
----------------
Pour configurer un FPGA (établir les liens entre les bascules) il faut télécharger un _bitstream_. Le format de ce _bitstream_ n’est documenté par aucun constructeur de FPGA. Nous sommes obligés de passer par les outils (gratuits, en général) fournis par le constructeur pour le générer.
Bien que n’étant pas documenté, le format n’est pas non plus chiffré, il est donc parfaitement possible de l’étudier par ingénierie inverse pour le documenter.
De plus en plus de projets de FPGA par ingénierie inverse de _bitstream_ voient le jour. Votre serviteur tente de maintenir une liste de ces projets sur son [blog](http://www.fabienm.eu/flf/materiel/liberation-des-fpga/) en donnant l’état d’avancement des projets.
On décompte au moins neuf projets plus ou moins avancés de rétro‑ingénierie :

- [icestorm](http://www.clifford.at/icestorm/) : les ICE40 de Lattice ;
- [X-Ray](https://github.com/SymbiFlow/prjxray) : la série 7 de Xilinx : Artix7, Spartan7 et Virtex7 ;
- [prjoxide](https://github.com/daveshah1/prjoxide) : les CrossLink‑NX de Lattice ;
- [rodinia](https://github.com/pablomarx/rodinia) : les CPLD AGM ;
- [mistral](https://github.com/ZirconiumX/mistral) : le Cyclone Ⅴ d’Intel (anciennement Altera) ;
- [Apicula](https://github.com/pepijndevos/apicula) : les GW1N de Gowin ;
- [OpenFpga](https://github.com/azonenberg/openfpga) : un mélange de CPLD de différentes marques GreenPAK4, CoolRunner Ⅱ, PSoC 5LP (Silego, Xilinx et Cypress) ;
- [Trellis](https://github.com/SymbiFlow/prjtrellis) : les ECP5 de Lattice ;
- [prjbureau](https://github.com/whitequark/prjbureau) : les ATF1502AS de Microchip.

Notons que la marque Lattice est très représentée, alors que Microsemi est absent (à ma connaissance) de ces projets.

ASIC
====
Les [ASIC](https://fr.wikipedia.org/wiki/Application-specific_integrated_circuit "Application‐Specific Integrated Circuit — circuit intégré spécialisé") ne sont pas des FPGA. Une fois que l’on a envoyé nos fichiers de production au fondeur, les composants ne sont plus modifiables. Et comme la facture est en général particulièrement salée pour produire une série, il faut en produire beaucoup et surtout ne pas se planter.

Une (vénérable) suite de logiciels libres appelée [QFlow](http://opencircuitdesign.com/qflow/) existe depuis plus de trente ans pour concevoir ces circuits intégrés spécialisés. Mais le site officiel fait particulièrement peur, et laisse croire que le logiciel est à l’abandon depuis bien longtemps.
Il n’en est rien, ce logiciel est toujours maintenu et est utilisé par de plus en plus de concepteurs ASIC pour produire des puces libres. On pense notamment au _Raven_ à base de PicoRV32 (RISC‑Ⅴ) qui avait été décrit dans les [colonnes de _LinuxFr.org_](https://linuxfr.org/news/un-asic-concu-integralement-avec-des-logiciels-libres). On pense également au projet de FPGA libre _kFPGA_ décrit également dans [ces colonnes](https://linuxfr.org/news/k1g1-le-premier-fpga-libre).

Un autre composant à destination des amateurs de rétro‑informatique est en cours de production par [Staf Verhaegen](https://www.youtube.com/watch?v=xiBrZFaZ7hQ&list=PLUg3wIOWD8yodkHgXWGSHQdKACu9MWepT&index=20&t=0s) avec le projet [Chip4Makers](https://chips4makers.io/). L’idée de Staf est que la production de composants ASIC coûte très cher à l’unité, il n’est donc pas possible de concurrencer les composants du marché avec un composant conçu « dans son garage ».
Cependant, il existe une frange de hobbyistes prête à payer plus cher pour retrouver leur vieux processeur [6502](https://fr.wikipedia.org/wiki/MOS_Technology_6502) ou [Z80](https://fr.wikipedia.org/wiki/Zilog_Z80). Ce sont donc ces processeurs que Staf a inclus dans un unique composant, et la pré‑série a été produite d’après un de [ses _tweets_](https://nitter.net/Chips4Makers/status/1204010649623375873#m). Les sources du composant en question sont disponibles sur sa projet [GitLab](https://gitlab.com/Chips4Makers/snowwhite).

D’autres instituts et fondations s’intéressent de très près à l’émergence d’outils libres pour réaliser des microprocesseurs et ASIC. On pense notamment à :

- DARPA, qui finance le projet [OpenRoad](https://theopenroadproject.org/openroad_event/background-on-darpa-electronics-resurgence-initiative/) ;
- l’université de Zurich et son projet [PULP](https://www.pulp-platform.org/implementation.html) ;
- l’université de Barcelone, qui a [annoncé la sortie prochaine d’un processeur RISC‑V](https://www.bsc.es/news/bsc-news/the-bsc-coordinates-the-manufacture-the-first-open-source-chip-developed-spain) libre.
- l’université Paris Ⅵ, qui fait bien trop peu de publicité de sa suite libre [Alliance](https://www-soc.lip6.fr/equipe-cian/logiciels/alliance/) (synthèse [[VHDL]], pour faire des ASIC) — Mais pourquoi ce projet est-il si peu connu ?


HDL (Hardware Description Languages)
====================================
Yosys était jusqu’ici réservé à la synthèse Verilog. Mais grâce au travail de Tristan Gingold et Pepijn De Vos (principalement), il est désormais possible d’utiliser Yosys en conjonction de [GHDL](http://ghdl.free.fr/) pour faire de la [synthèse GHDL](https://github.com/tgingold/ghdlsynth-beta). Le projet est encore en _beta‑test_, mais Pepijn s’en sert pour faire de la synthèse TTL de ses porte‑grammes [VHDL ainsi que de la vérification formelle](http://pepijndevos.nl/).

Principalement grâce à Yosys, il est désormais tout à fait possible de faire de la [vérification formelle](http://www.clifford.at/papers/2016/yosys-smtbmc/) pour valider ses composants. C’est le cheval de bataille de [Dan Guisselquist](https://zipcpu.com/tutorial/), avec son projet de processeur nommé [ZipCPU](https://zipcpu.com/).

Le langage de haut niveau [Chisel](https://www.chisel-lang.org/) est maintenant relativement mature. Le projet fait partie de la fondation Linux et la [conférence annuelle CCC](https://events.linuxfoundation.org/chisel-community-conference/) (non pas _Chaos Communication Camps_ mais _Chisel Community Conference_) est soutenu par des gros industriels comme Western Digital ou Cadence.
Toute la gamme des processeurs développés par SiFive est écrite avec Chisel, Google a utilisé le langage Chisel pour son processeur d’intelligence embarqué [Edge TPU](https://www.youtube.com/watch?v=x85342Cny8c).

Le langage [nMigen](https://github.com/m-labs/nmigen) basé, lui, sur Python essaime aussi pas mal, mais surtout dans le milieu de la recherche.

[CλaSH](https://clash-lang.org/) est sortie en version 1.0. Cela faisait des années qu’il se traînait avec des version 0.x, le passage à 1.0 est un signe de maturité. CλaSH est basé sur le langage au paradigme fonctionnel [[Haskell]]. Je ne peux hélas pas vous en dire plus aujourd’hui car je n’ai par réussi à percer le secret de cette logique de matheux qu’est le paradigme fonctionnel. :)

Cocotb a désormais un vrai rythme de développement et est utilisé en production pour de « grosse » IP comme l’[USB](https://antmicro.com/blog/2019/12/testing-usb-cores-with-python-and-cocotb/). La [version 1.3](https://cocotb.readthedocs.io/en/latest/release_notes.html#cocotb-1-3-0) est sortie en ce début d’année. Cocotb est un module Python permettant d’écrire des bancs de test HDL. Cocotb a la particularité de se connecter à un simulateur « du marché » pour lire et écrire les valeurs de signaux. Cela permet de garder son simulateur HDL parfois acquis à grands frais.

[Verilator](https://www.veripool.org/wiki/verilator), le simulateur Verilog le plus rapide du « marché » (plus rapide que tous les simulateurs commerciaux) continue à être activement développé. Les [récents _commits_](https://www.veripool.org/projects/verilator/news) permettent aujourd’hui de l’utiliser avec Cocotb. Et son passage à la version 4.0 permet une pleine utilisation des multiples cœurs de nos PC actuels, améliorant encore ses performances.


RISC‑Ⅴ
======
On peut aujourd’hui dire sans sourcilier que l’[année de libération des processeurs](https://linuxfr.org/news/2018-l-annee-de-la-liberation-des-processeurs) est passée grâce au jeu d’instructions RISC‑Ⅴ.
Il n’est plus nécessaire de présenter ce jeu d’instructions aujourd’hui, et nous pouvons nous procurer tout un tas de microcontrôleurs basés sur RISC‑Ⅴ pour une somme d’argent (plus ou moins) modique.
Voici une petite liste de microprocesseurs RISC‑Ⅴ disponibles sur le marché :

- [E310 (RV32IMAC)](https://www.sifive.com/boards/hifive1-rev-b) ;
- [U540 (RV64G)](https://www.sifive.com/boards/hifive-unleashed) ;
- [K210 (RV64GC)](https://wiki.sipeed.com/en/maix/module/m1.html) ;
- [RI5CY/ZERO-RISCY (RV32E)](https://vegaboards.com/order-board-eu-customers/) ;
- [GD32V (RV32IMAC)](https://www.seeedstudio.com/Sipeed-Longan-Nano-RISC-V-GD32VF103CBT6-Development-Board-p-4205.html) ;
- [GAP8 (RV32IMC)](https://greenwaves-technologies.com/product/gapuino/).

Hormis l’U540 et, dans une certaine mesure, le K210, tous ces processeurs sont des microcontrôleurs orientés basse consommation. La question qui est sur toutes les lèvres aujourd’hui, c’est : RISC‑Ⅴ va‑t‑il percer dans le monde du serveur et du calcul parallèle ?

Circuits imprimés
=================
[Kicad](https://kicad-pcb.org/) est un logiciel de conception électronique pour fabriquer des circuits imprimés, également appelés [PCB](https://fr.wikipedia.org/wiki/Circuit_imprim%C3%A9 "Printed Circuit Board"). C’est un logiciel initialement développé par un français (cocorico) qui inclut toute la suite de logiciels nécessaires à l’électronicien :

- la schématique ;
- le routage ;
- et même maintenant la simulation de la gestion des coûts en composants (BOM) ;
- etc.

Kicad est longtemps resté un logiciel anecdotique (mais parfaitement fonctionnel), jusqu’à ce que le [CERN](https://home.cern/fr/news/news/computing/kicad-software-gets-cern-treatment) s’y intéresse et finance des ingénieurs pour améliorer la partie routage. Aujourd’hui, Kicad est soutenu par la [Fondation Linux](https://open-source.developpez.com/actu/285669/KiCad-rejoint-la-Linux-Foundation-pour-faire-progresser-la-conception-assistee-par-ordinateur-pour-l-electronique/) et a lui aussi sa conférence annuelle prestigieuse : la [KiCon](https://kicad-kicon.com/).

Ils sont emprisonnés depuis trop longtemps, mais nous ne les avons pas oubliés !
===============================================================================
Pour conclure, nous pouvons affirmer que la libération des FPGA est maintenant bien engagée. Et nous assistons aujourd’hui à l’émergence du matériel libre du point de vue du cœur de la puce : le silicium.
La liberté dans ce monde stagnait depuis des dizaines d’années, mais les choses décollent aujourd’hui. Et on entend le même refrain contre le Libre que l’on entendait dans les années 2000 sur le logiciel. Pour quelqu’un qui chercherait un projet libre sur lequel se lancer pour faire ses armes, comme pour la conquête de l’ouest, l’espace est encore vierge et c’est le moment de se lancer.