# Verilator

Verilator és una eina de programació de programari que converteix el llenguatge de descripció de maquinari Verilog en un model de comportament precís al cicle en els llenguatges de programació C++ o SystemC. Els models generats són de precisió del cicle i de 2 estats; com a conseqüència, els models solen oferir un rendiment més alt que els simuladors basats en esdeveniments més utilitzats, que poden modelar el comportament dins del cicle del rellotge. Ara, Verilator s'utilitza en investigació acadèmica, projectes de codi obert i per al desenvolupament comercial de semiconductors. Forma part del creixent cos de programari gratuït d'automatització del disseny electrònic (EDA). És un programari lliure i de codi obert publicat només sota una llicència pública general menor GNU (LGPL) 3.0 o una llicència artística 2.0.

## Ús

Verilator ha vist la seva adopció més àmplia a les comunitats acadèmiques i de programari de codi obert. La indústria dels semiconductors ha estat més prudent en l'adopció d'una eina de codi obert i té els mitjans econòmics per utilitzar alternatives comercials.

### Acadèmic

Els investigadors han utilitzat Verilator per desenvolupar nous entorns de co-simulació, com a part dels fluxos generals de disseny ASIC i FPGA i en l'anàlisi de rendiment i potència. Verilator també és una eina popular per a les tesis d'estudiants, per exemple.

### De codi obert

Verilator és una eina de codi obert i, al seu torn, ha estat adoptat per una sèrie d'altres projectes. El Fedora Electronic Lab ha adoptat Verilator com a part del seu flux de disseny de codi obert per a Fedora 11. L'arquitectura OpenRISC d'OpenCores inclou un model de referència precís del cicle, generat a partir de Verilog mitjançant Verilator. Un article de 2010 descrivia com es podria executar la suite de proves de regressió per a GCC amb un model de Verilator de l'OpenRISC 1200 com a forma de detectar errors en la implementació de Verilog RTL. L'eina TestDrive Profiling Master proporciona l'entorn FPGA virtual mitjançant Verilator.

### Comercial

Comercialment, Philips Semiconductors (ara NXP) ha liderat el camí. El seu ús de Verilator s'està generalitzant, per exemple, a les notes d'aplicació. Més recentment, Art of Silicon ha descrit el seu ús de Verilator en una granja de processadors Linux com una ruta per fer proves de regressió més ràpides dels seus dissenys comercials. El responsable actual de Verilator va identificar 27 empreses i universitats que havien informat de l'ús de Verilator o que van contribuir al seu desenvolupament, incloent Intel, Arm, CSR, Broadcom, Raytheon, Infineon, Stanford University, Imperial College London i Embecosm.

## Història

El manual d'usuari de Verilator ofereix un breu historial. L'eina es va originar el 1994 amb un equip dirigit per Paul Wasson al Core Logic Group de Digital Equipment Corporation (DEC). Es va utilitzar per convertir el codi Verilog a C per a la co-simulació amb un model de CPU basat en C del processador Alpha. Durant la dècada de 1990 Duane Galbi va assumir la responsabilitat del desenvolupament i la tecnologia va ser adoptada per altres grups al DEC. El 1998 DEC va publicar el codi font.
Des del 2001 la tecnologia ha estat desenvolupada per Wilson Snyder i altres com a part del projecte de codi obert Veripool. Es va afegir un mode SystemC i l'eina es va reescriure des de zero en C++, donant lloc a un augment del rendiment. El 2022, la versió 5 de Verilator va afegir un programador compatible amb IEEE i una semàntica de retard, relaxant les restriccions anteriors que ignoraven tots els retards.

## Tecnologia i característiques clau

Verilator converteix Verilog a C++ o SystemC. Pot gestionar totes les versions de Verilog i també algunes afirmacions de SystemVerilog. L'enfocament s'acosta més a la síntesi que a la simulació basada en esdeveniments. Tot el disseny està aplanat (és a dir, tots els mòduls s'amplien per crear un mòdul). L'anàlisi estàtica s'utilitza per eliminar cables i programar tots els processos en el moment de la generació del model. Es genera una classe C++ amb una funció que pren valors de 2 estats als ports d'entrada i els avança als valors dels ports de sortida a la vora del rellotge següent.
SystemC s'admet proporcionant una classe d'embolcall que utilitza ports SystemC i amb sensibilitat a la freqüència de rellotge, que impulsarà els ports del model C++ subjacent.
Verilator admet la partició automàtica de dissenys en diversos fils, la qual cosa també pot millorar el rendiment.

## Utilitzar amb MATLAB

Verilator converteix Verilog sintetitzable a C++, mentre que la biblioteca C++ es podria compilar en un fitxer MEX mitjançant la interfície MATLAB a C++. Així és com els dissenys de Verilog es poden simular directament des de MATLAB. L'ús de models C++ compilats amb MATLAB és més ràpid que l'ús d'interfícies de co-simulació amb un simulador de llenguatge de descripció de maquinari (HDL) independent. Hi ha un projecte de codi obert anomenat vmodel que compila Verilog en un fitxer MEX mitjançant Verilator i proporciona un conjunt de funcions per a la simulació de models des de MATLAB.

## Referències

* ↑ «2.1. Software RTL Simulation — Chipyard 1.11.0 documentation» (en anglès). [Consulta: 6 març 2025].
* ↑ «Verilator — PlatformIO v6.1 documentation» (en anglès). [Consulta: 6 març 2025].
* ↑ «Programari d'openSUSE» (en anglès). [Consulta: 6 març 2025].
* ↑ «Analyze Verilator processes and ASTs with the astsee suite» (en anglès americà), 18-03-2024. [Consulta: 6 març 2025].
* ↑ Kremeris, Norbert. «Verilator Pt.1: Introduction» (en anglès), 13-06-2021. [Consulta: 6 març 2025].