f4pga/docs/glossary.rst

138 lines
6.0 KiB
ReStructuredText
Raw Permalink Normal View History

.. _Glossary:
Glossary
########
.. Warning::
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.
.. glossary::
:sorted:
HDL
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 ➚ <https://IEEE-P1076.gitlab.io/>`__) or
emerging software-inspired paradigms like
`Chisel ➚ <https://chisel.eecs.berkeley.edu/>`_,
`SpinalHDL ➚ <https://spinalhdl.github.io/SpinalDoc-RTD/>`_,
`Migen ➚ <https://m-labs.hk/gateware/migen/>`_, or
:gh:`Amaranth ➚ <amaranth-lang>`.
Tool
* A software application available as a CLI entrypoint, a shared library or an (interpreted) script.
* Within :term:`f4pga <F4PGA>`, a *tool* is a Python abstraction that wraps a software application:
.. image:: _static/images/tool.png
:align: center
Step
Within :term:`f4pga <F4PGA>`, a *step* is a unit of execution, which is characterized by a set of
:term:`dependencies <Dependency>` and a set of :term:`artifacts <Artifact>`,
and it is composable in a :term:`flow <Flow>`.
*Steps* might wrap a single or multiple :term:`tools <Tool>`.
.. image:: _static/images/step.png
:align: center
Flow
Within :term:`f4pga <F4PGA>`, a *flow* is a :wikipedia:`directed graph ➚ <Directed_graph>` of :term:`steps <Step>`, 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.
.. image:: _static/images/flow.png
:align: center
CLI
A :wikipedia:`Command-Line Interface (CLI) ➚ <Command-line_interface>` 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, :term:`f4pga <F4PGA>` :term:`tools <Tool>` provide Python abstractions around the CLIs.
Module
:ref:`The Python Tutorial » Modules ➚ <python:tut-modules>` are files containing Python statements and definitions
(variables, functions, clases,...).
The file name is the module name with the suffix ``.py`` appended.
Within :term:`f4pga <F4PGA>`, user-defined *modules* allow extending the built-in :term:`flows <Flow>` and
:term:`steps <Step>` to achieve custom and/or complex tasks.
Dependency
A *dependency* is a prerequisite to execute a :term:`f4pga <F4PGA>` :term:`step <Step>` in a :term:`flow <Flow>`.
*Dependencies* might be files (such as HDL sources, constraints, etc.), :term:`artifacts <Artifact>` from previous
*steps* or :term:`tools <Tool>`.
Artifact
An *artifact* is a result produced by a :term:`step <Step>` when executed.
Typically, *artifacts* are files and logs generated by the :term:`tools <Tool>`.
However, within :term:`f4pga <F4PGA>` :term:`flows <Flow>`, (meta)data can be passed across *steps* without saving
it to disk.
Target
Within :term:`f4pga <F4PGA>`, :term:`flows <Flow>` 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.
F4PGA
* *Uppercase*:
* FOSS Flows For FPGA (F4PGA), the name of the project as a whole.
* A Workgroup under the CHIPS Alliance.
See :ref:`Community`.
* *Lowercase*:
* Python package providing utilities.
* The main CLI entrypoint provided by the Python package.
Cache
Within :term:`f4pga <F4PGA>`, the content of :term:`dependencies <Dependency>` and :term:`artifacts <Artifact>` can
be tracked to optimize consecutive executions of the same :term:`flow <Flow>`.
The *cache* contains the :wikipedia:`hash ➚ <Hash_function>` of the assets.
Resolution
Relations between :term:`f4pga <F4PGA>` :term:`steps <Step>`, :term:`dependencies <Dependency>` and :term:`artifacts <Artifact>`
can get complex easily.
On top of computing the topological sorting, :term:`f4pga <F4PGA>` checks the existence of the assets, and supports
displaying the status.
Definition
Within :term:`f4pga <F4PGA>`, a :term:`flow <Flow>` *definition* is the description of which :term:`steps <Step>`
are to be executed and which :term:`dependencies <Dependency>` and :term:`artifacts <Artifact>` are to be passed
along.
Constraints
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.
Project
A set of :term:`HDL` sources, constraints and other assets used in a hardware :term:`design <Design>` or set of
designs.
Design
Required :term:`HDL` sources, constraints and other assets to execute a :term:`flow <Flow>` and achieve a task.
Configuration
Within :term:`f4pga <F4PGA>`, a *project configuration* is the set of parameters needed for executing a
:term:`flow <Flow>` on a given :term:`design <Design>`.
The *configuration* might be provided through a Python API, or through a file using declarative format (such as JSON,
YAML, INI,...).
Model
* *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*: :term:`HDL <HDL>` sources interpreted as programming languages by simulators, which can
generate interpeted or executable :term:`artifacts <Artifact>`.
Toolchain
:wikipedia:`Toolchain ➚ <Toolchain>` is a generic term used to refer to a set of programming tools used
consecutively to perform a complex software development task.