Glossary

Argument

An argument is a string/value proceding a call to a software program on the command-line that will be passed to that program.

Available

Available refers to a level at which the block is seen in the catalog. A block has available status (A) when the block is within a vendor that is linked to the active workspace. Blocks cannot be used nor opened from this level.

Backend Tool

In this context, a backend tool is a software program capable of performing a specific task on HDL files. Some examples are: Quartus, Vivado, and GHDL.

Block

A legoHDL block is a project that contains a special Block.cfg metadata file at its root folder. These are the "packages" that this package manager manages.

Since a block contains the HDL code, blocks therefore contain HDL units.

Block.cfg

The Block.cfg file is a metadata configuration file that follows similiar syntax to that of an ini file. legoHDL uses this file to mark that folder as a block.

Block Identifier

A block identifier is a unique case-insensitive title for a block composed of 3 sections: vendor, library, and name. An identifier's sections are separated by a dot (.). The vendor section is optional and can be left blank.

Blueprint

A blueprint is the outputted plain text file when a block is exported for building. It mainly consists of labels and their respective file paths. A blueprint is the "glue" between legoHDL and any plugin.

This file is always created in the build/ directory found at the root of the current block.

Catalog

The catalog is the list of searchable blocks within the current active workspace. Blocks can exist at 3 levels within the catalog: downloaded (D), installed (I), and/or available (A).

Development Tool

A development tool is a software program specialized for a particular language that automates specific tasks to developing new projects for that language.

Downloaded

Downloaded refers to a level at which the block is seen in the catalog. A block has download status (D) if the block is within the active workspace's local path. Blocks that are downloaded are said to be "developing" or "in-development".

Blocks can be used from this level within other blocks only if the multi-develop setting is enabled.

Flag

A flag is a special type of argument that controls or modifies how the specified command will function.

Full version

A full version contains all 3 parts of a semantic version (version v*.*.*). Also related: partial version.

Hardware Description Languages (HDLs)

Hardware Description Languages are a type of specialized computer language to describe electronic circuits. Two popular HDLs are VHDL and verilog.

Installed

Installed refers to a level at which the block is seen in the catalog. A block has install status (I) when the block is within the active workspace's cache.

Installed blocks are considered stable and are able to be used within blocks in-development.

Intellectual Property (IP)

Intellectual Property is a created design. The HDL designs within legoHDL blocks can be considered IP.

Label

A label is a unique name given to a group of files defined by their file extension. Defined labels are written to the blueprint file. Every label is evaluated as all upper-case and will have an @ symbol preceding it.

Special default labels are:

  • VHDL-SRC, VHDL-SIM, VHDL-LIB, VHDL-SRC-TOP, VHDL-SIM-TOP for VHDL files
  • VLOG-SRC, VLOG-SIM, VLOG-LIB, VLOG-SRC-TOP, VLOG-SIM-TOP for Verilog files

legohdl.cfg

The legohdl.cfg file contains the system-wide configuration settings for legoHDL. Its file format is based off of INI configuration files.

Library

A library is the namespace that encapsulates blocks. When using VHDL entities or packages, this is also those respective library.

Package Manager

A package manager is a software program used to automate the finding, installing, and uninstalling of modular groups of related files ("packages").

The "packages" this package manager maintains are called blocks.

Partial version

A partial version consists of either 1 or 2 of the most significant parts of a semantic version (version v* or version v*.*). Also related: full version.

Placeholder

A placeholder is a temporary word that will be replaced by a value that cannot be determined until run-time. legoHDL finds all placeholders when creating a file and replaces them with their determined value.

All placeholders are enclosed with % symbols, except the TEMPLATE placeholder.

Plugin

A plugin is a custom program to build the current block's design. It can consist of an executable or script written in any language to call any desired tool to perform any task such as linting, simulation, synthesis, generating a bitstream, or programming a bitfile to a target FPGA. A plugin commonly either wraps or directly is a backend tool.

In general, a plugin should read the blueprint file to collect necessary data regarding what files are used for the current design. It is up to the plugin's developer to do what they want with the blueprint's collected information.

Profile

A profile is a folder/repository that is a combination of settings defined in a legohdl.cfg file, a template defined in a template/ folder, and/or a set of plugins defined in a plugins/ folder. Profiles are used to share or save particular legoHDL configurations.

Project

A project is a folder containing HDL code and optionally any supporting files.

Semantic Versioning

Semantic Versioning is a popular versioning scheme consisting of 3 different levels of numerical significance: major, minor, and patch.

Shortcutting

Shorcutting refers to only giving legoHDL partial information about a block's identifier, given that it can logically deduct the rest of the identifier based on what identifier's exist.

Unit

A unit is a "piece of hardware" described in HDL. This is called an entity in VHDL and a module in Verilog.

Vendor

A vendor is the namespace that encapsulates libraries. Furthermore, a vendor can be a repository that tracks all of the blocks belonging to it by storing their metadata.

A block does not have to belong to a vendor. If no vendor is specified for a block, then by default it belongs to the null vendor.

Verilog

Verilog is a hardware description language used to model and structure digital circuits. It is one of the major languages legoHDL supports.

VHDL

VHSIC Hardware Description Language, or VHDL, is a hardware description langauge used to model and structure digital circuits. It is one of the major languages legoHDL supports.

Workflow

A workflow is a developer's particular needs and actions required on HDL source files. The typical HDL workflow consists of linting, synthesis, simulation, implementation, generating a bitstream, and programming a bitfile to a target FPGA.

Developers define their own workflow by writing plugins based on their available tools, environments, and needs.

Workspaces

Workspaces define what vendors to use and the local path to search under for blocks that are downloaded/under-development. Each workspace has its own cache for block installations, but can share vendors.