Skip to Content
Dual Simulation Engines

Dual Simulation Engines

SiliFlow integrates both Icarus Verilog (iverilog + vvp) and Verilator (verilator), along with automatic sv2v SystemVerilog preprocessing and Slang structural diagnostics.


1. Engine Comparison

FeatureIcarus Verilog (iverilog + vvp)Verilator (verilator)
Execution ParadigmEvent-driven interpreted simulationCompiles RTL into high-speed C++ executable
Best ForBehavioral testbenches, rapid iteration, $display logsCycle-accurate high-throughput SoCs & deep regressions
SystemVerilog SupportAuto-preprocessed via sv2v when neededNative modern SystemVerilog + --timing support
Waveform OutputStandard .vcd dump discoveryHigh-speed .vcd and trace support

Switch engines anytime from Run → Simulator Engine, Settings (Ctrl+,), the Run & Simulation sidebar, or project.json.


2. Running & Aborting Simulations

  1. Open any RTL file or testbench (e.g., spi_packet_engine_tb.sv).
  2. Optionally pick a specific testbench target under Run → Active Testbench or the Run & Simulation sidebar.
  3. Click Simulate in the top Action Island or press F5.
  4. Click Stop or press Shift+F5 anytime to abort immediately.

3. Watchdog Protection & Pipeline Execution

Under the hood, SiliFlow’s Rust runner orchestrates four stages on asynchronous Tokio background threads so the editor UI stays 100% responsive:

  1. Testbench & RTL Discovery: Classifies workspace RTL vs. testbenches (sim/, tb/, test/, tests/ or _tb / tb_ naming) or follows project.json ordering with -I include dirs and -D defines.
  2. Automatic sv2v Transpilation: If a design uses SystemVerilog features (logic, always_ff, enums, interfaces) while running Icarus Verilog, sv2v preprocesses cleanly in an isolated temp pass.
  3. Configurable Watchdog Timer: Enforces a configurable timeout (120 seconds default, tunable from 10 to 7200 seconds in Settings) so accidental infinite loops (like always #0 clk = ~clk;) never freeze your workstation.
  4. Live Log Streaming & Auto-Load: Compiler/runtime stdout streams directly into the Output panel, diagnostics route to Problems, and generated .vcd / .fst traces load cleanly into the built-in Waveform viewer.
Last updated on