verilator
verilator
zig-based build system and setup for verilator
version compatibility
tested range: v5.018 - v5.044 (and likely newer)
quick start
zig build -Doptimize=ReleaseFast
./zig-out/bin/verilator --version
./zig-out/bin/verilator --lint-only your_design.v
requirements
build dependencies
| dependency | notes |
|---|---|
| zig 0.15.2+ | build system and c++ compiler |
| python 3 | wrapper scripts |
| bison 2.3+ | parser generator |
runtime dependencies
| dependency | notes |
|---|---|
| perl | verilator wrapper scripts |
| make | building verilated designs |
| c++ compiler | compiling verilated code (see below) |
build options
| option | default | description |
|---|---|---|
-Doptimize |
Debug | ReleaseFast, ReleaseSafe, ReleaseSmall |
-Dtarget |
native | cross-compile target (e.g., aarch64-linux-gnu) |
-Duse-zig-cc |
true | use zig c++/zig ar for verilated code compilation |
-Dcxx |
(auto) | override c++ compiler (e.g., clang++, g++) |
-Dar |
(auto) | override archiver (e.g., llvm-ar, ar) |
compiler selection
by default, verilated designs use zig c++ as the compiler. this provides:
- cross-platform builds without msvc/mingw on windows
- consistent c++20/coroutines support
- single toolchain
to use system compiler:
zig build -Duse-zig-cc=false # uses system c++ and ar
to use a specific compiler:
zig build -Dcxx=clang++ -Dar=llvm-ar
zig build -Dcxx=g++ -Dar=ar
[!NOTE]
-Dcxx/-Dartake precedence over-Duse-zig-cc
runtime compiler override
the generated verilated.mk defaults to zig c++ but supports runtime override:
# override when building verilated designs
VERILATOR_CXX=g++ VERILATOR_AR=ar make -f Vdesign.mk
# or export for the session
export VERILATOR_CXX=clang++
export VERILATOR_AR=llvm-ar
make -f Vdesign.mk
the makefile automatically detects compiler type (zig/clang/gcc) and adjusts:
- coroutine flags (
-fcoroutinesfor gcc) - precompiled header suffix (
.gchfor clang) - macos linker flags (
-undefined dynamic_lookupfor zig)
building
zig build
switch verilator version
zig fetch --save=verilator "git+https://github.com/verilator/verilator#v5.042"
zig build
cross-compilation
zig build -Dtarget=aarch64-linux-gnu -Doptimize=ReleaseFast
zig build -Dtarget=x86_64-windows-gnu -Doptimize=ReleaseFast
supported targets:
x86_64-linux-gnu,aarch64-linux-gnux86_64-macos,aarch64-macosx86_64-windows-gnu,aarch64-windows-gnu
output structure
zig-out/
├── bin/
│ ├── verilator # perl wrapper (entry point)
│ ├── verilator_bin # main compiler binary
│ ├── verilator_coverage # coverage tool wrapper
│ └── ...
└── include/
├── verilated.h # runtime headers
├── verilated.mk # makefile for verilated designs
└── vltstd/ # standard library