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

Archive

The archive is a location in the catalog where compressed snapshots of a specific project's version exist. The compressed files of a project are unable to be referenced as dependencies, but they are able to be installed to the cache for usage. The projects in the archive are considered downloaded.

Blueprint

A blueprint is a single file that lists all the required source files and auxiliary files for the build process of a particular target. The source files are listed in topologically-sorted order. Any auxiliary files collected as a part of the target's custom filesets are listed before any source files. The blueprint is generated by Orbit during the planning stage of the build process, and the blueprint is typically used as input to the execution stage of the build process.

A blueprint can store the information collected from the planning stage in different file formats, called plans. The default plan is tab-separated values (TSV).

Cache

The cache is a location in the catalog where immutable references to a specific project's versions exist. A project's dependencies are referenced from the cache. The projects that are found at the cache level are considered installed.

Catalog

The catalog is the entire user's space of currently known projects to Orbit. It consists of 3 main levels: cache, archive, and channels. The cache stores the most information for a given project, while the channels store the least amount of information for a given project.

Channels

The channels are a set of decentralized registries that store the manifests for versions of projects. In other words, a channel is simply a directory that stores the "Orbit.toml" files for published projects. No source code is stored in a channel, however, Orbit is able to use the manifest as a means to download that project to the archive for local filesystem access. The projects that are found at the channels level are considered available. Users must configure their own channels as their are no default channels directly built into Orbit.

Config.toml

See Configuration.

Configuration

A configuration is a collection of user-defined settings intended to extend and modify Orbit's functionality. Among these settings may include user-defined targets, protocols, and channels. Configurations are stored in files called "config.toml" and have varying precedence depending on where they are processed relative to the local project.

Core

The shorthand (and more common) name for an IP core.

Current Project

The current project is the project detected by Orbit from the current working directory on the command-line. Some commands require a current project in order to run, such as orbit lock and orbit build.

Design Element

Verilog and SystemVerilog's terminology for a primary design unit. These include Verilog modules and primitives, as well as SystemVerilog modules, programs, interfaces, checkers, packages, primitives, and configurations.

Fileset

A fileset is a collection of related files under a given name. A glob-style file pattern is used to discover the files of a given fileset. Filesets are used to group common files together into the blueprint during the planning stage of the build process. Orbit comes with built-in filesets for VHDL, Verilog, and SystemVerilog files. In addition, a target can configure its own custom filesets.

IP Core

An IP core is a resusable block of design logic composed of one or more design units. An IP core is the smallest amount of hardware description code that Orbit considers at a time. Design units that make up an IP core may include VHDL entities or Verilog modules.

Index

The index is the searchable list of projects in a channel.

Local Project

Another name for the current project.

Lock file

A lock file is a file that precisely describes a project and all of its resolved dependencies. The lock file is called "Orbit.lock" and is automatically generated and maintained by Orbit. The lock file should be checked into your version control system for reproducible builds. It is not to be manually edited by the user.

With the lock file, Orbit is able to download missing dependencies, install missing dependencies, and verify the data integrity of installed dependencies.

Manifest

A manifest is a configuration file containing metadata about a project that is recognized by Orbit. Manifest files are named "Orbit.toml". The manifest is intended to be edited by the user. The manifest is used as an input for Orbit to generate the lock file.

Orbit

Orbit is a package manager and build system for VHDL, Verilog, and SystemVerilog. It is the primary topic of this book.

Orbit.lock

See lock file.

Orbit.toml

See manifest.

Package

A package is a collection of source files and a Orbit.toml manifest file which describes the package. A package has a name, version, and UUID, which are used for specifying dependencies between packages.

The package root is the directory where the package's Orbit.toml manifest is located.

The package ID specification, or SPEC, is a string used to uniquely reference a specific version of a package from a specific source.

The source code for a given package is further subdivided into IP cores.

A package is more commonly referred to as a project.

Package Manager

Broadly speaking, a package manager is a program (or collection of related programs) in a software ecosystem that automates the process of obtaining, installing, and upgrading artifacts. Within a programming language ecosystem, a package manager is a developer-focused tool whose primary functionality is to download library artifacts and their dependencies from some central repository; this capability is often combined with the ability to perform software builds (by invoking the language-specific compiler).

Orbit is a package manager within the HDL ecosystem. Orbit downloads your HDL package's dependencies, resolves the order of source files required for a backend build process, and makes distributable packages.

Primary Design Unit

A primary design unit, or design unit, is the highest layer of abstraction to describe hardware constructs in VHDL. These include VHDL entities, packages, configurations, and contexts. An IP core is named by its root primary design unit, or design element if it is described in Verilog or SystemVerilog.

Project

Another (more common) name for a package.

Project ID Specification (SPEC)

The project ID specification, or SPEC, describes the format for identifying and referencing a project. Each project in the user's catalog must have a unique SPEC. The format for the project ID specification is: <name>[+<uuid>][:<version>].

Protocol

A protocol is a process configured by the user that Orbit may use to download a project from the internet.

The default protocol for Orbit assumes the url for a project points to a zip file and uses the curl library to download it to the archive.

SystemVerilog

SystemVerilog is a hardware description and hardware verification language used to model, design, simulate, test, and implement electronic systems.

Target

A target is a process configured by the user that Orbit invokes during the execution stage of the build process. A target is given a name such that it can be identified throughout the system and may be comprised of a command, arguments, and custom filesets.

A target's behavior during the execution stage typically follows three steps:

  1. Accept the blueprint file and environment variables set by Orbit from the planning stage
  2. Perform backend processing on the list of source files using an EDA tool
  3. Save the results of the processing, whether it be a simulation log, bitstream, or synthesis report

Users must configure their own targets; no targets are included by default with Orbit.

VHDL

VHSIC Hardware Design Language (VHDL) is a hardware descrption language to model the behavior of digitally electronic circuits.

Verilog

Verilog is a hardware description language to model electronic systems. The final standard (IEEE 1364-2005) for Verilog merged into the SystemVerilog standard. Today, Verilog has been officially part of the SystemVerilog language.

Working Project

Another name for the current project.