vj 0.2.0

vj: a SystemVerilog (IEEE 1800-2023) simulator built on slang and LLVM.
docs.rs failed to build vj-0.2.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: vj-0.0.0

vj

vj is an event-driven, 4-state SystemVerilog simulator written in Rust. It targets IEEE 1800-2023, parses and elaborates with slang (through the sv-lang bindings) and compiles designs to native code with LLVM, either just in time (vj run) or ahead of time (vj build-aot).

Status: 0.1.0 is a preview release. It is not yet fully IEEE 1800-2023 compliant; the numbers below say exactly where it stands.

Conformance (measured, October 2026)

vj tracks every clause of IEEE 1800-2023 (1300 rows) in a compliance matrix:

Status Rows
pass (whole clause holds, with tests) 1046
not applicable (headings, informative text) 196
optional 37
blocked on the slang frontend 14
open (a known gap, refused loudly by name) 7

Open clauses: 6.9.1 (some operations on values wider than 65535 bits), 10.10 (one concatenation corner), 15.5 (assigning one instance's event to another's), 16.9.3 (sampled value functions inside class methods, package functions and continuous assigns), 18.5 (2-D dynamic arrays in constraints), 23.3.3.2 (an array ref port bound to a struct member array) and 37.15 (some VPI reference objects). Every unsupported construct stops with an error naming it; vj does not knowingly produce a silent wrong answer.

External suites:

  • sv-tests, non-UVM: 914 pass, 8 fail (all 8 are test or oracle defects).
  • sv-tests UVM tests: 101 of 104 pass (the 3 failures are test defects).
  • ivtest: 3215 pass, 333 fail, 66 skipped; the failures are Icarus-specific behaviour, not IEEE 1800 requirements.

Install

vj needs LLVM 22 (development libraries) and a C++ compiler for slang.

LLVM_SYS_221_PREFIX=/path/to/llvm-22 cargo install vj

This installs the vj binary.

Use

vj run top.sv                      # compile and simulate
vj run -I inc -D WIDTH=8 a.sv b.sv --top tb
vj run tb.sv --vpi ./libcocotb.so  # VPI / cocotb
vj run tb.sv dpi.c                 # DPI-C
vj --help

vj build-aot produces a shared library or executable from a design. It links a runner archive, libvj_aot.a, that cargo install does not build: build it from the vj-aot crate (cargo build --release -p vj-aot) and pass --runtime-lib or set VJ_AOT_RT.

Crates

vj is the command-line simulator. The other vj-* crates are its parts (vj-sim netlist and scheduler, vj-codegen LLVM code generation, vj-runtime, vj-exec, vj-vpi, vj-sdf, vj-abi, vj-aot, vj-harness), imported in Rust as vj_sim, vj_codegen and so on.

License

Licensed under either of Apache License 2.0 or MIT license at your option.