Tools and licences
Every tool runs as a separate process that you install. None is bundled or linked; GPL tools (Icarus Verilog, GHDL, KLayout, netgen) are only ever run as programs. Tools are optional per capability: a missing tool disables only what needs it, with an install hint.
Open tools
The OSS CAD Suite installs most of them.
| Tool | Used for | Minimum the Editor checks |
|---|---|---|
| Verilator | Lint; simulation | 4.200; 5.036 for cocotb |
Icarus Verilog (iverilog, vvp) | Simulation | 11.0 |
| GHDL | VHDL lint and simulation | 2.0 |
| NVC | VHDL simulation | |
VUnit (pip install vunit_hdl) | VHDL test cases | |
| cocotb 2 | Python testbenches | |
SymbiYosys (sby), eqy | Formal proofs, equivalence | |
| Yosys | Elaboration, synthesis | 0.20 |
nextpnr (iCE40, ECP5, Gowin Himbaechel, nextpnr-xilinx) with icepack, ecppack, gowin_pack, Project X-Ray's fasm2frames and xc7frames2bit | Place and route, bitstreams | |
| icepll, ecppll, gowin_pll | PLL configuration | |
| openFPGALoader | Programming | |
Verible (verible-verilog-ls) or svls; vhdl_ls | Language servers | |
| OpenROAD, KLayout (0.30 for the PDKs' current DRC and LVS decks), Magic and netgen | ASIC flow |
Vendor tools
| Tool | Licence for the free route | Hardware steps need |
|---|---|---|
| AMD Vivado | Vivado ML Standard (free edition) covers Artix-7, Spartan-7 and small Zynq parts | An SP701 or AC701 board and its JTAG cable |
| Altera Quartus Prime | Lite (free) or Pro | A MAX 10, Cyclone or Agilex 3 board |
| Microchip Libero SoC with FlashPro Express | A free Silver licence | A PolarFire evaluation kit and FlashPro |
| Lattice Radiant with Radiant Programmer | A free licence | A CertusPro-NX or CrossLink-NX board |
Vendor installs are found in their Windows and Linux layouts; that discovery is modelled, not run on Windows. When a vendor build fails at a FlexNet licence check, the message says which feature failed, where the tool looked and what to set.
How tools are found
Each tool is found on PATH, in an OSS CAD Suite install, in the vendor's usual install folders, or at neuralInverse.hdl.paths.<tool>, and its version is checked against a minimum where one is set. These path settings are restricted in untrusted workspaces. Tool ids include verilator, iverilog, vvp, ghdl, nvc, vunit, yosys, nextpnrIce40, nextpnrEcp5, nextpnrHimbaechel, nextpnrXilinx, openFpgaLoader, openRoad, klayout, magic, netgen, sby, eqy, vivado, quartusSh, libero, flashProExpress, radiant, radiantProgrammer, questa, riviera, xcelium, vcs, vitisHls.
Discovery of the open tools is verified on Linux. Vendor installs (Vivado, Quartus, Libero, FlashPro Express, Radiant, Radiant Programmer) are modelled.
The project file: hdl.json
An HDL project is described by hdl.json at the top of the workspace folder (neuralInverse.hdl.projectFile changes the path). A JSON schema gives completion and validation. A design's options belong in hdl.json; settings hold only machine facts such as tool paths.
{
"name": "adc-monitor",
"sources": ["rtl/*.v"],
"top": "adc_monitor_top",
"vhdlStandard": "08",
"testbenches": [
{ "name": "adc_monitor_tb", "top": "adc_monitor_tb", "sources": ["tb/adc_monitor_tb.v"], "simulator": "icarus", "timeout": 120 },
{ "name": "safety_monitor_cocotb", "top": "safety_monitor", "simulator": "icarus", "cocotb": "tests/test_safety_monitor.py" },
{ "name": "crc16_vunit_ghdl", "vunit": "sim/run.py", "sources": ["vhdl/crc16_ccitt.vhd", "sim/tb_crc16_ccitt.vhd"], "simulator": "ghdl" }
],
"targets": [
{ "name": "ecp5_lfe5u25", "family": "ecp5", "device": "25k", "package": "CABGA256", "constraints": "constraints/ecp5_lfe5u25.lpf", "frequency": 40 },
{ "name": "artix7_vivado", "family": "xilinx", "device": "xc7a35tcsg324-1", "constraints": "constraints/artix7_xc7a35t.xdc", "frequency": 40 }
],
"formal": ["formal/safety_monitor.sby"]
}
| Key | What it holds |
|---|---|
sources | Globs of design files (language from the extension); include folders and defines |
top | The top-level design unit |
vhdlStandard | 87, 93, 93c, 00, 02, 08 (default) or 19 |
testbenches | Each with its top unit, extra sources, simulator (verilator, icarus, ghdl or nvc), timeout, and a cocotb test module or a vunit run script |
targets | Each FPGA target: name, family, device, package (required for ice40 and ecp5), constraints, top, frequency, board or cable for programming, and vendor sections (vivado, quartus, libero, radiant) |
formal | Globs of SymbiYosys files; every .sby file by default |
asic | Chips: PDK, top unit, clock and period, utilisation, aspect ratio, pads; see ASIC |
hls | Vitis HLS components (Vivado targets); see IP, packaging and HLS |
includeDirs, defines | Folders searched for `include files, and Verilog macros |
buildDirectory | Where simulation, synthesis and place and route write their output; build/hdl by default |
Target families
family | Flow |
|---|---|
ice40 | Lattice iCE40 with Yosys and nextpnr |
ecp5 | Lattice ECP5 with Yosys and nextpnr |
gowin | Gowin with Yosys and nextpnr |
xc7 | AMD 7-series (Artix, Kintex, Spartan, Zynq) with the open openXC7 flow |
xilinx | AMD with Vivado in batch mode |
intel | Altera with Quartus Prime in batch mode |
microchip | PolarFire, PolarFire SoC, SmartFusion2, IGLOO2 and RTG4 with Libero SoC in batch mode (not yet run against Libero SoC) |
lattice | CertusPro-NX, Certus-NX, CrossLink-NX, MachXO5-NX, Avant, iCE40 UltraPlus with Radiant in batch mode (not yet run against Radiant) |
gowin, intel and microchip targets also need chipFamily.
Open an existing project, or start a new one
- A Vivado, Quartus, Libero, Gowin or Lattice project is imported into
hdl.json, and Vivado, Quartus, Libero and Radiant project files can be edited in place for teammates who stay in the vendor IDE: see Open and edit vendor projects. - New Project... creates
hdl.jsonand a project skeleton from a part or a board read from your installed tools: see New project from a part or board.
The example project
The ADC monitor example is the realistic design every HDL screenshot was taken from: a dual-channel ADC capture and filter pipeline with a safety monitor, two clock domains, a UART command path, VUnit and cocotb testbenches, formal properties, a Vivado project and a Quartus revision. You may use, modify and ship it and designs derived from it without restriction. It is an example, not a certified safety function.
Verified on Linux (x86-64), 2026-10-11, with the open tools: Verilator 5.020 lint, Icarus Verilog 12.0 system testbench, cocotb 2.1.0, VUnit 4.7.1 on GHDL 4.1.0 and NVC 1.23.0, SymbiYosys proofs, ECP5 and openXC7 Artix-7 builds, and the ASIC flows. Not built with Vivado or Quartus, and not run on hardware. Timing figures are nextpnr estimates, not sign-off timing.