ohsh

ohsh: a humble HDL source handler ohsh: a humble HDL source handler

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

The ohsh dog surrounded by scattered source files
Your files
The dog sorting files into a neat stack
ohsh
The dog resting next to an ordered, checked list
In order