HBS is a Tcl-based, minimal common abstraction build system for hardware design projects.
If you find HBS useful, and write any academic publication on a project utilizing HBS please consider citing.
@Article{electronics15153292,
AUTHOR = {Kruszewski, Michał},
TITLE = {Characterizing and Comparing Direct-Tcl and Indirect-Abstract Approaches for Hardware Build Systems},
JOURNAL = {Electronics},
VOLUME = {15},
YEAR = {2026},
NUMBER = {15},
ARTICLE-NUMBER = {3292},
URL = {https://www.mdpi.com/2079-9292/15/15/3292},
ISSN = {2079-9292},
DOI = {10.3390/electronics15153292}
}
Please check the official HBS user manual. There is also the article (Characterizing and Comparing Direct-Tcl and Indirect-Abstract Approaches for Hardware Build Systems) explaining why HBS was designed in such a way and how it compares to other hardware build systems.
- ghdl,
- gowin,
- modelsim - set tool to questa,
- nvc,
- quartus,
- questa,
- vivado-prj - Vivado project mode,
- xsim - Vivado simulator.
- Running testbench subprocesses when hbs is not in PATH.
- Support for Quartus.
- Optional
doc(core documentation) parameter to thehbs::Registerprocedure. doccommand for viewing cores documentation.dumpcommand to dump cores in Tcl dictionary format.
- Hbs files are sourced as soon as they are found, not after scanning all subdirectories first.
- Vivado: Treat .tcl files as constraint files by default.
- Rename
doccommand toinfo. - Rename
whereiscommand towhere. - Rename
dump-corescommand todump-json. - Rename
list-corescommand tols-cores. - Rename
list-targetscommand tols-targets. - Rename
list-tbcommand tols-tb. - Rename
ArgsPrefixtoArgPrefix. - Rename
ArgsSuffixtoArgSuffix. - Rename
CoreDirprocedure toThisCoreDir. - All the logic is now implemented in the single Tcl file, no Python required anymore.
- Enforcing tool via
HBS_TOOLenvironment variable calls tool customsetToolprocedure. - JSON dump path for gowin in dry run.
dry-runcommand for dry run and previewing commands.- Questa simulator support.
HBS_DEBUGenvironment variable for debugging prints.HBS_DEVICEenvironment variable for enforcing device.HBS_EXIT_SEVERITYenvironment variable for enforcing exit severity.HBS_BUILD_DIRenvironment variable for enforcing build directory.HBS_TOOLenvironment variable for enforcing tool.HBS_STDenvironment variable for enforcing HDL standard revision.-onerror quitargument for xsim.hbs::ExitSeverityvariable for unifying exit condition in simulators.
- Improved error messages.
- Improved regex for errors and warnings.
vivado-prj: Part is set immediately ashbs::SetDeviceis called.vivado-prj: Bitstream file name changed from current project name tohbs::Top. This is required forwrite_hw_platform -include_bitcommand to work without any extra actions.- Rename
TopCoreandTopTargettoRunCoreandRunTarget. - Rename
targetDirtoRunTargetBuildDirand make it public.
- Generics handling for xsim.
testcommand returns an error if any test fails.