This is work-in-progress, since the utilities and wrappers developed in F4PGA are being redesigned (from shell to Python). Therefore, the terms and definitions shown below are subject to change. It is strongly suggested not to rely on the content below until this note is updated/removed.
An artifact is a result produced by a step when executed. Typically, artifacts are files and logs generated by the tools. However, within f4pga flows, (meta)data can be passed across steps without saving it to disk.
Within f4pga, the content of dependencies and artifacts can be tracked to optimize consecutive executions of the same flow. The cache contains the hash ➚ of the assets.
A Command-Line Interface (CLI) ➚ is an application that processes commands to a computer program in the form of lines of text, typically interactively (through a terminal) or in batch mode (through scripts). Most of the applications used in F4PGA are meant to be used through CLIs. Precisely, f4pga tools provide Python abstractions around the CLIs.
Within f4pga, a project configuration is the set of parameters needed for executing a flow on a given design. The configuration might be provided through a Python API, or through a file using declarative format (such as JSON, YAML, INI,…).
Set of parameters that allow users to select/specify certain physical characteristics of the FPGA device, such as the pins/pads or the logic standard to use.
Within f4pga, a flow definition is the description of which steps are to be executed and which dependencies and artifacts are to be passed along.
A dependency is a prerequisite to execute a f4pga step in a flow. Dependencies might be files (such as HDL sources, constraints, etc.), artifacts from previous steps or tools.
Required HDL sources, constraints and other assets to execute a flow and achieve a task.
FOSS Flows For FPGA (F4PGA), the name of the project as a whole.
A Workgroup under the CHIPS Alliance. See Community.
Python package providing utilities.
The main CLI entrypoint provided by the Python package.
Within f4pga, a flow is a directed graph ➚ of steps, which describes end-to-end sequences to achieve specific tasks. A flow might used as a step within another flow. In such cases, terms subflow or partial flow are used.
A Hardware Description Language (HDL) is a computer language used for describing hardware designs. HDLs in the scope of F4PGA include established (such as Verilog and VHDL ➚) or emerging software-inspired paradigms like Chisel ➚, SpinalHDL ➚, Migen ➚, or Amaranth ➚.
Project model: a generic description of an EDA project, independent of vendor and tools. It reflects multiple design variants, grouping of source files into file sets or linking testbenches to components or subsystems in a design.
Simulation model: HDL sources interpreted as programming languages by simulators, which can generate interpeted or executable artifacts.
The Python Tutorial » Modules ➚ are files containing Python statements and definitions (variables, functions, clases,…). The file name is the module name with the suffix
Within f4pga, user-defined modules allow extending the built-in flows and steps to achieve custom and/or complex tasks.
A set of HDL sources, constraints and other assets used in a hardware design or set of designs.
Relations between f4pga steps, dependencies and artifacts can get complex easily. On top of computing the topological sorting, f4pga checks the existence of the assets, and supports displaying the status.
Within f4pga, a step is a unit of execution, which is characterized by a set of dependencies and a set of artifacts, and it is composable in a flow. Steps might wrap a single or multiple tools.
Within f4pga, flows can have multiple leaf steps, producing different results off some shared previous steps. The target of a flow specifies which steps to execute in a run.
A software application available as a CLI entrypoint, a shared library or an (interpreted) script.
Within f4pga, a tool is a Python abstraction that wraps a software application:
Toolchain ➚ is a generic term used to refer to a set of programming tools used consecutively to perform a complex software development task.