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) | 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
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.