Questions and answers
What is JanusHDL?
An HDL simulator, written from scratch from the IEEE standards. VHDL today (1993 to 2019, with PSL); Verilog and SystemVerilog come next. It analyzes your design and testbench, runs them, and shows every signal's waveform. One download holds the command line (jhdl), the window (jhdlw: waveforms, a code editor, projects, and panels that explain why a signal has its value) and a language server for your own editor (jhdl-lsp).
What does JanusHDL cost, and can I share it?
Nothing. JanusHDL is free of charge for anyone and any use, commercial work included. You may pass the download on unchanged: to colleagues, on a shared drive, in a CI image or a container. The newest build is always here.
Which VHDL versions?
1993, 2002, 2008 and 2019, with --std 93|02|08|19; 2008 is the default. The specifications list what is in each part.
Verilog or SystemVerilog?
Not yet. It is the next language on the plan.
Does it run UVVM, OSVVM and VUnit?
Yes, from their own sources, which you get from their projects. UVVM runs with --compat, because it declares a few shared variables that the standard forbids (see the next answer but one); OSVVM runs without it. The UVVM tutorial runs all of UVVM's demo testbenches. VUnit's run.py scripts run through the compat/ghdl or compat/nvc front end: put that folder first on your path and pick the simulator in VUnit as usual.
Can I keep my existing scripts?
Often, yes. The compat folders hold small programs named like the commands your scripts already call. With one of them first on your path, a script that calls those commands runs on JanusHDL. The script commands they understand are a subset; if yours uses one that is missing, it says which.
Why does it reject my shared variables?
Since VHDL-2002, a shared variable has to be of a protected type, and JanusHDL reports a plain one as an error, with its place and the section of the standard. Many libraries still use a few, UVVM among them. Run them with --compat: compatibility mode reports each as a warning instead and runs the code as written (the front ends in compat always use it; in the window it is a check box in the Run dialog and a project setting). The same goes for a few other things the standard forbids but whose meaning is clear, such as 10ns written without a space; the error names --compat whenever it applies. jhdl --rules lists every rule you can allow, warn about or make an error.
Are the results always the same?
Yes: the same design and inputs give the same output, run after run. Within one simulation cycle, the processes run in a fixed order. --order-seed N picks another order, which is how you find a testbench that only passes by luck in the order processes happen to run.
How big can a design and its waveforms get?
Big. The simulator writes every signal's changes to a file as it runs, from a thread of its own, so a long run's memory does not grow with its waveforms. The viewer reads that file only where the screen needs it: a recording larger than your computer's memory opens in seconds. Measured on a recording of 1.8 billion value changes (a 5.2 GB file): open in under 4 seconds, in less than 1 GB of memory. Zoomed all the way out, it draws from summaries kept in the file, without reading the changes, and shows exactly what it would show if it had read them all. VCD files of any size work the same way: they are read into such a recording as they are loaded. Figures for very large designs (hundreds of thousands of lines of VHDL) will be published here once measured.
Can other waveform viewers read the results?
Yes: --vcd FILE writes a standard VCD file. --wave FILE writes JanusHDL's own format, which is smaller and can be opened in jhdlw while the simulation is still running.
Which editors?
Its own: jhdlw has a code editor with the same errors and warnings as the command line, as you type. Or any editor that speaks the Language Server Protocol: point it at jhdl-lsp.
Linux?
Yes: x86-64 and 64-bit ARM (tested on a Raspberry Pi 5), any distribution with glibc 2.28 or later (RHEL 8 and 9, Ubuntu 20.04 and later, Debian 10 and later). The same programs and front ends as on Windows; see the download page.
Can I use it in CI?
Yes. jhdl exits with 0, or 1 if a report or assertion of severity error or failure came up, so a pipeline can rely on it. There is no licence server and nothing to install: copy the unpacked folder into your CI image or container (you may share unchanged copies) and put its bin folder on the path.
Does it contact anything on the internet?
No. The programs make no network connections: no licence server, no updates, no usage statistics.