URL: https://linuxfr.org/news/verilator-4-002 Title: Verilator 4.002 Authors: martoni Davy Defaud, palm123, BAud, ZeroHeure, bubarđŸŠ„ et BenoĂźt Sibaud Date: 2018ćčŽ09月12æ—„T11:36:35+02:00 License: CC By-SA Tags: verilog, systemc, c++ et verilator Score: 29 La version 4.002 de Verilator [a Ă©tĂ© annoncĂ©e](https://www.veripool.org/papers/Verilator_v4_Multithreaded_OrConf2018.pdf) Ă  la confĂ©rence [ORConf2018](https://orconf.org/) en Pologne. Verilator est sans conteste le simulateur [HDL](https://en.wikipedia.org/wiki/Hardware_description_language) _open source_ le plus rapide du « marchĂ© ». Il permet de simuler des [porte‐grammes](http://www.fabienm.eu/flf/et-pourquoi-pas-portegramme/) Ă©crits en Verilog **synthĂ©tisable**. ![Le nouveau logo de Verilator](https://www.veripool.org/img/verilator_256_200_min.png) ---- [Page officielle de Verilator](https://www.veripool.org/wiki/verilator) [Comparaison de temps de simulation Verilator vs Icarus](http://www.fabienm.eu/flf/icarus-vs-verilator/) [Notes de version de la 4.002](https://www.veripool.org/news/241-Verilator-Verilator-4-002-Released) [La prĂ©sentation Ă  ORConf2018](https://www.veripool.org/papers/Verilator_v4_Multithreaded_OrConf2018.pdf) ---- SynthĂ©tisable ? Ce point est important. En effet, le langage [Verilog](https://fr.wikipedia.org/wiki/Verilog) (tout comme son homologue VHDL) permet de dĂ©crire des modĂšles de circuits numĂ©riques destinĂ©s Ă  ĂȘtre utilisĂ©s dans des [FPGA]( "Field‐Programmable Gate Array — circuit logique programmable") mais aussi des [ASIC](https://fr.wikipedia.org/wiki/Application-specific_integrated_circuit "Application‐Specific Integrated Circuit — circuit intĂ©grĂ© propre Ă  une application"). En plus de la partie « modĂ©lisation », Verilog (comme VHDL) inclut la partie tests. On peut donc Ă©crire tout notre _testbench_ en Verilog, puisque nous avons des fonctions d’affichage, d’accĂšs aux fichiers, etc. Cependant, seule une sous‐partie du langage Verilog est capable de dĂ©crire le circuit final, c’est ce qu’on appelle la partie « synthĂ©tisable » car elle peut ĂȘtre synthĂ©tisĂ©e en un schĂ©ma Ă©lectronique numĂ©rique. Si verilator n’est capable de prendre en entrĂ©e que du Verilog synthĂ©tisable, c’est parce qu’il convertit ce code en un objet en C++ et/ou SystemC (le [SystemC](https://fr.wikipedia.org/wiki/SystemC) n’étant qu’une bibliothĂšque C++). La partie code de test sera donc Ă©crite en C++/SystemC et le programme final compilĂ© avec _gcc_. Le binaire ainsi compilĂ© peut ensuite ĂȘtre exĂ©cutĂ© comme n’importe quel exĂ©cutable et lancera la simulation de notre modĂšle numĂ©rique (le porte‐gramme). Le rĂ©sultat est un temps de simulation incroyablement plus rapide qu’[avec les simulateurs classiques](https://www.veripool.org/wiki/veripool/Verilog_Simulator_Benchmarks). Le site officiel donne des vitesses 90 fois supĂ©rieures au cĂ©lĂšbre simulateur Verilog _open source_ [Icarus](http://iverilog.icarus.com/). Personnellement, sur mon porte‐gramme d’anti‐rebond j’obtiens une vitesse 20 fois supĂ©rieure, mais c’est en enregistrant des traces trĂšs lourdes (700 Mio) permettant de visualiser les signaux une fois la simulation terminĂ©e. Il est possible de faire tourner des modĂšles de microprocesseurs Ă©crit en Verilog en « temps rĂ©el » (Ă  quelques kilohertz). ConcrĂštement, si l’on prend l’exemple d’un porte‐gramme simple permettant de filtrer les rebonds d’un bouton (pour le code complet c’est [par ici](https://github.com/Martoni/blp/blob/master/verilog/src/button_deb.v)). On aura les ports d’entrĂ©e‐sortie suivants : ```verilog module button_deb( // sync design input clk, input rst, // in-out input button_in, output button_valid); ``` Une fois « compilĂ© » avec verilator : verilator -Wall -cc src/button_deb.v --trace --exe test/test_button_deb.cpp On obtient un objet que l’on peut instancier dans son programme principal : ```c++ Vbutton_deb* top = new Vbutton_deb; ``` L’accĂšs aux signaux d’entrĂ©e‐sortie se fait ensuite simplement comme un accĂšs aux variables de l’objet : ```c++ top->rst = 1; top->button_in = 0; top->clk = 0; ``` On Ă©value les valeurs de sortie par l’appel Ă  la fonction `eval()` : ```c++ top->eval(); ``` C’est cet appel Ă  la fonction `eval()` qui fera avancer la simulation d’un « pas ». À nous de connaĂźtre le temps que nous souhaitons avoir entre deux pas. Hormis la collection de corrections de bogues, la fonctionnalitĂ© majeure de cette nouvelle version est la prise en charge de multiple fils d’exĂ©cution (_multi‐threads_), qui divise encore le temps de simulation de beaucoup, en fonction du nombre de cƓurs prĂ©sents sur sa machine. Cette nouvelle version de Verilator prouve surtout que ce vĂ©nĂ©rable projet (créé en 1994 d’aprĂšs la [page WikipĂ©dia](https://en.wikipedia.org/wiki/Verilator)) est encore largement actif, il est dĂ©sormais pris au sĂ©rieux par tous les concepteurs de matĂ©riel. Et si l’on en croit son auteur, la plupart des Ă©quipes qui conçoivent des microprocesseurs l’utilisent intensĂ©ment. Bref, un trĂšs bel exemple d’outil de libĂ©ration des FPGA. ;)

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /