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.
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) | 1047 |
| not applicable (headings, informative text) | 196 |
| optional | 37 |
| blocked on the slang frontend | 14 |
| open (a known gap, refused loudly by name) | 6 |
Open clauses: 6.9.1 (array methods and class-property arrays on values wider
than 65535 bits), 15.5 (a class event term's iff is judged when the waiting
process resumes rather than at the trigger), 16.9.3 (sampled value functions
inside class methods and continuous assigns), 18.5 (a fixed middle dimension
below a dynamic outer one in a nested random array), 23.3.3.2 (a ref port
actual with a variable index) 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: 3218 pass, 330 fail, 66 skipped; the failures are Icarus-specific behaviour, not IEEE 1800 requirements.
External designs, run against iverilog 12 and Verilator 5.032 with matching traces or signatures (every difference traced to an oracle or testbench bug): SERV, darkriscv, Hazard3, cv32e40p, picorv32, Ibex and the OpenTitan primitives, uart and rv_timer; alexforencich verilog-axi, verilog-axis, verilog-ethernet, verilog-pcie, verilog-uart and verilog-i2c; ZipCPU wb2axip bridges and FIFOs. CVA6 elaborates and runs to completion (neither oracle builds it).
Install
vj needs LLVM 22 (development libraries) and a C++ compiler for slang.
LLVM_SYS_221_PREFIX=/path/to/llvm-22
This installs the vj binary.
Use
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.