Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Packages and Cores

An important line of distinction is understanding the difference between a package and an IP core.

An IP core, commonly referred to as a core, is the smallest amount of hardware description code that Orbit considers at a time. A core is a reusable block of design logic composed of one or more design units. A core's name is defined by its root design unit, which is where Orbit starts from when collecting the rest of the required design units for a particular build. Design units are the highest levels of abstraction in hardware description languages, which include VHDL entities and SystemVerilog modules, and can exist in one or more design files.

All cores remain as source code when installed by Orbit and are intended to be shared with multiple projects.

The core root is a primary design unit that Orbit starts from and makes up the root of the core.

A package is a collection of one or more cores. A package contains an Orbit.toml file, describing metadata for the collection of cores, as well as an auto-generated Orbit.lock file, recording the world state of the package. A package in this context is often synonymous with "project".

To disambiguate the concept of an "Orbit package" from an "HDL package", much of the documentation in this book and throughout Orbit will favor using the word "project" instead of "package" when discussing an "Orbit package".

Orbit operates at the package level for hardware description languages, hence being a package manager.

Cores within a package can be made public or private, see IP Core Visibility for details.

Orbit package vs. HDL package

A number of different concepts are commonly referred to by the word "package". This section clarifies the differences between two distinct meanings in Orbit packaging, "Orbit package" and "HDL package".

What's an Orbit package?

An Orbit package is a collection of source files you can install. Most of the time, this is synonymous with "project". When you type orbit install pkg, or add pkg = 1.0.0 to the [dependencies] table in your Orbit.toml, pkg is the name of the Orbit package. Orbit packages are what Orbit manages for you.

What's an HDL package?

An HDL package is a design unit within VHDL or SystemVerilog. These packages are language constructs embedded within their respective language, and are often used to store and share data, methods, and parameters across other design units.

In SystemVerilog, you can import packages using the import keyword, and in VHDL, you can reference packages using the use keyword.

An Orbit package contains one or more cores, and within each core exists one or more design units. In some cases, a core's set of design units may contain one or more HDL packages. Therefore, Orbit packages always encapsulate HDL packages and provide a means for other projects to reference these HDL packages.

References

Python Packaging User Guide - Distribution package vs. import package

The Rust Book - Packages and Crates

Python Packaging User Guide - Package Formats

Wikipedia - Semiconductor intellectual property core