Fact-checked by Grok 2 weeks ago

Verilator

Verilator is an open-source tool for simulating and verifying hardware designs written in and , converting them into high-performance C++ or models that enable cycle-accurate, multithreaded simulations up to 1000 times faster than traditional event-driven simulators. Developed as a free alternative to commercial tools, it performs comprehensive linting, assertion checking, and coverage analysis during compilation, outputting single- or multithreaded executables that integrate with standard C++ compilers like , , or MSVC++. Licensed under the GNU Lesser General Public License v3.0 or the Perl Artistic License 2.0, Verilator is widely used in industry and academia for verifying complex designs, including and . As of August 2025, the project continues active development under the CHIPS Alliance, with version 5.040 incorporating IEEE 1800-2023 support and advanced UVM features. Key features of Verilator include support for advanced constructs such as classes, interfaces, and clocking blocks, as well as direct interfacing with C++ via the DPI (Direct Programming Interface) for cosimulation. It excels in performance benchmarks, achieving 10 times the speed of standalone simulations and comparable results to proprietary tools like or for large-scale designs. However, it has limitations, such as not supporting (Standard Delay Format) annotations, mixed-signal simulations, or , making it best suited for digital logic verification rather than full-system modeling or rapid prototyping tasks where tools like Icarus Verilog may be more appropriate.

Introduction

Description and Purpose

Verilator is an open-source tool that compiles synthesizable and designs into cycle-accurate C++ or models for high-performance simulation. It originated as a development effort at in 1994. The core purpose of Verilator is to enable fast behavioral simulation by generating executable C++ code from hardware description languages (HDL), rather than interpreting the HDL directly, which results in simulation speeds comparable to or exceeding those of commercial tools like or Incisive. This approach leverages the efficiency of compiled C++ execution to handle complex designs at high throughput, making it particularly effective for cycle-accurate modeling without the overhead of traditional event-driven simulation. Key benefits of Verilator include its cost-free nature, with no licensing fees required for use, integrated linting capabilities to enforce code quality and detect potential issues early, support for large-scale designs through comprehensive static analysis, and applicability to suites as well as early-stage co-development. These features position it as a versatile option for hardware verification workflows in both academic and industrial settings. In operation, Verilator takes input HDL files, processes them through and optimization stages, and outputs corresponding .cpp and .h files representing the simulated model. Users must then provide a custom C++ wrapper, including a main() function, to instantiate and drive the model, after which the entire setup is compiled into an executable for running simulations.

Licensing and Development

Verilator is distributed under a dual licensing model, allowing users flexibility in integration and redistribution. The primary license is the GNU Lesser General Public License (LGPL) version 3.0, which permits linking Verilator-generated code with proprietary software while requiring that modifications to Verilator itself remain open-source. Alternatively, the Artistic License 2.0 provides a more permissive option for redistribution and modification without restrictions. The project was initiated and is primarily maintained by Wilson Snyder, who has led its development since 2001 through the Veripool organization. Contributions come from a broad community, including key individuals such as Todd Strader and Geza Lore, as well as recent support from Antmicro Ltd., which has enhanced features like SystemVerilog compliance and performance optimizations. Over 700 contributors have participated, with the project now guided by the CHIPS Alliance under the to foster collaborative advancement. Development occurs openly on GitHub at the verilator/verilator repository, where issues, pull requests, and releases are managed. Announcements, including new versions and significant updates, are shared via the dedicated verilator-announce repository. Commercial support is available through Veripool and partners like Antmicro, Embecosm, and others, enabling enterprise users to access customized assistance and integration services. Verilator supports multiple platforms, with primary development and testing on Linux distributions like , alongside compatibility for and Apple macOS. On Windows, it runs via the (WSL) or environments. Building Verilator requires a C++11-compliant or later, such as , , or MSVC++. Its open-source nature has enabled wide adoption in both academia and industry for hardware verification tasks.

History

Origins and Early Development

Verilator originated in 1994 at (DEC), where it was conceived by Paul Wasson in the Core Logic Group as an internal tool to accelerate simulation by translating hardware descriptions into code. This initial development focused on integrating the generated models with a custom Alpha processor simulator via the interface, enabling faster evaluation of designs compared to traditional event-driven simulators. By 1995, the tool was actively used within DEC for multimedia and network processor projects, with performance enhancements contributed by Duane Galbi, who optimized the code generation and simulation shell. These early efforts addressed the need for high-speed simulation in complex digital designs, laying the groundwork for Verilator's core approach of compiling rather than interpreting hardware behavior. In 1998, shortly before DEC's acquisition by , Verilator was open-sourced, with Duane Galbi facilitating the public release under a license prohibiting resale but compatible with the GNU Public License. The initial open-source versions emphasized basic -to-C translation, providing significant performance gains—often orders of magnitude faster than event-driven simulators—by generating optimized C models that executed directly on host CPUs. This release marked a shift from proprietary use at DEC to broader accessibility, though the tool retained its focus on synthesizable subsets without full support. In the years immediately following open-sourcing, Verilator's maintenance was adopted by Veripool in 2001, with Wilson Snyder leading enhancements that included the addition of output mode in Verilator 2.0. By 2002, a complete rewrite in C++ for version 3.000 delivered 2-5x performance improvements through better code generation and support for features like blocking and non-blocking assignments. Early post-1998 developments also introduced basic linting capabilities, with warnings for issues such as undefined states and unused signals appearing in versions around 2001-2002, aiding design verification. In 2009, support for features and the Direct Programming Interface (DPI) was added, expanding compatibility for more advanced verification tasks. By the mid-2000s, support for a subset of features, including basic data types and assertions, was integrated, expanding compatibility while maintaining the tool's emphasis on simulation acceleration. A key challenge during this early phase was ensuring cycle-accuracy without relying on full behavioral interpretation or dynamic event queues, which led to the adoption of static scheduling assumptions. Under this approach, Verilator evaluated all combinational and sequential logic in a fixed order each clock cycle, assuming predetermined sensitivities to achieve precise timing while enabling high-speed compilation to C++. This static model traded some flexibility for substantial performance benefits, influencing the tool's design philosophy from its inception at DEC through the open-source era. In 2019, Verilator joined the CHIPS Alliance under the , which facilitated contributions from over 700 developers, including significant efforts from Antmicro, , , and .

Major Milestones and Releases

Verilator's major milestones from 2010 onward reflect a steady progression in , , and feature depth, with key releases introducing foundational changes that built upon its early DEC origins. Version 3.900, released on January 15, 2017, marked a pivotal internal refactoring effort to enhance overall and establish groundwork for future improvements, including for old-style $display($time) and fixes for parsing sensitivities with &&. This release emphasized stabilizing the tool's core for broader adoption in environments. Subsequent versions in the 4.x series expanded capabilities and optimization techniques. Version 4.002, released on September 16, 2018, introduced multithreaded model generation, runtime arguments, and LXT2 tracing compatible with GTKWave, alongside optimizations for large always blocks and verilation . Building on this, version 4.100, released on September 7, 2020, mandated and 2.3.0 or later, while adding hierarchical verilation for modular designs and support for class extern/extends, $urandom, and assume properties to advance IEEE compliance. Version 4.200, released on March 12, 2021, introduced the VerilatedContext class for simulating multiple independent models simultaneously, improving usability and integration, with documentation migrated to and fixes for interface array connections. Later, version 4.224, released on June 19, 2022, enabled parallelized VCD tracing via the --threads option and added -f<optimization> flags for conditional merging, further boosting runtime efficiency. The transition to the 5.x series in 2022 represented a major leap in standards adherence and advanced features. Version 5.002, released on October 29, 2022, required and incorporated active/NBA scheduling, timing controls, forks/joins, and a new graph (DFG) optimizer for , while enhancing memory usage and fixing struct pattern assignments. In 2023, initial open-source support for UVM testbenches was added, enabling better integration with workflows. The 5.x series from 2023 to 2025 delivered progressive enhancements, including named properties, (AST) improvements, expanded error checking, and tools; notable releases encompassed version 5.030 on October 27, 2024, with -output-groups for concatenated C++ files and IEEE-compliant intra-assign delays, culminating in version 5.042 on November 2, 2025, which added support for modports referencing clocking blocks (building on clocking block support from earlier 5.x releases) and further optimizations including for assertions. Over this period, Verilator's evolution trended toward full IEEE compliance, integration of UVM-SystemC for , and seamless compatibility with description flows like , enabling more robust and scalable hardware simulation workflows.

Technical Architecture

Design Flattening and Compilation Process

Verilator begins its processing by parsing input (HDL) files, such as , using tools like Flex for and Bison for syntactic parsing to construct an (AST) represented by AstNode structures. This AST captures the hierarchical design, including modules, signals, and connections. The design flattening phase eliminates hierarchy through a series of transformations on the . It starts with linking to resolve module and signal references, followed by parameterization to propagate constants and generate unique module instances. Width elaboration assigns data types and bit widths to signals, while constification simplifies expressions and removes . Hierarchical linking flattens procedural blocks like begin/end statements, and module inlining replaces submodule calls with their expanded logic, resolving connections statically by substituting ports with internal signals. The scope phase then creates per-instance copies of variables, fully unrolling the design into a flat without runtime hierarchy resolution. In the compilation pipeline, Verilator applies static scheduling by analyzing dependencies via graph-based ordering to determine execution sequences, assuming deterministic behavior without races. It elaborates signals into a cycle-accurate model, identifying clocks and generating a master . The backend descope phase reverses flattening to structure the output as , localizing variables for efficiency before emitting C++ or code, including header files (.h), model source (.cpp), and runtime stubs. This pre-compilation to native executables avoids , producing standalone binaries when the --binary option is used. Verilator targets only synthesizable HDL subsets, excluding non-deterministic elements like # delays or constructs, and enforces two-state logic without tri-state buses or propagation beyond . During and early phases, built-in linting detects unsupported constructs, issuing warnings or errors for potential non-deterministic behavior, such as race conditions in concurrent assignments.

Supported Languages and Standards

Verilator provides full support for the Verilog-2005 standard (IEEE 1364-2005), including features such as signed numbers, always @* sensitivity, generate statements, multidimensional arrays, localparam declarations, and C-style port declarations. It also covers Verilog-2001 (IEEE 1364-2001) constructs and extends to subsets with the --language VAMS option, enabling support for analog-mixed signal elements like wreal and mathematical functions such as ceil. For , Verilator offers substantial support for synthesizable subsets as outlined in IEEE 1800 standards up to the 2023 edition, encompassing operators like ==? and !=?, increment/decrement (++/--), system tasks such as $bits and $countones, and constructs including always_comb, enumerations, interfaces with modports, and limited class features for methodologies like UVM (e.g., member variables, methods, extensions, and parameters). Assertions are supported through simple concurrent forms and synthesis directives (e.g., //synopsys full_case), with runtime checks added if formal verification cannot prove them; in versions prior to 5.038, the --assert flag was required to enable elaboration, but assertions are now enabled by default. The tool aims for compliance with IEEE 1800-2005 through 1800-2023, including full preprocessor support in 2012 and later, as well as enhancements like triple-quoted strings in 2023. Limitations in SystemVerilog coverage include partial handling of advanced features such as dynamic arrays, constraints (which may trigger warnings and be ignored), and complex class hierarchies, prioritizing synthesizable code over full behavioral simulation. Verilator focuses on cycle-accurate, two-state logic simulation without native four-state (X/Z) propagation, randomizing unknown values with the --x-assign option, and it ignores most timing controls unless the --timing flag (requiring C++20) is used. Behavioral modeling is restricted to synthesizable subsets, with support for select system tasks like $display, $finish, $stop, $time, and $write converted to C++ equivalents, but constructs like $monitor or full event-driven semantics are not implemented. VHDL is not natively supported. (Property Specification Language) and Sugar assertions are no longer supported, with users directed to assertions instead since version 3.860. As an extension, Verilator integrates with dialects like TL-Verilog, a -based specification for TileLink protocols commonly used in open-source projects, enabling simulation through compatible tools like Makerchip.

Key Features

Simulation and Performance Optimizations

Verilator enhances simulation speed and efficiency through a suite of optimizations applied during the compilation process to generate high-performance C++ models. These optimizations transform cycle-based descriptions into streamlined executables, prioritizing deterministic execution over event-driven paradigms to achieve substantial gains. By leveraging techniques and parallelization, Verilator enables rapid of complex designs, making it suitable for iterative workflows. One key feature is multithreading support, enabled via the --threads N , which partitions the design into independent macro-tasks executed in parallel across multiple CPU cores. This approach scales effectively for large designs, providing 2-10x additional speedup on multi-core systems by balancing computational load and minimizing overhead. For optimal , users can employ tools like numactl to threads to specific processors, further reducing in NUMA architectures. The dataflow graph (DFG) optimizer, introduced in version 5.002, models as directed graphs to identify and eliminate redundant computations, such as unnecessary signal propagations across . This peephole-style optimization combines constant propagation and gate-level simplification, reducing overall times and improving throughput for logic-heavy designs; it can be disabled with -fno-dfg if needed for . By representing dependencies explicitly, the DFG enables more aggressive than traditional methods, contributing to measurable gains in acyclic logic paths. Static analysis optimizations further refine the generated code by inlining constants, eliminating , and optimizing scheduling to minimize C++ bloat and runtime overhead. Constant propagation replaces variables with known values early in the pipeline, while removes unused assignments and cells (controllable via -fno-dead-assigns or -fno-dead-cells), streamlining the model for faster execution. Scheduling adjustments, integrated with multithreading, reorder operations to exploit locality and reduce branching, collectively yielding 10-100x speedups over traditional event-driven simulators for and gate-level models. These techniques ensure the compiled binary remains lean, avoiding the interpretive overhead of event queues. Verilator's optimizations result in a low , as the runs as a native compiled binary rather than an interpreted environment, making it well-suited for gate-level or of million-gate designs. This resource efficiency allows simulations on standard without excessive demands, contrasting with event-driven tools that scale poorly with design size due to dynamic . For instance, hierarchical partitioning via --hierarchical further distributes memory usage across modules, supporting scalable verification of large-scale SoCs.

Verification and Debugging Tools

Verilator provides a suite of built-in and mechanisms that operate during the verilation , ensuring design correctness by detecting potential issues early and generating diagnostic outputs for . These tools include linting for static code checks, coverage for assessing verification completeness, tracing for signal , and assertion elaboration for property . By integrating these features, Verilator facilitates efficient of hardware designs without requiring external simulators. Linting in Verilator automatically detects over 100 potential design issues during the elaboration phase, such as unconnected ports (PINNOCONNECT and PINMISSING warnings), race conditions (RACEVARIABLE and BLKANDNBLK for mixing blocking/non-blocking assignments), and width mismatches (WIDTH for size discrepancies). These checks are enabled by default and can be run standalone using the --lint-only option, which performs static without generating code. Warnings are categorized into lint (style and correctness) and fatal errors, with suppression possible via Verilator Control Files or command-line flags like -Wno-<warning>. This linting process helps identify synthesizability problems and simulation-semantic mismatches before . Coverage analysis supports constructs to measure thoroughness, including functional coverage points via covergroups (enabled with --coverage-user), line coverage (--coverage-line for tracking), and toggle coverage (--coverage-toggle for signal transitions). After , Verilator outputs detailed reports in text format, summarizing coverage percentages and uncovered elements to test development. User-inserted functional coverage translates directly into counters, allowing designers to track specific design behaviors like state transitions or compliance. These features ensure comprehensive without significant overhead. Waveform tracing generates diagnostic files for signal , supporting VCD (via --trace, deprecated), FST (--trace-fst), and LXT2 (--trace-lxt2) formats. The --trace options insert tracing code during verilation, producing C++ files that, when compiled and run, output trace dumps controllable via $dumpfile and $dumpvars in the testbench. Recent versions (5.000+) parallelize tracing with --trace-threads <n>, enabling multi-threaded dump generation for large designs to maintain performance. This allows visualization in tools like GTKWave, aiding in the identification of timing and logic errors. Assertions are elaborated into efficient runtime checks, supporting immediate and concurrent assertions (SVA) with the --assert flag (default since version 5.038). Verilator also integrates a simple subset of PSL properties without time-branching operators, enabling formal-like of design invariants. Failures trigger stops (configurable with --no-stop-fail), providing immediate feedback on violations. These mechanisms convert high-level assertions into optimized C++ code, enhancing debuggability while preserving speed.

Applications

Academic and Research Use

Verilator has become a staple in university curricula for teaching (RTL) design and , particularly in courses focused on systems and hardware description languages. Its zero-cost licensing and rapid compilation times enable students to iterate quickly on and designs without the barriers posed by proprietary simulators. For instance, at the , the ECE627 course on RTL Systems integrates Verilator alongside open-source tools like Yosys for hands-on labs covering the full FPGA design flow, from to simulation. Similarly, Imperial College London's EIE2-IAC course employs Verilator for cycle-accurate simulations in testbench development, allowing students to explore logic specifications and timing behaviors in practical assignments. These applications highlight Verilator's role in fostering accessible education, where fast feedback loops accelerate learning of complex concepts. In research settings, Verilator supports co-simulation of hardware models with software environments, facilitating studies in processor-firmware interactions and hardware-software co-design. Researchers leverage its C++ output to integrate designs into full-system simulators like gem5, enabling performance analysis of ASIC and FPGA prototypes under realistic workloads. For example, the gem5+rtl framework uses Verilator to embed cores into gem5's model, achieving cycle-accurate co-simulation for benchmarking multi-core systems and evaluating architectural trade-offs. In hardware-software co-design, projects like employ Verilator as a baseline for accelerating simulation through parallel C++ execution, demonstrating up to 1,485× speedup on multi-core hosts for large designs including CPU and accelerator prototypes. This capability is particularly valuable for exploratory research, where Verilator's efficiency allows extensive parameter sweeps without hardware overhead. Academic papers frequently cite Verilator in domains such as accelerators, hardware, and open-source (EDA) flows. In studies, it verifies custom accelerators; for instance, simulations of vector extensions in cores use Verilator to validate instruction set compliance and performance metrics. For , researchers at applied Verilator to model and debug a hardware implementation for handwritten digit classification on FPGAs, confirming functional equivalence to software references. Integration with tools like enhances its utility in academic hardware generation, as seen in verification libraries that combine Chisel's Scala-based designs with Verilator simulations for dynamic testing of generated . Additionally, Verilator anchors open-source EDA workflows in research on full RTL-to-GDS flows for SoCs, promoting reproducible designs from simulation to layout. The tool's open-source nature enables large-scale simulations on commodity , bypassing the need for expensive commercial licenses and supporting reproducible research in . This democratizes access to high-fidelity , allowing scholars to and complex systems iteratively, as evidenced by its widespread adoption in academic literature for hardware exploration. More recently, as of 2025, researchers at the have integrated Verilator with for open-source, web-based automated marking of labs, enhancing scalable assessment in digital design education. By facilitating such environments, Verilator contributes to advancements in open ecosystems, where and cost-effectiveness drive in co-design methodologies.

Open-Source Projects

Verilator serves as a core simulator in the ecosystem, particularly for open-source hardware projects focused on secure and general-purpose processors. In OpenTitan, a -based secure developed by and lowRISC, Verilator provides cycle-accurate simulation by translating the project's synthesizable into optimized C++ models, enabling developers to build and execute simulations without proprietary tools. This integration supports the project's open-source ambitions by facilitating verification and software testing in a fully free environment. Similarly, Verilator models the architecture, an open 32-bit RISC processor from , by generating SystemC-based cycle-accurate representations of SoCs like ORPSoC, which includes CPU, , and peripherals, allowing for performance analysis and firmware development. The Electronic Lab, an open-source platform for hardware design and simulation, incorporates Verilator as part of its Veripool tool suite for linting and simulating designs in distributions, streamlining micro-electronics workflows. Verilator integrates seamlessly with Scala-based hardware description languages like Chisel and SpinalHDL, enabling verification of the Verilog code they generate through high-speed simulation backends. In Chisel, developed at UC Berkeley, Verilator acts as a backend via the ChiselTest library, allowing simulation of elaborated SystemVerilog modules with features like waveform generation and temporal assertions, which supports verification in both academic and industrial settings. SpinalHDL, an open-source HDL, uses Verilator as a primary simulation engine, compiling generated Verilog into C++ executables for fast cycle-based testing on Linux and Windows platforms, with compatibility ensured from version 4.218 onward. These flows leverage Verilator's linting and optimization capabilities to verify complex designs in collaborative environments, such as RISC-V IP development. Beyond core ecosystems, Verilator supports specialized open-source projects for interconnect and tasks. In OpenTitan, Verilator verifies TileLink interconnects through TL-UL protocol assertions and simulation bindings, ensuring compliance in bus fabrics for the secure chip's multi-device architecture. For open verification methodologies, Verilator pairs with UVM-SystemC libraries to create industry-level testbenches in C++, enabling constrained-random testing and coverage analysis for designs like microprocessors, while addressing limitations in event-driven timing. Verilator also contributes to open-source EDA initiatives for full ASIC flows, integrating with tools like Surelog and OpenLane under the Alliance to support simulation in projects such as and OpenTitan, facilitating end-to-end without commercial dependencies. Across these projects, Verilator enables early bring-up by simulating -software interactions in C++ environments, allowing developers to test and peripherals prior to availability, as demonstrated in OpenTitan's UART smoketests and ROM-to-Flash execution flows. It further supports through pipelines, such as GitHub Actions, where Verilator compiles designs, runs testbenches, and generates coverage reports to validate changes in open-source repositories. For multi-core SoCs, Verilator simulates systems like the OpenRISC-based ORPSoC, optimizing models to achieve simulation speeds up to 129 kHz on standard , which aids in and parallel execution.

Commercial Implementations

Verilator has seen significant adoption in commercial semiconductor environments, particularly for accelerating verification workflows in resource-constrained settings. Companies such as NXP (formerly Philips Semiconductors) have integrated Verilator into their SoC regression testing pipelines, leveraging its cycle-accurate C++ models to handle substantial portions of simulation cycles—up to 80% in some verification flows—while contributing to its development through extensive testing efforts. Similarly, Art of Silicon employs Verilator to enable massively parallel HDL simulations, distributing workloads across multiple instances for efficient IP validation in complex designs. Bosch, a key player in automotive semiconductors, utilizes Verilator to benchmark processor cores within SoC architectures by translating RTL into SystemC models, facilitating early performance analysis in safety-critical applications. In industry use cases, Verilator supports high-volume simulations within CI/CD pipelines, allowing semiconductor firms to automate regression runs on cloud infrastructure without incurring per-seat licensing costs associated with proprietary simulators. This enables scaling to thousands of parallel test scenarios, as seen in verification environments for automotive chips and emerging AI accelerators. For early architecture exploration, its fast compilation to optimized C++ code permits rapid iteration on design alternatives, often in hybrid setups where Verilator handles RTL simulation alongside proprietary tools for full-system validation. Integration with UVM-compliant frameworks, through emerging SystemVerilog support and UVM-SystemC adaptations, ensures adherence to industry verification standards while maintaining open-source flexibility. Key advantages in commercial deployments include substantial cost savings from its license-free model, which facilitates elastic for large-scale regressions that would otherwise be prohibitive. For instance, verifying automotive SoCs benefits from Verilator's speed—often 10x faster than traditional simulators—reducing turnaround times for compliance with standards. In development, it aids in modeling high-gate-count interconnects and memory hierarchies, providing insights into power and timing trade-offs early in the cycle. Its open-source nature has further accelerated adoption by lowering for mid-tier firms exploring advanced . Verilator addresses industry challenges in handling massive designs exceeding 10 million by supporting hierarchical and multithreading, which mitigate demands—up to 64 GB for peak cases—and times through phased verilation. Custom wrappers via the DPI interface enable seamless firmware co-simulation, integrating C-based software models with for holistic system-level testing in environments like automotive ECUs. These capabilities make it viable for flows, though users often pair it with tools or proprietary debuggers for full traceability.

Integrations

With SystemC and C++

Verilator supports integration with by generating compatible models using the --sc flag during compilation, which translates designs into code while preserving the original module hierarchy as SC_MODULE instances. This output format allows the generated models to interface seamlessly with environments, enabling the construction of transaction-level models (TLM) that leverage 's abstraction layers for system-level simulation. The resulting files, typically placed in an output directory specified by --Mdir, include headers and source files that can be compiled against the library to form executable simulations. For native C++ integration, Verilator produces a C++ class representing the design (e.g., Vtop for a top module named top), which exposes top-level ports as public member references and provides methods such as eval_step() to advance the by one clock . Users must implement a C++ wrapper class or main loop to instantiate this model, manage clock signals by toggling and calling eval_step(), handle resets through dedicated signals, and with external I/O. Tracing capabilities are supported via the VerilatedVcd class, which generates VCD waveform files when linked and invoked in the wrapper, facilitating debugging of signal behaviors during execution. Advanced features enhance multi-component simulations, such as the VerilatedContext class, which manages shared resources like time and VPI callbacks across multiple model instances, allowing for hierarchical or partitioned designs within a single C++ application. Parallel execution is possible by partitioning the design into threads using std::thread from the , where each thread handles a subset of the model via separate contexts, provided the design supports fine-grained parallelism. Integration requires linking the generated code against the Verilator (e.g., libverilated.a) and, for SystemC modes, the library (typically via CMake's find_package(SystemC) or manual flags like -lsystemc). This setup enables embedding Verilator models into larger C++ applications, such as for hardware-in-the-loop (HIL) testing where the simulated hardware interacts with real software or control systems.

With MATLAB and Other Environments

Verilator facilitates integration with through the vmodel tool, which enables the simulation of Verilated modules directly within environments. This approach allows hardware designers to embed cycle-accurate Verilog models into /Simulink workflows for tasks such as co-simulation and algorithm verification, where handles high-level modeling and Verilator provides the low-level hardware simulation. For instance, in digital signal processing () hardware prototyping, vmodel permits rapid iteration between algorithmic development in and hardware validation, reducing the need for separate simulation tools. Beyond , Verilator supports bindings for via the pyverilator wrapper, which generates and interfaces with Verilator hardware models in scripts. This integration is particularly useful for scripting large-scale in open-source projects, where 's ecosystem enables automated test generation, data analysis, and visualization of simulation results without manual C++ wrapper management. Experimental bindings for , such as those provided by the verilated-rs crate and the more recent marlin-verilator crate (as of October 2025), allow developers to generate and interact with Verilator models, leveraging 's safety features for building reliable hardware-software co-simulation environments. Verilator also enables co-simulation with tools like Cocotb through its VPI (Verilog Procedural Interface) support, permitting Python-based testbenches to drive and monitor Verilated designs. This setup is ideal for flows where Cocotb handles coroutine-based stimulus and response checking, while Verilator provides high-performance execution. Additionally, Verilator integrates with , Accelera's adapted for , to support standardized open-source environments. By compiling UVM components into via Verilator, users can create reusable testbenches for complex designs, enhancing interoperability in workflows without simulators.

References

  1. [1]
    Welcome to Verilator - Veripool
    Verilator is a fast Verilog/SystemVerilog simulator that reads code, performs lint checks, and compiles it into a faster model, outputting C++/SystemC files.Missing: official | Show results with:official
  2. [2]
    Contributors and Origins — Verilator 5.042 documentation
    In 2019, Verilator joined the CHIPS Alliance. In 2022, Verilator 5.000 was released with IEEE scheduling semantics, fork/join, delay handling, DFG performance ...
  3. [3]
    Initial Open Source Support for UVM Testbenches in Verilator
    Nov 8, 2023 · Leading the efforts of the Tools Workgroup in CHIPS Alliance, across a variety of customer projects, as well as its own R&D, ...
  4. [4]
    Overview — Verilator 5.042 documentation
    Welcome to Verilator! The Verilator package converts Verilog 1 and SystemVerilog 2 hardware description language (HDL) designs into a C++ or SystemC model that ...Missing: official | Show results with:official
  5. [5]
    [PDF] Verilator: Open Simulation - Growing Up - Veripool
    Verilator is a simulator that compiles Verilog into C++/SystemC, created to solve a different problem than most simulators, and may be a user's only simulator.
  6. [6]
    Copyright — Verilator 5.042 documentation
    This program is free software; you can redistribute it and/or modify the Verilator internals under the terms of either the GNU Lesser General Public License ...
  7. [7]
    Verilator open-source SystemVerilog simulator and lint system
    Verilator is invoked with parameters similar to GCC or Synopsys's VCS. It "Verilates" the specified Verilog or SystemVerilog code by reading it, performing lint ...VerilatorExample-systemverilogIssues 253Releases · verilator/verilatorGitHub - sifive/verilator: Fork of ...
  8. [8]
    Announcements related to Verilator - GitHub
    This verilator-annouce repository is to make infrequent announcements related to Verilator, such as release notices and other major news.
  9. [9]
    Verilator Commercial Support - Veripool
    Commercial support is available from the following organizations: Antmicro · Embecosm · Millennium Software Design · ShunYao CAD. Note this is not an official ...
  10. [10]
    Installation — Verilator 5.042 documentation
    This section discusses how to install Verilator. Package Manager Quick Install Using a distribution's package manager is the easiest way to get started.Missing: official | Show results with:official
  11. [11]
  12. [12]
    [PDF] Verilator - Veripool
    Jun 5, 2006 · Welcome to Verilator! The Verilator package converts Verilog1 and SystemVerilog2 hardware description language (HDL) designs into a C++.
  13. [13]
    Developing Silicon IP with Open Source Tools - Design And Reuse
    Mar 12, 2012 · In 1998, nearing the end of a long run, DEC publicly released the source code for Verilator before the company was sold to Compaq. Since ...
  14. [14]
    Revision History and Change Log - Verilator
    Contributors and Origins ... Bug fixes, added verimake_partial script, performance improvements. Verilator 1.0c 1994-09-30¶. Initial release of Verilator ...Missing: DEC | Show results with:DEC
  15. [15]
    Dynamic Scheduling in Verilator – Milestone Towards Open Source ...
    May 13, 2021 · The biggest challenge to opening that possibility turned out to be Verilator's original scheduler running everything sequentially, which in ...Missing: cycle- accuracy static assumptions
  16. [16]
    [PDF] Verilator Internals #1: Debug, Stages, AstNode, V3Graph - Veripool
    This is the first in a series of talks on the internals of Verilator. • Overview. • Compile Phases. • AstNode. • V3Graph. • Debug. Please see docs/internals.
  17. [17]
    [PDF] Verilator Internals - Veripool
    Verilator gets adopted to enable easy substitution of Verilog into SystemC. ... SiCortex starts purchasing IP, so Verilator grows to support most Verilog 2001.
  18. [18]
    Binary, C++ and SystemC Generation - Verilator
    With the --binary option, Verilator will translate the design into an executable, via generating C++ and compiling it. See Binary, C++ and SystemC ...
  19. [19]
    Errors and Warnings — Verilator 5.042 documentation
    Disabling Warnings¶ · Disable the warning globally by invoking Verilator with the -Wno-{warning-code} option. · Disable the warning in the design source code.
  20. [20]
    Input Languages — Verilator 5.042 documentation
    Verilator supports most Verilog 2001 language features. This includes signed numbers, “always @*”, generate statements, multidimensional arrays, localparam, and ...
  21. [21]
    verilator Arguments — Verilator 5.042 documentation - Veripool
    This enables easy debug when looking at the C++ code to determine what Verilog source may be related. As node pointers are not stable between different ...Missing: organization | Show results with:organization
  22. [22]
    FAQ/Frequently Asked Questions — Verilator 5.042 documentation
    As is standard with Open Source, contributions back to Verilator will be placed under the Verilator copyright and LGPL/Artistic license. Small test cases ...
  23. [23]
    Taking a New Look at Verilator - ZipCPU
    Jun 21, 2017 · If you are a VHDL programmer, you may be disappointed to learn that Verilator only works with Verilog, not with VHDL. Perhaps I can use this ...<|control11|><|separator|>
  24. [24]
    An overview of TL-Verilog resources and projects - GitHub
    Makerchip currently supports simulation of Verilog and TL-Verilog code. It is expanding to support logic synthesis and other physical flows as well as support ...
  25. [25]
    Welcome to Verilator - Veripool
    Verilator has typically similar or better performance versus closed-source Verilog simulators (e.g., Aldec Riviera-Pro, Cadence Incisive/NC-Verilog, Mentor ...
  26. [26]
  27. [27]
  28. [28]
  29. [29]
  30. [30]
    verilator Arguments — Verilator 5.042 documentation - Veripool
    Feeds profile-guided optimization data into the Verilator algorithms in order to improve model runtime performance. This option is not expected to be used ...
  31. [31]
  32. [32]
    verilator(1) - Linux man page
    Verilator converts synthesizable (not behavioral) Verilog code, plus some Synthesis, SystemVerilog and Sugar/PSL assertions, into C ++ , SystemC or ...<|control11|><|separator|>
  33. [33]
    [PDF] ECE627: Register-transfer-level Digital Systems
    We will cover the entire design flow and implementation on FPGAs as part of this course. We will learn about open-source tools such as yosys and verilator that ...Missing: university | Show results with:university
  34. [34]
    [PDF] Graphical RISC-V Architecture Simulator - ČVUT DSpace
    Aug 13, 2021 · Verilator is however well suited for use in the advanced computer architecture course where students design their own CPU cores. 5.5 Qemu.
  35. [35]
    [PDF] gem5+rtl: A Framework to Enable RTL Models Inside a Full-System ...
    Therefore, we propose gem5+rtl, an easier and cleaner interface with Verilator to integrate RTL models within the SoC, leading to better usability. Finally ...Missing: course syllabus
  36. [36]
    [PDF] Simulating Multi-Core RISC-V Systems in gem5
    Verilator is then used to compile the RTL model into a C++ cycle-accurate model that is significantly faster than the Verilog RTL model. We used a RISC-V ...
  37. [37]
    [PDF] Accelerating RTL Simulation with Hardware-Software Co-Design
    We evaluate ASH in simulation, on four large Verilog designs that include CPU cores, GPU cores, and accelerators. Our contributions make RTL simulation scale to ...
  38. [38]
    [PDF] Vector Extension on a RISC-V CPU - Scholar Commons
    Aug 12, 2025 · Since Yosys and Verilator provide different C/C++ interfaces there are two separate files and testbenches, contained in tb_cxxrtl and ...
  39. [39]
    [PDF] Handwritten Digit Classification on FPGA
    Our neural network hardware implementation consists of the following major ... we used Verilator to build a C++ model of the network to debug and make design.
  40. [40]
    [PDF] Dynamic Verification Library for Chisel - UC Berkeley EECS
    May 15, 2021 · For simulators that run as different processes (e.g. Verilator and VCS), ChiselTest utilizes. Java's IPC functionality to connect to them. This ...
  41. [41]
    [PDF] From Chisel to Chips with Open-Source Tools - woset-workshop
    Abstract—Chisel and Verilator provide an open-source stack for digital design. For ASIC synthesis, we have open-source tools like OpenROAD, Yosys, and Magic ...
  42. [42]
  43. [43]
    Verilator Setup - OpenTitan Documentation
    Verilator is a cycle-accurate simulation tool. It translates synthesizable Verilog code into a simulation program in C++, which is then compiled and executed.<|control11|><|separator|>
  44. [44]
    [PDF] High Performance SoC Modeling with Verilator - Embecosm
    Icarus Verilog [9] is an open source event driven simulator, offering an interface and behavior similar to commercial offerings such as Cadence NC, Synopsys VCS ...
  45. [45]
    [PDF] A Fedora Electronic Lab Presentation
    TIP: Use verilator to lint your verilog files. Most of the Veripool tools ... Fedora Electronic Lab LiveDVD. Production Environment: On Fedora > 12 or ...
  46. [46]
    Testing - Chisel
    The primary testing strategy is simulation. This is done using ChiselSim, a library for simulating Chisel-generated SystemVerilog on different simulators.Missing: verification | Show results with:verification
  47. [47]
    Setup and installation of Verilator — SpinalHDL documentation
    SpinalSim + Verilator is supported on both Linux and Windows platforms. It is recommended that v4.218 is the oldest Verilator version to use.Scala · Linux · Windows<|control11|><|separator|>
  48. [48]
    Design Verification - OpenTitan Documentation
    Verilator Setup · 7.1 ... TLUL assertions: The tb/xbar_bind.sv binds the tlul_assert assertions to the IP to ensure TileLink interface protocol compliance.Missing: Verilog | Show results with:Verilog
  49. [49]
    [PDF] Verilator + UVM-SystemC: a match made in heaven
    This paper explores using Verilator to verify a SystemVerilog based design with UVM-SystemC, describing how to build a testbench, providing solution for common ...
  50. [50]
    Open source SystemVerilog tools in ASIC design
    Sep 16, 2021 · In this note, we will walk you through the state of the art in new SystemVerilog capabilities in open source projects.Missing: osEDA | Show results with:osEDA
  51. [51]
    Building (and Testing) Software - OpenTitan Documentation
    verilator is used to tag tests that depend on a verilated model of OpenTitan that can take a significant time to build. Verilated tests can still be built with ...
  52. [52]
    Continuous Integration for Firmware testing using Verilator
    Continuous Integration for Firmware testing using Verilator using Github actions to simulate and test an FPGA Verilog design using Open Source tools.
  53. [53]
    Architecture for Massively Parallel HDL Simulations | PDF - Slideshare
    This document describes Art of Silicon's architecture for massively parallel HDL simulations using Verilator. It allows running many simulations ...
  54. [54]
    Using Verilator for Processor Benchmarking of Automotive SoC ...
    Bosch presents a flow for evaluating processor cores in automotive SoC architectures using Verilator to translate RTL into a SystemC model.
  55. [55]
    Scaling Verilator for very large designs - Antmicro
    Nov 23, 2022 · Verilator is a fast, open source simulator widely used in the ASIC and FPGA ecosystem, offering state-of-the-art (or better) results in contexts ...Missing: osEDA | Show results with:osEDA
  56. [56]
    Binary, C++ and SystemC Generation - Verilator
    Verilator will translate a SystemVerilog design into C++ with the --cc option, or into SystemC with the --sc option. It will translate into C++ and compile it ...
  57. [57]
    Connecting to Verilated Models — Verilator 5.042 documentation
    Verilator supports SystemVerilog Direct Programming Interface import and export statements. Only the SystemVerilog form (“DPI-C”) is supported, not the ...Missing: TL- | Show results with:TL-
  58. [58]
  59. [59]
    csail-csg/pyverilator: Python wrapper for verilator model - GitHub
    PyVerilator. This package provides a wrapper to generate and use verilator hardware models in python.
  60. [60]
    djg/verilated-rs: Verilator Porcelain - GitHub
    verilated - Verilator Porcelain for Rust. A build dependency for running verilator to generate Rust bindings to Verilog code.
  61. [61]
    Simulator Support — cocotb 2.0.0 documentation
    cocotb supports Verilator 5.036+. ... Any ModelSim PE or ModelSim PE derivatives (like the ModelSim Microsemi, Intel, Lattice Editions) do not support the VHDL ...
  62. [62]
    Open source Verilog simulation with Cocotb and Verilator - Antmicro
    Jun 6, 2019 · Cocotb will now be able to generate a generic C++ testbench of the verilated design, build and run it, using VPI to control the simulation process.