Greboca  

LinuxFr.org : les journaux  -  k1g1 : le premier FPGA Libre…

 -  4 novembre - 

Sommaire

…à ma connaissance (la dernière fois que j'ai regardé, il n'y en avait pas d'autres)

Camarades moules,

Aujourd'hui est un grand jour pour moi, pour la communauté Libre et enfin pour l'Humanité. Oui, rien que ça. En effet, je viens de valider en simulation au niveau porte logique (gate-level simulation en anglais, j'ignore la traduction exacte) le premier cœur FPGA Libre basé sur ma propre architecture.

Mais avant d'aller plus loin, un peu de contexte.

Un FPGA, c'est qu'est-ce quoi ?

Pour schématiser grossièrement, il existe trois types de circuits intégrés : les ASICs, les processeurs et les FPGAs

ASIC

Les ASIC (Application-Specific integrated circuit) sont des circuits intégrés dédiés à une application donnée tel qu'un décodeur vidéo H.265, un mineur de crypto-monnaie, … Vu qu'ils sont conçus pour ne faire qu'une seule tâche, ils sont généralement plus performant et plus efficace d'un point énergétique que le programme équivalant exécuté par un processeur. Mais leur conception est longue, coûteuse et surtout ils ne sont pas évolutifs : une fois la fonctionnalité gravé dans le silicium, impossible de la mettre à jour. Il faut obligatoirement créer un nouveau circuit.

Processeur

À l'opposé, les processeurs sont des circuits généralistes pouvant réaliser un grand nombre de tâches à condition de leur fournir le programme idoine. Mais en comparaison, ils sont moins performant et consomment plus d’énergie.

FPGA

Les FPGA (Field-Programmable Gate Array) sont un compromis entre les ASICs et les processeurs. Tout comme les processeurs, ils sont reprogrammable et comme les ASICs ils sont performant (mais moins que ces derniers). Un FPGA se compose habituellement de blocs logiques permettant d'implémenter des équations logiques et d'un réseau de routage pour interconnecter les blocs logiques. On pourrait en quelque sorte dire qu'un FPGA est un émulateur d'ASIC.
Je laisse les moules plus compétentes que moi en pédagogie faire une meilleure explication dans les commentaires :)

Mais pourquoi me suis-je lancé dans cette aventure ?

De 2014 à 2018 j'ai travaillé dans une start-up qui concevait des eFPGA (le « e » veut dire « embeddable », signifiant que les FPGA sont intégrables dans des SoC). J'ai beaucoup aimé le concept, mais j'ai été extrêmement frustré par la grande fermeture de ce milieu : les outils pour concevoir les puces sont propriétaires, les PDK des fondeurs sont propriétaires, les FPGAs sont propriétaires et les outils pour programmer les FPGAs sont propriétaires. Bref, c'est proprio de A-Z.
Il est à noter qu'il existe des projets en Open Hardware utilisant des FPGA et que depuis peu il existe une chaîne d'outil libre ayant a fait l'objet d'un journal permettant de programmer certains FPGA. Mais il manque le plus important, le FPGA libre lui même. Et c'est pourquoi j'ai décidé de créer une architecture de FPGA libre.

Open FPGA Platform, kFPGA et k1g1

Open FPGA Platform

Open FPGA Platform (OFP) est une chaîne d'outils visant la création, l'implémentation et la programmation de FPGA. À partir de modèles décrivant des architectures FPGA, la solution va permettre à l'utilisateur de créer son propre cœur FPGA ayant les caractéristiques voulus, de générer le flot de conception permettant de l'implémenter à destination du fondeur ou FPGA cible (oui, on peut faire du FPGA-ception, ce qui est pratique pour la phase de développement) et de générer les outils de programmation.

Pour faire une analogie avec des processeurs, c'est comme si Bob à partir des modèles d'architecture CPU Intel et ARM utilisait OFP pour se créer un processeur compatible Intel composé de 8 cœurs de calcul et un autre compatible ARM bi-core, qu'il utilisait OFP pour les implémenter respectivement pour une fabrication chez le fondeur Global Foundry et pour le faire tourner sur un FPGA Xilinx, et qu'enfin OFP générait les chaînes de compilation spécifique à ces processeurs.

Génération du RTL

Il s'agit de la partie générant le code décrivant le FPGA à partir de l'architecture sélectionnée et des paramètres de personnalisation spécifiés par l'utilisateur. Pour l'instant, seul le Verilog est supporté comme langage cible.

Implémentation

Pour les flots de conception, je vais prochainement intégrer le support de qflow pour les implémentations physique et le support de Vivado de Xilinx pour cibler leurs FPGA.
Le support des FPGA Intel (ex-Altera) et Lattice Semiconductor au travers de leurs outils respectifs est envisagé mais n'est pas une priorité. Offrez moi un de leur FPGA et peut-être que la priorité augmentera ;)

À plus long terme, je compte aussi ajouter le support des outils de chez Cadence, Synopsys et Mentor (les 3 principaux éditeurs d'outil de microélectronique) pour faire les implémentations physiques, mais ça attendra que j'ai plusieurs centaines de k€ sur mon compte en banque pour me payer les licences nécessaires (si des commerciaux passent par là, n'hésitez pas à me faire une offre pour des licences de R&D non destiné à réaliser un tape-out ;)

Programmation

Pour la programmation des FPGA, je compte me baser sur Yosys pour faire la synthèse logique et sur nextpnr pour faire le placement/routage.

En attendant, je fais la programmation à la main et c'est un peu relou… Voir ici pour avoir un exemple.

kFPGA

kFPGA (killruana's FPGA, oui, j'ai manqué d'inspiration pour choisir le nom) est une architecture FPGA destinée à être utilisé avec Open FPGA Platform. Il s'agit pour l'instant d'une architecture extrêmement simple : une grille de tuiles logiques composées chacune d'une switchbox pour le routage et d'un cluster d'éléments logiques (LookUp Table suivi d'une Flip-Flop débrayable).

Architecture kFPGA
détail d'une tuile

Tous les éléments sont paramétrable : le nombre de tuiles, le nombre d'élément logique par tuile, la taille des LUT dans les éléments logique, la taille des bus d’interconnexion entre les tuiles, le nombre d'entrées/sorties du cœur, le nombre de de signaux d'horloge, de set, de reset et d'enable.

Je compte l'améliorer dans les itérations suivantes afin de me rapprocher de ce qu'on peut trouver dans les FPGA commerciaux (blocs de mémoire RAM, DSP de multiplication, nouvel élément logique plus polyvalent, …). Pour l'instant, il s'agit surtout d'un PoC pour valider qu'il est possible de faire une architecture FPGA dans son garage ;)

k1g1

k1g1 (nomenclature retenue pour le moment: kq) est un FPGA basé sur l'architecture kFPGA. Il possède une seule tuile logique contenant un seul élément logique constitué d'une LUT à deux entrées (là où la concurrence propose généralement de 4k à 150k éléments logiques constitués de LUT à 6 entrées…), et une paire d'entrée/sortie par face. Bref, c'est le minimum syndical pour valider le concept

En utilisant la chaîne d'outil libre qflow, j'ai pu réaliser une implémentation physique utilisant la bibliothèque de portes logiques OSU 0.350um. Le circuit obtenu est composé de 139 portes logiques, fait 208.0x130.0um soit 27040.0um² (0.02704mm²) et peut tourner à la fréquence maximale de 200MHz.

N'est-il pas beau mon FPGA?
Il est pas beau mon FPGA?

Et voici la simulation du circuit configuré pour faire un OR logique :

Il est pas beau mon FPGA?

Licence

Depuis le début je parle de libre, mais je n'ai pas encore évoqué la licence choisi. Pour le moment, tous les projets (OFP, kFPGA et k1g1) sont sous licence CeCILL-B.

Le futur

À terme, j'aimerai crée une entreprise vendant du support autour du projet OFP (création d'architectures spécifiques, réalisation des implémentations physiques, …).
Une fois que l'architecture sera suffisamment avancé, j'aimerai monter crowfunding afin de financer la fabrication de FPGA (eFabless propose des prix intéressants et se base sur un flot de conception libre) à destination des hobbyistes dans le double objectif de participer au libre et de faire ma pub. Mais on y est pas encore…

Sources

Tous les projets sont auto-hébergé sur mon instance Gitea :
- Open FPGA Platform
- kFPGA architecture
- kFPGA k1g1 core

Quels sont les technos utilisés ?

Dans ce journal, je n'ai pas trop parlé du code derrière Open FPGA Platform. Tout simplement parce que je suis en plein prototypage et que rien n'est stabilisé. Ça marche, mais c'est moche et fortement couplé. Mais pour l'instant, j'utilise :

  • du python et le moteur de template Jinja2 pour générer le RTL des FPGA
  • qflow pour faire des implémentations physique
  • Xilinx Vivado pour faire des implémentation à destination des FPGA Xilinx et pour valider syntaxiquement le code généré
  • cocotb pour créer les bancs de test
  • le simulateur iverilog
  • le visualiseur de signaux GTKWave

Commentaires : voir le flux atom ouvrir dans le navigateur

par killruana

LinuxFr.org : les journaux

LinuxFr.org : Journaux

Conception d’un circuit intégré avec Qflow

 -  17 novembre - 

Sommaire Partie relou Cours magistral RTLVerilog VHDL SystemC Chisel MyHDL ImplémentationFPGA ASIC Implémentation custom Implémentation basée sur (...)


Le bloboscope

 -  16 novembre - 

Cher Nal', Si tu t'intéresses à l'actualité scientifique, tu as sans doute déjà entendu parlé du blob. Pourvu de 720 sexes et dépourvu de système (...)


Openclipart est en mode maintenance, vive FreeSVG !

 -  16 novembre - 

Dire qu'Openclipart est mort serait un peu exagéré mais on peut dire que l'accès aux fichiers SVG n'est plus disponible depuis plusieurs mois (voir (...)


Atlantic

 -  20 octobre - 

Atlantic est une application sous licence MIT que j'ai développé permettant de suivre en temps réel l'état d'un système industriel. Cette application (...)


chronocram : mémorisation espacée rapide d'associations

 -  19 octobre - 

Sommaire Répétition espacée et apprentissage espacé Approche logicielleIntroduction chronocram Installation Spécificités de chronocram Au-delà Bonjour (...)