Specifications
JanusHDL preview. What it does today, and what it does not do yet.
Language
| VHDL | IEEE 1076-1993, 2002, 2008 and 2019, the VHDL-2019 additions included. Choose with --std 93|02|08|19 (default 2008). What is not supported yet is in the manual's known limits. |
| PSL | IEEE 1850 in VHDL-2008 and 2019, and in -- psl comments with --psl: assertions and covers over properties and sequences, with clocks, also nested in a property; prev, rose, fell, stable and ended; replicated properties (forall); and union, nondet and nondet_vector, whose choices are pseudo-random and the same on every run. fairness directives are analyzed; a simulation has nothing to check in them. Not yet: a built-in function with a clock argument inside an expression, such as rose(b, clk) and c (as a whole Boolean, rose(b, clk) works). |
| Conditional analysis | VHDL-2019 `if directives, with your own identifiers given by -DNAME=VALUE. |
| Standard libraries | std and ieee built in: std_logic_1164, numeric_std, numeric_bit, the unsigned variants, math_real, math_complex, the fixed- and floating-point packages, std.env, std.reflection. |
| Verilog / SystemVerilog | Coming next. |
| Protected code | IEEE 1735 encrypted code is not decrypted yet. |
Verification libraries
UVVM, OSVVM and VUnit testbenches run from their own sources, which you install yourself (see the UVVM tutorial). This preview does not bundle them: you choose the version your project uses. Compile UVVM or OSVVM once with jhdl lib compile uvvm|osvvm FOLDER, and a design that names their libraries finds them in every run, in the window and in the language server, without listing their files. VUnit 5 runs JanusHDL through VUnit's own package, vunit-janushdl; VUnit 4 through the front ends (see the manual).
Simulation
| Engine | An interpreter that is the exact reference, and native code generation (--jit on) for the code that runs most. Both give the same results, message for message. |
| Process order | Deterministic: the order of processes within a simulation cycle is a fixed permutation (--order-seed N), so a race between processes shows up as a different result for another seed. |
| Recording | Every signal, into JanusHDL's waveform database (--wave, readable while it is written) or a VCD file (--vcd). |
| Analysis cache | --cache FILE keeps the analysis of a project and reuses it when no source file changed. |
| Limits | --max-memory (default 4 GB), --stop-time, and severity levels that stop the run or set the exit code. |
| Memory | Objects that nothing reaches any more are reclaimed between simulation cycles, in every VHDL version (VHDL-2019's deallocate only sets its argument to null). |
Programs
jhdl | The command line: analyze, elaborate and run (jhdl --help); jhdl lib compiles UVVM and OSVVM once. |
jhdlw | The window: projects, a code editor with the analyzer's errors as you type, the design hierarchy and its files (a double click opens an instance's source), waveforms of every VHDL type (records and arrays by field, enumerations, fixed and floating point and more radixes), panels that explain why a signal has its value, simulation runs with their transcript (pause, run for a time, restart), panels to arrange, six themes. |
jhdl-lsp | The language server, started by your editor: errors and warnings as you type, go to definition, hover, references and the outline. |
Command-line front ends
Each compat/<family> folder holds small programs named like the commands of other simulators. Put one folder on your path and existing scripts run on JanusHDL; nothing else on your path changes.
| Folder | Commands | Status |
compat/vsim | vlib vmap vcom vopt vsim vdel, -do scripts | VHDL; a subset of the script commands |
compat/xsim | xvhdl xelab xsim, -prj files, -tclbatch | VHDL; a subset of the script commands |
compat/ghdl | ghdl -a -e -r --elab-run | VHDL |
compat/nvc | nvc -a -e -r | VHDL |
compat/asim, xrun, vcs | their commands | Not yet: they say so |
compat/iverilog, verilator | their commands | With Verilog |
Platforms
| Windows | Windows 10 and 11, x86-64. One zip, nothing to install. |
| Linux | x86-64, glibc 2.28 or later: RHEL 8 and 9, Ubuntu 20.04 and later, Debian 10 and later. One tar.gz. |
| Linux ARM64 | 64-bit ARM, glibc 2.28 or later; tested on a Raspberry Pi 5 with Raspberry Pi OS (64-bit). One tar.gz. |
| Graphics | The window uses the GPU (DirectX 12 on Windows, Vulkan or OpenGL on Linux) and falls back to software rendering where there is none. |