Sortie de Yosys Open Synthesis Suite 0.8

Posté par  (site web personnel, Mastodon) . Édité par ZeroHeure, Davy Defaud, palm123, bubar🦥 et BAud. Modéré par ZeroHeure. Licence CC By‑SA.
Étiquettes :
37
24
oct.
2018
Matériel

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 processus 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.

Le Verilog est un langage de modélisation du matériel (HDL pour Hardware Description Langage) permettant de décrire un circuit numérique en simulation. Ce modèle Verilog sert de spécification pour une réalisation « physique » du composant modélisé. La synthèse HDL peut‐être considérée comme une conversion du code HDL en un « schéma électronique » constitué de composants numériques reliés entre eux. On parle alors de « netlist RTL » (Register Transfer Level).

Yosys n’est pas le seul logiciel libre permettant de faire de la synthèse Verilog (on peut penser également à ODIN II utilisé dans la suite logiciel VTR). Mais c’est sans contestation possible le logiciel libre qui fait le plus parler de lui ces derniers temps et dont le développement est le plus actif.

En effet, Yosys cible désormais beaucoup de FPGA bon marché, comme le CoolRunner-II, l’ECP5, le MAX10, le Cyclone IV et surtout le ICE40.

L’ICE40 est un peu particulier dans la liste puisque pour ce FPGA toute la chaîne de développement a été libérée. On peut bien sûr faire de la synthèse Verilog, puisque le FPGA est pris en charge par Yosys, mais également le placement routage avec arachne-pnr, ainsi que la génération du fichier de configuration (bitstream) avec icepack/iceprog. Il est également possible de vérifier les timings grâce à icetime.

Beaucoup de choses ont été ajoutées à cette version, mais l’information principale que l’on peut voir dans les notes de version, c’est que le développement de Yosys est très actif. L’objectif de Yosys de devenir le « couteau suisse » libre du FPGA peut presque être considéré comme atteint aujourd’hui.

Même si cela n’est pas apparu avec la version 0.8, on peut noter les fonctionnalités suivantes :

  • le langage FIRRTL utilisé par Chisel3 est une « sortie » (back‐end) possible pour la génération de la netlist ;
  • le prise en charge du moteur de vérification formelle yosys-smtbmc peut quasiment être considéré comme stable — ce n’est pas notre blogueur chrétien préféré qui dirait le contraire à la vue des nombreuses notes expliquant son fonctionnement ;
  • la liste des FPGA (et autre ASIC) pris en charge s’allonge irrémédiablement ;
  • ainsi que les formats de « netlist » permettant d’être réintégrés dans les logiciels privateurs des fondeurs : BLIF, EDIF, BTOR, SMT-LIB, RTL Verilog, FIRRTL, etc.

Pour comprendre comment fonctionne Yosys, des aperçus sont donnés à la page screenshots du site officiel. Notamment avec un simple compteur :

    module counter (clk, rst, en, count);
       input clk, rst, en;
       output reg [3:0] count;

       always @(posedge clk)
          if (rst)
             count <= 4'd0;
          else if (en)
             count <= count + 4'd1; 
    endmodule

Yosys se présente sous forme de ligne de commande. On commence par lire et déchiffrer le fichier source :

yosys> read_verilog counter.v
1. Executing Verilog-2005 frontend.
Parsing Verilog input from `counter.v' to AST representation.
Generating RTLIL representation for module `\counter'.
Successfully finished Verilog frontend.

La synthèse à proprement parler se lance avec la commande proc (process to netlist). Mais il est possible de lancer tout un tas de commandes pour optimiser la synthèse : opt, fsm, memory, etc. On peut également lancer la commande synth pour exécuter toutes ces étapes automatiquement.

À chaque instant on peut voir le « schéma » généré si graphiz est installé (et xdot) avec la commande show :

yosys> show

Schéma généré par Yosis

Pour terminer la synthèse à proprement parler, il faut associer nos blocs à des composants issus d’une bibliothèque fondeur/FPGA (que l’on optimisera avec abc) :

yosys> dfflibmap -liberty mylib.lib
yosys> abc -liberty mylib.lib

On peut ensuite sauvegarder notre design ainsi synthétisé dans différents formats au moyen des commandes write_* :

yosys> write_<TAB>
write_aiger       write_btor        write_file        write_ilang       write_json        write_smt2        write_spice       write_verilog     
write_blif        write_edif        write_firrtl      write_intersynth  write_simplec     write_smv         write_table       

On remarquera la présence du format FIRRTL de Chisel3 ou de Spice pour faire de la simulation analogique. Il est également possible de réécrire la sortie en Verilog « bas niveau » ou en EDIF/BLIF, reconnu par la plupart des fondeurs/FPGA.

Ceci n’est qu’un aperçu (vraiment) très rapide de Yosys, j’encourage toutes celles et ceux intéressés par le sujet à lire le manuel de Yosys qui est plutôt bien fait.

Aller plus loin

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.