Versions drift
Copied folders and pinned submodules go stale silently. A “^1.2.0” means something different the moment the producer publishes again.
The problem
Today, reusing hardware IP means copying directories and pinning git submodules. It mostly works — until it doesn’t, and the cost lands at the worst possible time.
Copied folders and pinned submodules go stale silently. A “^1.2.0” means something different the moment the producer publishes again.
No shared solver, no shared lockfile. Two engineers integrate the same core and end up with two different builds.
When it ships, nobody can say which exact FIFO went in — let alone reproduce that build five years later for an audit.
How it works
The same mental model as pip, npm, or cargo — applied to RTL. Constraints in, an exact verified graph out.
Declare each IP core once in a small manifest — vendor, library, name, version, filesets, and tool targets.
A backtracking solver walks the entire transitive dependency graph and picks one exact, mutually-compatible version of every core.
The solved graph is pinned to exact versions, sources, and SHA-256 checksums in a committed lockfile — your reproducibility contract.
Fetch exactly the locked versions into a content-addressed cache, verifying every digest. Then generate inputs for your sim / synth flow.
# ip.toml — describe your core once [package] vendor = "gbra" library = "fpga-ip" name = "uart" version = "1.2.0" [dependencies] "gbra:fpga-ip:fifo" = "^1.0.0" [targets.sim] toolflow = "icarus" filesets = ["rtl", "verification"]
# resolve + fetch + verify + write lock $ hdlpkg install # reproducible CI install from the lock $ hdlpkg install --locked
Fits your environment
hdlpkg doesn’t ask you to migrate your tools or your infrastructure. It slots in beside them.
Publish over infrastructure you already run — Artifactory, Harbor, or a plain directory. One team publishes a core; every other team consumes the exact same verified bits.
Generates ready-to-run inputs for your simulator and synthesis flows without touching your existing Makefile or scripts.
Handles vendor version codes, Tcl-generated IP, and multi-version conflicts — the things that break naïve folder copies.
Every build ships with an SBOM and content checksums, so you can prove exactly which bits went into the design.
Proof
Integration measured in minutes, not weeks.
Every desk and CI runner rebuilds the same versions, verified against the lock.
Reproducible, audit-ready builds out of the box.
“Less time integrating and re-verifying. More time designing.”
Get started
Open source under the MIT license. The 1.0 format-stability freeze is underway — try it on a real core today.
# grab a core and peek at its files $ hdlpkg pull gbra:fpga-ip:fifo:1.0.0 # resolve + install your project's dependencies $ hdlpkg install # publish a core to your registry $ hdlpkg publish