ohsh¶
ohsh is a humble command-line tool that works out which HDL source files
(SystemVerilog and VHDL) a design needs and in what order to compile them. Each
module gets a manifest.json that lists its sources and the modules it depends
on. ohsh reads the manifests and writes plain .src file lists, one per
library and language.
ohsh works alongside build flows such as hog, Vivado, Quartus, Questa, cocotb and VUnit. It does not run simulators, manage tool projects or parse your HDL.
pip install ohsh
ohsh my_top_module
Why ohsh¶
One description for every tool. The same manifests feed your cocotb testbenches, your VUnit runs and your Vivado or Quartus build. A new dependency is added once, in one manifest, instead of in every tool’s file list.
Compile only what the design or the testbench needs. Give each testbench its own manifest and ohsh lists only the files under it.
Third-party code stays untouched. Vendor IP and libraries pulled in as git submodules don’t need to know about ohsh. A manifest next to the submodule lists the files you use, in their own library, and every module that needs them names that library.
Manifests don’t have to be written by hand. ohsh can read the HDL sources and create, fix and check the manifests for you. This is best effort, so review what it writes.
Documentation¶
Getting started: install ohsh, write manifests, add third-party libraries and compile the result.
Manifest file format: every field of a manifest, and what order things go in.
Create, fix and check manifests: let ohsh create manifests for an existing source tree, and keep them in line with the sources.
Integrations: runnable examples for simulators and build tools.
Exit codes: what each exit code means.


