| .. _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. |