Welcome
JanusHDL is an HDL simulator with a graphical workbench. It analyzes, elaborates and runs VHDL designs and their testbenches, from VHDL-1993 to VHDL-2019, with PSL, and it shows what happened: every signal's waveform, and why a signal has the value it has. Verilog and SystemVerilog come next.
JanusHDL is free of charge, for anyone and for any use, commercial work included. You may share unchanged copies of the download: with colleagues, on a shared drive, or in a CI image.
This manual is for FPGA and ASIC engineers who write VHDL and run testbenches, with UVVM, OSVVM, VUnit or a setup of their own, on Windows or Linux. It assumes you know VHDL and simulation; it does not assume you know JanusHDL.
What is in the download
One download holds three programs and a set of small front ends:
| Program | What it is for |
|---|---|
jhdl |
The command line: analyze, elaborate and run a design; record its waveforms. Made for scripts and continuous integration. |
jhdlw |
The window: a waveform viewer, a design browser, a code editor, projects, and the insight panels that explain values. It runs simulations too. |
jhdl-lsp |
A language server: JanusHDL's own analyzer in the editor you already use. |
compat/ |
Small programs named after the commands that existing simulation scripts call, so those scripts can run on JanusHDL unchanged. See Running existing scripts. |
There is nothing else to install: the standard packages (std, and ieee from IEEE's official sources) are built in, and so are the legacy arithmetic packages that many designs still use. Verification libraries such as UVVM, OSVVM and VUnit are not part of the download; you get them from their own projects and analyze their sources with your design, as Libraries shows.
What JanusHDL does
- Runs VHDL from source. One command analyzes your files in order, elaborates the top level and runs it. Reports and failed assertions print with their time, delta cycle and source location, and the exit code tells a script whether the run passed.
- Checks against the standard. Every analysis message names its rule and the section of the IEEE 1076 standard (the LRM) it comes from, and says how to fix the code. Code that the standard forbids but whose meaning is clear can still be run, in compatibility mode.
- Gives the same result every time. The same design and inputs produce the same output on every run and every machine. You can also run the processes of each simulation cycle in another fixed order, to find testbenches that pass only by luck.
- Records everything. A run can record every signal into a waveform database, written as the simulation runs. The database also holds the design's structure (which processes drive and read each signal, and where in the source) and the delta cycles of every time step.
- Shows waveforms of any size. The viewer reads a recording a block at a time, as the screen needs it. A recording of 1.8 billion value changes (a 5.2 GB file) opened in under 4 seconds, in less than 1 GB of memory (measured).
- Explains values. Click a signal at a point in time and the Why this value? panel shows the processes that drive it, the signals they read and which of those changed last. Follow an
Xback to where it came from, step by step. - Edits code. The window has a code editor with the analyzer's errors and warnings as you type, find and replace, folding and several cursors.
- Keeps a design together. A project file holds the sources with their libraries and VHDL versions, the top level, generics, stop time and options, in a text file made for version control.
Platforms
| Platform | Download |
|---|---|
| Windows 10 and 11, x86-64 | A zip file |
| Linux, x86-64 | A tar.gz file |
| Linux, 64-bit ARM (tested on a Raspberry Pi 5 with Raspberry Pi OS, 64-bit) | A tar.gz file |
The programs are the same on every platform, and so are their results. Installing covers each.
JanusHDL is a preview
The current builds are previews. They are complete enough for real testbenches, and they are still changing: options, file formats and the window may change between versions. Project files and wave setup files carry a version number, so a newer build reads what an older one wrote, and a build tells you when a file is newer than it understands. Where something is not supported yet, JanusHDL says so in the message, by name, rather than failing silently. Troubleshooting and known limits lists what is missing today.
How this manual is organized
| Chapter | Read it when you want to |
|---|---|
| Installing | Install JanusHDL on Windows or Linux |
| Quick start | Run a first testbench and look at its waveforms in five minutes |
| Running simulations from the command line | Use jhdl in scripts and CI: libraries, generics, VHDL versions, exit codes, recording |
| Projects | Keep a design's sources and settings in one file |
| Libraries | Use the built-in packages, your own libraries, UVVM, OSVVM or VUnit |
| Diagnostics, rules and compatibility mode | Read an error, change how a rule is reported, run code the standard forbids |
| The GUI | Find your way around the window and run simulations from it |
| The waveform viewer | Add signals, set radixes, measure, find values, save wave setups |
| Insight panels | Find out why a signal has its value |
| The code editor | Edit VHDL in the window |
| External editors and the language server | Get JanusHDL's diagnostics in your own editor |
| Running existing scripts | Keep your current simulation scripts, or run VUnit |
| Determinism and races | Understand process order and find races |
| Command reference | Look up an option, a command or a key |
| Troubleshooting and known limits | Solve a problem, or check whether something is supported |
| Glossary | Look up a term |
Conventions
Monospacemarks commands, options, file names and VHDL code. Words in capitals in a command, such asFILE.vhdorNAME, stand for what you fill in.- Bold marks the names of menus, buttons, tabs and other parts of the window. File → Open project… means the Open project… item of the File menu.
- Keys are written as you press them:
Ctrl+Shift+Pmeans holding Ctrl and Shift while pressing P. - Command examples are written for a Linux shell (or Git Bash on Windows); a single
jhdlcommand works unchanged in PowerShell too. Where Windows needs something different, a PowerShell example follows. Paths use forward slashes, which JanusHDL accepts on Windows too.