2019, l’année de la libération des FPGA ?

En matière de liberté le monde du FPGA est resté dans les années 90. Une époque obscure où l’on cachait le mode de fonctionnement des logiciels, où il fallait signer des accords de non divulgation (NDA) avant de pouvoir simplement utiliser un logiciel. Une époque où l’on croyait encore que la sécurité par l’obfuscation était le summum de l’état de l’art pour sécuriser et protéger son logiciel et ses données. Mais il est possible que les nouvelles de sorties de nouveaux logiciels libre de fin d’année 2018 changent la donne.

Un FPGA est littéralement un champs de portes programmable. Le paysan-développeur ensemence son champs avec un fichier nommé «bitstream». Ce bitstream permet de configurer les liens entre les différentes portes logiques du FPGA et constituer ainsi un circuit électronique (numérique).

C’est ce fichier qui n’est documenté par aucun fabricant de FPGA.

Jusqu’à très récemment pour ses semailles, le développeur devait passer par le logiciel fourni par le fabricant pour générer son bitstream. À chaque modèle un logiciel spécifique, avec tous les défauts inhérent aux logiciels fermés :

  • Obligé d’utiliser un ordinateur et un système d’exploitation supporté officiellement par le fabricant (impossible de générer le bitstream sur un système embarqué ARM par exemple).
  • Grande difficulté à gérer les bugs du logiciels (et les bugs c’est vraiment pas ça qui manque)
  • Support aléatoire
  • Obligé de payer une licence pour les «gros» FPGA
  • Licence Gratuite pour les petits FPGA mais un système de gestion de ladite licence obligeant à être fliqué par le fabricant (serveur de gestion de licence, obligation d’identification, collectes de données personnelles, …) .

L’argument principale des fabricants est qu’ils risquent de perdre toutes crédibilités en matière de sécurité auprès des clients militaires. Et qu’ils risquent d’être plus facilement copié par les chinois (Même s’ils y a déjà des copies fabriquées en chine). Il a pourtant été démontré depuis longtemps qu’il est tout à fait possible de faire le reverse-engineering des bitstream. C’est notamment ce qu’avait fait en 2008 Jean-Baptiste Note et Éric Rannaud avec debit pour les FPGA de Xilinx. Mais c’est surtout ce qu’a fait Wolf Clifford en 2015 avec Icestorm pour servir notamment à son logiciel de synthèse Yosys en utilisant une plate-forme réel : les ice40 de Lattice.

Ce «déverrouillage» des ice40 a permis une véritable révolution dans le domaine du FPGA chez les bidouilleurs. Beaucoup de cartes électroniques utilisant un ice40 on vu le jours, et le projet à fédéré tout un tas de nouveau projet de logiciels libre.

À l’origine, icestorm permettait de faire la synthèse avec yosys (transformer du verilog en netlist), le placement routage avec arachne-pnr (placer les différentes portes dans le FPGA et les relier entre elles) ainsi que la génération du bitstream avec icestorm (icepack).

Un fois le bitstream généré il est nécessaire de vérifier que les temps de propagation entre les différentes portes soient inférieur au cycle d’horloge. Il est donc nécessaire de posséder la spécification des temps de propagation entre les portes dans le FGPA. Chose qui a également été faite dans le projet Icestorm (icetime).

Le problème qui persistait avec cette chaîne de développement était arachne-pnr qui ne prenait pas en compte les timings du FPGA pour faire son placement routage. C’est ce verrou qui vient de sauter fin 2018 avec la sortie du nouveau logiciel de placement routage nextpnr initié par Clifford mais fédérant une communauté de développeurs de plus en plus grosse.

En plus de faire du placement routage en fonction des temps de propagations, nextpnr possède une interface graphique permettant une visualisation du FPGA une fois le projet routé.

Vue de l'interface graphique de nextpnr
Vu de l’interface graphique de nextpnr (source github officiel)

Tous ces outils sont désormais regroupés dans un projet opensource ayant pour objectif de réaliser un IDE complet pour les FPGA et nommé SymbiFlow.

Le projet SymbiFlow a pour objectif de devenir le «GCC du FPGA et des ASIC». En plus de icestorm, SymbiFlow intègre d’autres projets de «reverse-bitstream», notamment:

  • icestorm: déjà longuement décrit dans cet article, permet de faire un développement complet avec des outils opensource.
  • X-Ray: Projet de rétro-ingénierie des FPGA de la série 7 de xilinx. Les «tuiles standard» de ces FPGA sont déjà bien documenté et il est possible de générer un bitstream pour des Artix 7.
  • Trellis: Projet de rétro-ingénierie des FPGA ECP5 de Lattice. Toute la matrice a été documenté, et il est désormais possible de faire un projet pour ECP5 de bout en bout avec des outils open-source.
  • 2064: Projet de rétro-ingénierie des FPGA XC2064 de xilinx. Bon ce projet peut être considéré comme annecdotique puisque il vise à reverser le premier fpga de Xilinx du début des années 80 : le xc2064.

Le projet SymbiFlow est un projet encore «en travaux» mais il permet de tracer une voie et fournir des outils permettant de faire la retro-ingénierie d’autres FPGA. Comme on le voit dans les différents projets intégrés il est possible de voir fleurir d’autre projets de retro-ingénierie de FPGA et voir émerger une solution opensource solide pour développer sur FPGA.

L’année 2018 s’est terminée en fanfare avec la présentation de nextpnr au 35c3. L’année 2019 sera-t-elle celle de la libération des FPGA avec une fédération des projets de rétro-ingénierie de tous les FPGA du Marché ? Un fabricant de FPGA osera-t-il publier la documentation des ses bitstream pour ses FPGA ? Vera-t-on l’émergence de nouveaux acteur du FPGA faisant du libre ?

Vous saurez tous cela en suivant le prochain épisode de l’année 2019 !

2018, l’année de la libération des processeurs ?

2018 aura été l’année du Risc-V. Ce jeux d’instructions libre existait bien sûr avant 2018 puisqu’il a été fondé en 2010, mais c’est véritablement en 2018 qu’il aura pris son envol.

Entendons nous bien, le Risc-V pour Reduced Instructions Set Computing version V n’est pas un microprocesseur. C’est une définition du jeux d’instructions ainsi que des registres internes du processeur. Bref cela doit être vu comme une standardisation open-source du langage d’un processeur. Libre aux fondeurs de développer leurs architectures de processeur compatible Risc-V. Il définit les instructions assembleur et leurs formats (encodage) mais il ne définit pas le nombre d’étages de pipelines, comment est géré la prédiction de branche ni le format de bus de données et d’instructions. Tout cela relève de l’implémentation.

Cette standardisation du jeux d’instructions intéresse beaucoup de créateurs de microprocesseurs. En effet, plus besoin d’adapter ou d’écrire les outils logiciels pour son processeur; comme c’est un standard il suffit d’utiliser les «toolchains» classique comme GCC OpenOCD ou LLVM qui bien sûr l’intègre désormais, mais également toutes une série d’outils non libres. Linux n’est pas en reste puisqu’il intègre complètement l’architecture dans ses versions récente. C’est également le cas des petits OS temps réel comme Zephyr .

C’est, entre autre, cette disponibilité des outils qui a poussé de nombreux labo à basculer leurs processeurs sur ce jeux d’instructions. On pense notamment à :

  • PULP (Parallel Ultra Low Power ): Une architecture multi-core pour l’embarqué développé par l’université de Zurich. Utilisé par les processeur GAP8.
  • Patmos: le processeur temps réel
  • Shakti: De l’université indienne de madras
  • …: certainement plein d’autre

Il existe une tripotée de processeur Risc-V «soft» que l’on peut synthétiser dans des FPGA. Mais, à ma connaissance, le premier composant silicium sortie des chaînes de fabrication de fondeurs est le E310 de la société SiFive. Ce composant est sorti en 2017 et il est possible d’acheter un kit de développement «compatible arduino» pour se faire la main dessus.
Le E310 est un microcontrôleur 32bits, qui a fait un peu parler de lui quand il est sorti mais qui reste un démonstrateur. La société SiFive souhaitant rester une entreprise «fabless».

Mais c’est véritablement en 2018 que les choses se sont accélérées avec le ralliement de grands noms de l’industrie électronique à la fondation Risc-V et la sortie de nombreux processeurs «en silicium» bien concret.

On pensera notamment à:

  • U540: Hifive Unleashed de la société SiFive (encore ;). Un quad core RV64G plus un core RV64I pour la supervision temps réel. SiFive à sortie un kit de développement permettant d’y faire tourner un Linux compatible desktop.
  • GAP8: de greenwave technologie, un processeur PULP de 8 cores pour l’IoT.
  • K210: de Kendryte, un microcontrôleur chinois dual core RV64I
  • RV32M1: de NXP (hé oui ! j’en suis le premier étonné) un microcontrôleur très spécial puisqu’il contient un core RV32I mais également deux cores ARM cortex-M0 et M4. Il ne manque plus que le MIPS pour avoir un beau pot-pourri des proc RISC du marché 😉

Toutes ces sorties ont commencées à faire très peur aux concurrents, et notamment à son concurrent principale : ARM. Qui a tenté une campagne de dénigrement de Risc-V avant de très vite se raviser et de lancer une timide «riposte» avec un partenariat Xilinx pour fournir gratuitement des cortex-Mx dans les FPGA de Xilinx.

Mais Risc-V a également fait bouger l’autre concurrent beaucoup moins connu : MIPS qui lui a … libéré son set d’instructions !

Risc-V reste pour l’instant dans le domaine de l’embarqué et du microcontrôleur, mais la fondation a clairement l’intention de couvrir les domaines des calculateurs et autres mainframes. Domaine où MIPS est déjà un peu plus installé.

Risc-V arrivera-t-il à gagner la bataille des supercalculateurs ? ARM adoptera-t-elle le set d’instructions Risc-V ? Intel sentira-t-il le roussi quand Risc-V viendra le titiller sur ses plate-bandes ? MIPS reviendra-t-il dans la course avec son ouverture en open-source ? Des questions auxquels nous pourrons peut-être répondre en 2019. Un combat qui promet d’être passionnant.

Mais une chose est sûr, en 2018 l’opensource a fait une grande avancée dans le domaine des processeurs grâce à ce set d’instruction de l’université de Berkeley !

Comme j’aimerai voir ça dans le domaine des FPGA 😉



FPGA Chinois

Le front de libération des FPGA est à l’affût des nouveaux constructeurs pouvant émerger dans le monde du FPGA. Au delà des deux gros mastodontes que sont Xilinx et Altera/Intel les «petits» comme Lattice ou microsemi sont très intéressants quand à leurs potentiel libérateurs, surtout pour les outils (le reverse-ingeneering est plus facile sur des petites matrices).

Il existe toute une tripoté de «petits» constructeurs dit fabless, qui ne vendent pas de puces mais des IP à intégrer dans d’autre produits.

Cette multiplication des constructeurs donne de l’espoir de voir émerger enfin une chaîne de développement libre pour les FPGA. Ce qui semble d’ailleurs poindre à l’horizon avec SymbiFlow par exemple.

Alors quand au détour du web on tombe coup sur coup  non pas sur un mais deux nouveaux constructeur de FPGA. On a rapidement le HDL qui frétille, la bascule D qui vibre et la LUT 4 entrées qui s’emballe !  Surtout quand on voit que visiblement ils ont déjà sorti des puces et qu’ils ont déjà un catalogue de plusieurs gammes !

Alors là on en devient vexé: comment se fait il que nous n’en ayons pas entendu parler avant ? Un concurrent de la taille d’un Lattice ou d’un microsemi ça ne passe quand même pas inaperçu !

Et bien tout simplement car ces constructeurs sont Chinois, et que l’intégralité de leurs sites internet et de leurs plaquettes de présentation sont en chinois. Leur marché semble quasi-exclusivement réservés à la Chine.

Tiens tiens, pourquoi donc garder jalousement ces petites merveilles ? Nous aussi on voudrait pouvoir jouer avec avec ces nouveaux concurrents, où puis-je commander un kit de développement ? Et tiens d’ailleurs, en matière de développement quel tronche a donc leurs logiciels de développement ?

On trouve la réponse en fouinant sur les différents forum spécialisés à coup de gogol trad en chinois et de forum hardware américain : Ces FPGA sont des copies !

Et oui, comme les japonais en leurs temps, les chinois se mettent à copier les produits de l’occident pour mieux se les approprier et sans doute un jour sortir leur propre produit innovant.

Nul doute que ces entreprises bafouent quelques lois internationnale sur la propriété industrielle et qu’elles ont pour le coup beaucoup de mal à exporter leurs produits. Cependant il est probable qu’à terme elles acquièrent une réelle expérience pour lancer leur propre produit vraiment innovant… avec des outils libre à la clef ? L’avenir nous le dira.

Mais pour l’instant inutile de ce ruer sur ces pâles copie de Xilinx, Altera et Lattice. Autant rester sur les originaux, au moins on est sur de la qualité et des timings !

Les deux constructeurs trouvé sur le web :

Anlogic

À en croire les commentaire de Anton Fosselius sur la nouvelle de cnx-software, les FPGA de cette société sont des copies altera et de xilinx.

Gowin

Celui là semble un peu plus «sérieux» que anlogic. Leurs architectures sont un peu différente et ils proposent un outils à eux (en partenariat avec synopsys quand même), cependant on remarquera rapidement les similitudes entre leur logo et celui de Lattice ! Sans parler de leurs datasheets dont l’architecture et les noms ressemblent tout de même beaucoup aux Lattices .

Installing Libero on Debian 9

This is just an install success story of Libero on Debian 9 (stretch).  For the Risc-V contest, I recently acquired the Microsemi IGLOO2 development kit named FUTUREM2GL-EVB  distributed by Futur-Electronic.

The development software for the IGLOO2 is named Libero and according to Microsemi, should works on Linux. But officially support only RedHat, CentOS and SuSE … not Debian. Microsemi provide a Linux installation guide to install it. It’s useful but should be adapted for Debian.

Download and install Libero

The first thinks to do is to download the installing file for Linux (and not the SP1 file which is only an update).  Once downloaded we just have to launch it, if it’s not executable we can change rights with chmod command.

$ chmod 666 Libero_SoC_v11.9_Linux.bin
$ ./Libero_SoC_v11.9_Linux.bin

An install windows will raise and we can follow directives.

Licensing

Once installed, we need to install the license. For that, we need to know our mac address :

$ ip addr show dev eth0
[...]
link/ether 12:34:56:78:9a:bc [...]

The key that should be given to Microsemi is in upper case without ‘:’ :

$ ipython

In [1]: "12:34:56:78:9a:bc".replace(':','').upper()                                                                                                                                                             
Out[1]: '123456789ABC'

With this key we can then ask for a license file on microsemi website. The official Linux guide talk about license.dat file, but for me it was license.zip … Both are zip file in fact. We can then unflat it with unzip command:

$ unzip License.zip 
Archive:  License.zip
  inflating: License.dat

The unflated file is a text file that should be edited with you text edito as explained in guide (page 6).

License server

The license server deamon must be downoaded on official microsemi website. Choose «Linux deamon» in table. It’s an archive of several binaries that should be unflated :

$ cd
$ tar -zxvf Linux_Licensing_Daemon.tar.gz
Linux_Licensing_Daemon/
Linux_Licensing_Daemon/actlmgrd
Linux_Licensing_Daemon/lmgrd
Linux_Licensing_Daemon/lmhostid
Linux_Licensing_Daemon/lmutil
Linux_Licensing_Daemon/mgcld
Linux_Licensing_Daemon/snpslmd
Linux_Licensing_Daemon/syncad
Linux_Licensing_Daemon/synplctyd

Export shell variables

Before launching software, we have to export some paths in our .bashrc :

#Libero 
LIBERO_LICENSE_FOLDER=/home/giselle/flexlm
LD_LIBRARY_PATH=/usr/lib/i386-linux-gnu/:/usr/lib/x86_64-linux-gnu/
# For Floating License from a License Server
export LM_LICENSE_FILE=1702@gisellelaptop:$LM_LICENSE_FILE
export SNPSLMD_LICENSE_FILE=1702@gisellelaptop:$SNPSLMD_LICENSE_FILE
# <1702> is the port number
# martonilp is the license server host name
#For Node-Locked License
export LM_LICENSE_FILE=$LIBERO_LICENSE_FOLDER/license.dat:$LM_LICENSE_FILE
export SNPSLMD_LICENSE_FILE=$LIBERO_LICENSE_FOLDER/license.dat:$SNPSLMD_LICENSE_FILE
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
export DISPLAY=:0
export PATH=/opt/microsemi/Libero_SoC_v11.9/Libero/bin:$PATH

On my computer, Microsemi softwares are installed in /opt/ directory.

Launching Libero

First launch license server :

$ cd
$./flexlm/lmgrd -c ~/flexlm/License.dat -log /tmp/lmgrd.log

Once license server launched we can run Libero :

$ libero
/opt/microsemi/Libero_SoC_v11.9/Libero/bin/libero_bin: /opt/microsemi/Libero_SoC_v11.9/Libero/lib/libz.so.1: no version information available (required by /usr/lib/i386-linux-gnu/libpng16.so.16)

I had a little problem with libz provided with libero package, then I removed it and linked libz of my distribution :

$ apt-file search libz.so
lib32z1: /usr/lib32/libz.so.1
lib32z1: /usr/lib32/libz.so.1.2.8
lib32z1-dev: /usr/lib32/libz.so
zlib1g: /lib/x86_64-linux-gnu/libz.so.1
zlib1g: /lib/x86_64-linux-gnu/libz.so.1.2.8
zlib1g-dev: /usr/lib/x86_64-linux-gnu/libz.so
...
$ cd /opt/microsemi/Libero_SoC_v11.9/Libero/lib
$ mv libz.so.1 oldlibz.so.1
$ ln -s /lib/x86_64-linux-gnu/libz.so.1 libz.so.1

And then managed to launch it :

$ libero

Hurrah \o/ that works

But it’s unfortunately not finished.

First, when I tryied to synthesize I had this message in error window :

/opt/microsemi/Libero_SoC_v11.9/Synplify/bin/synplify_pro: 137: [: unexpected operator
/opt/microsemi/Libero_SoC_v11.9/Synplify/bin/synplify_pro: 151: [: !=: argument expected
/opt/microsemi/Libero_SoC_v11.9/Synplify/bin/synplify_pro: 324: /opt/microsemi/Libero_SoC_v11.9/Synplify/bin/config/execute: Syntax error: "(" unexpected (expecting ";;")

The problem come from the shell Debian uses by default :

$ ls -lha /bin/sh
lrwxrwxrwx 1 root root 4 oct.  29 20:50 /bin/sh -> dash

This shell doesn’t work like bash and generate some error in synplify scripts. To solve it I simply changed the /bin/sh link to /bin/bash :

$ cd /bin/
$ sudo mv sh shold
$ sudo ln -s bash sh

And I managed to synthesize my design.

But it’s not finished ! Once my bitstream generated I would like to download it on the IGLOO2 on kit. For that, we have to install correctly drivers for FlashPro5.
Directives are given in the official Microsemi Linux install guide, but udev syntax is false on Debian :

BUS=="usb",SYSFS{idProduct}=="2008",SYSFS{idVendor}=="1514",MODE="0660",GROUP="",SYMLINK+="FlashPro5"
BUS=="usb",SYSFS{idProduct}=="6001",SYSFS{idVendor}=="0403",MODE="0660",GROUP="",SYMLINK+="FTDI232"

Right rules are following :

# FlashPro5
SUBSYSTEM=="usb", ATTR{idVendor}=="1514", ATTR{idProduct}=="2008", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="6001", MODE="0666", GROUP="plugdev"

Should be written in /etc/udev/rules.d/70-microsemi.rules file.

Then fully works  and they lived happily and urged a lot of children

Sortie de Yosys Open Synthesis Suite 0.8

L’annonce a été faite mardi 16 octobre par W. Clifford : La version 0.8 de Yosis, un logiciel libre de synthèse Verilog est sortie.

Dans le process de développement FPGA/ASIC la synthèse est l’étape de conversion du modèle matériel simulé en « netlist RTL » d’où l’on peut dériver le circuit réel.

[La suite sur Linuxfr …  ]

Verilator 4.002

La version 4.002 de Verilator a été annoncée à la conférence ORConf2018 en Pologne.

Verilator est sans conteste le simulateur HDL open source le plus rapide du « marché ». Il permet de simuler des porte‐grammes écrits en Verilog synthétisable.

Le nouveau logo de Verilator

La suite sur la dépêche linuxfr

Computer Organization and Design RISC-V Edition

La référence en matière de livre sur l’architecture des processeurs. Tout y passe, l’arithmétique binaire, le langage assembleur, le datapath (le core d’un processeur), les pipelines et les différentes méthodes de prédiction de branches, les différentes architecture multicore, les GPU/VPU, la hiérarchie des mémoires, …

David A.Patterson est une superstar dans le milieu c’est lui qui est à l’origine de l’architecture de type «RISC». Et avec cette édition nous avons droit à une description fine du jeux d’instructions libre RISC-V très à la mode aujourd’hui. Tout en parlant principalement du RISC-V, le livre n’oublie pas les autres architectures célèbre comme x86, arm ou mips.

Le livre parait cher, mais vous en aurez pour votre argent tant le contenu est dense.

Et pourquoi pas portegramme ?

Quand on fait du code pour un FPGA/ASIC il est difficile de nommer la chose développée. On ne réalise pas un programme puisque ça n’est pas une suite d’instructions exécutées par un processeur. Au contraire même on peut réaliser un processeur avec le code que l’on est en train de développer.

Pour nommer cette chose on va souvent parler d’IP pour «Intellectual Property», ce qui est vraiment très moche comme nom en plus d’être un anglicisme. On entend aussi souvent parler de «core», mais c’est trop facilement associé à un cœur de processeur. En général je m’applique à parler d’architecture ou simplement de projet FPGA en français et de design en anglais pour parler de la chose.

Mais une «architecture» est vite associée à quelque chose de plus vaste, à une vue d’ensemble d’un projet et n’est pas nécessairement lié à du matériel.

On pourrait aussi parler de schéma puisque ce sont des portes logiques reliées entre elles. Mais comme on est en train de faire du code c’est étrange.

En anglais, j’ai pu lire sur le site de Sébastien Bourdeauducq qu’il parlait de gateware. Ce qui est assez parlant une fois que l’on a compris le sens. On parle de software pour du logiciel, de firmware pour du logiciel embarqué (profond) et de hardware pour le matériel. Pourquoi pas du gateware pour parler de fpga/asic ?

En effet, un projet/design/core fpga est une description de portes connectées ensemble ce qui colle bien au nom anglais gateware (gate=porte).

Si nous allons plus loin et que nous traduisons en français ce nouveau mot, nous pourrions parler de :

portegramme par analogie à programme.

Voila une idée à envoyer à l’académie française tiens !