<spanid="id1"></span><h1id="glossary--page-root">Glossary<aclass="headerlink"href="#glossary--page-root"title="Link to this heading">¶</a></h1>
<divclass="admonition warning">
<pclass="admonition-title">Warning</p>
<p>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.</p>
</div>
<dlclass="glossary">
<dtid="term-Artifact">Artifact<aclass="headerlink"href="#term-Artifact"title="Link to this term">¶</a></dt><dd><p>An <em>artifact</em> is a result produced by a <aclass="reference internal"href="#term-Step"><spanclass="xref std std-term">step</span></a> when executed.
Typically, <em>artifacts</em> are files and logs generated by the <aclass="reference internal"href="#term-Tool"><spanclass="xref std std-term">tools</span></a>.
However, within <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a><aclass="reference internal"href="#term-Flow"><spanclass="xref std std-term">flows</span></a>, (meta)data can be passed across <em>steps</em> without saving
it to disk.</p>
</dd>
<dtid="term-Cache">Cache<aclass="headerlink"href="#term-Cache"title="Link to this term">¶</a></dt><dd><p>Within <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a>, the content of <aclass="reference internal"href="#term-Dependency"><spanclass="xref std std-term">dependencies</span></a> and <aclass="reference internal"href="#term-Artifact"><spanclass="xref std std-term">artifacts</span></a> can
be tracked to optimize consecutive executions of the same <aclass="reference internal"href="#term-Flow"><spanclass="xref std std-term">flow</span></a>.
The <em>cache</em> contains the <aclass="extlink-wikipedia reference external"href="https://en.wikipedia.org/wiki/Hash_function">hash ➚</a> of the assets.</p>
</dd>
<dtid="term-CLI">CLI<aclass="headerlink"href="#term-CLI"title="Link to this term">¶</a></dt><dd><p>A <aclass="extlink-wikipedia reference external"href="https://en.wikipedia.org/wiki/Command-line_interface">Command-Line Interface (CLI) ➚</a> 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, <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a><aclass="reference internal"href="#term-Tool"><spanclass="xref std std-term">tools</span></a> provide Python abstractions around the CLIs.</p>
</dd>
<dtid="term-Configuration">Configuration<aclass="headerlink"href="#term-Configuration"title="Link to this term">¶</a></dt><dd><p>Within <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a>, a <em>project configuration</em> is the set of parameters needed for executing a
<aclass="reference internal"href="#term-Flow"><spanclass="xref std std-term">flow</span></a> on a given <aclass="reference internal"href="#term-Design"><spanclass="xref std std-term">design</span></a>.
The <em>configuration</em> might be provided through a Python API, or through a file using declarative format (such as JSON,
YAML, INI,…).</p>
</dd>
<dtid="term-Constraints">Constraints<aclass="headerlink"href="#term-Constraints"title="Link to this term">¶</a></dt><dd><p>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.</p>
</dd>
<dtid="term-Definition">Definition<aclass="headerlink"href="#term-Definition"title="Link to this term">¶</a></dt><dd><p>Within <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a>, a <aclass="reference internal"href="#term-Flow"><spanclass="xref std std-term">flow</span></a><em>definition</em> is the description of which <aclass="reference internal"href="#term-Step"><spanclass="xref std std-term">steps</span></a>
are to be executed and which <aclass="reference internal"href="#term-Dependency"><spanclass="xref std std-term">dependencies</span></a> and <aclass="reference internal"href="#term-Artifact"><spanclass="xref std std-term">artifacts</span></a> are to be passed
along.</p>
</dd>
<dtid="term-Dependency">Dependency<aclass="headerlink"href="#term-Dependency"title="Link to this term">¶</a></dt><dd><p>A <em>dependency</em> is a prerequisite to execute a <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a><aclass="reference internal"href="#term-Step"><spanclass="xref std std-term">step</span></a> in a <aclass="reference internal"href="#term-Flow"><spanclass="xref std std-term">flow</span></a>.
<em>Dependencies</em> might be files (such as HDL sources, constraints, etc.), <aclass="reference internal"href="#term-Artifact"><spanclass="xref std std-term">artifacts</span></a> from previous
<em>steps</em> or <aclass="reference internal"href="#term-Tool"><spanclass="xref std std-term">tools</span></a>.</p>
</dd>
<dtid="term-Design">Design<aclass="headerlink"href="#term-Design"title="Link to this term">¶</a></dt><dd><p>Required <aclass="reference internal"href="#term-HDL"><spanclass="xref std std-term">HDL</span></a> sources, constraints and other assets to execute a <aclass="reference internal"href="#term-Flow"><spanclass="xref std std-term">flow</span></a> and achieve a task.</p>
</dd>
<dtid="term-F4PGA">F4PGA<aclass="headerlink"href="#term-F4PGA"title="Link to this term">¶</a></dt><dd><ulclass="simple">
<li><p><em>Uppercase</em>:</p>
<ul>
<li><p>FOSS Flows For FPGA (F4PGA), the name of the project as a whole.</p></li>
<li><p>A Workgroup under the CHIPS Alliance.
See <aclass="reference internal"href="community.html#community"><spanclass="std std-ref">Community</span></a>.</p></li>
<li><p>The main CLI entrypoint provided by the Python package.</p></li>
</ul>
</li>
</ul>
</dd>
<dtid="term-Flow">Flow<aclass="headerlink"href="#term-Flow"title="Link to this term">¶</a></dt><dd><p>Within <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a>, a <em>flow</em> is a <aclass="extlink-wikipedia reference external"href="https://en.wikipedia.org/wiki/Directed_graph">directed graph ➚</a> of <aclass="reference internal"href="#term-Step"><spanclass="xref std std-term">steps</span></a>, which
describes end-to-end sequences to achieve specific tasks.
A <em>flow</em> might used as a step within another <em>flow</em>.
In such cases, terms <em>subflow</em> or <em>partial flow</em> are used.</p>
<dtid="term-HDL">HDL<aclass="headerlink"href="#term-HDL"title="Link to this term">¶</a></dt><dd><p>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 <aclass="reference external"href="https://IEEE-P1076.gitlab.io/">VHDL ➚</a>) or
<dtid="term-Model">Model<aclass="headerlink"href="#term-Model"title="Link to this term">¶</a></dt><dd><ulclass="simple">
<li><p><em>Project model</em>: 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.</p></li>
<li><p><em>Simulation model</em>: <aclass="reference internal"href="#term-HDL"><spanclass="xref std std-term">HDL</span></a> sources interpreted as programming languages by simulators, which can
generate interpeted or executable <aclass="reference internal"href="#term-Artifact"><spanclass="xref std std-term">artifacts</span></a>.</p></li>
The file name is the module name with the suffix <codeclass="docutils literal notranslate"><spanclass="pre">.py</span></code> appended.</p>
<p>Within <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a>, user-defined <em>modules</em> allow extending the built-in <aclass="reference internal"href="#term-Flow"><spanclass="xref std std-term">flows</span></a> and
<aclass="reference internal"href="#term-Step"><spanclass="xref std std-term">steps</span></a> to achieve custom and/or complex tasks.</p>
</dd>
<dtid="term-Project">Project<aclass="headerlink"href="#term-Project"title="Link to this term">¶</a></dt><dd><p>A set of <aclass="reference internal"href="#term-HDL"><spanclass="xref std std-term">HDL</span></a> sources, constraints and other assets used in a hardware <aclass="reference internal"href="#term-Design"><spanclass="xref std std-term">design</span></a> or set of
designs.</p>
</dd>
<dtid="term-Resolution">Resolution<aclass="headerlink"href="#term-Resolution"title="Link to this term">¶</a></dt><dd><p>Relations between <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a><aclass="reference internal"href="#term-Step"><spanclass="xref std std-term">steps</span></a>, <aclass="reference internal"href="#term-Dependency"><spanclass="xref std std-term">dependencies</span></a> and <aclass="reference internal"href="#term-Artifact"><spanclass="xref std std-term">artifacts</span></a>
can get complex easily.
On top of computing the topological sorting, <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a> checks the existence of the assets, and supports
displaying the status.</p>
</dd>
<dtid="term-Step">Step<aclass="headerlink"href="#term-Step"title="Link to this term">¶</a></dt><dd><p>Within <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a>, a <em>step</em> is a unit of execution, which is characterized by a set of
<aclass="reference internal"href="#term-Dependency"><spanclass="xref std std-term">dependencies</span></a> and a set of <aclass="reference internal"href="#term-Artifact"><spanclass="xref std std-term">artifacts</span></a>,
and it is composable in a <aclass="reference internal"href="#term-Flow"><spanclass="xref std std-term">flow</span></a>.
<em>Steps</em> might wrap a single or multiple <aclass="reference internal"href="#term-Tool"><spanclass="xref std std-term">tools</span></a>.</p>
<dtid="term-Target">Target<aclass="headerlink"href="#term-Target"title="Link to this term">¶</a></dt><dd><p>Within <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a>, <aclass="reference internal"href="#term-Flow"><spanclass="xref std std-term">flows</span></a> can have multiple leaf <em>steps</em>, producing different results off some
shared previous <em>steps</em>.
The <em>target</em> of a <em>flow</em> specifies which <em>steps</em> to execute in a run.</p>
</dd>
<dtid="term-Tool">Tool<aclass="headerlink"href="#term-Tool"title="Link to this term">¶</a></dt><dd><ulclass="simple">
<li><p>A software application available as a CLI entrypoint, a shared library or an (interpreted) script.</p></li>
<li><p>Within <aclass="reference internal"href="#term-F4PGA"><spanclass="xref std std-term">f4pga</span></a>, a <em>tool</em> is a Python abstraction that wraps a software application:</p></li>
<dtid="term-Toolchain">Toolchain<aclass="headerlink"href="#term-Toolchain"title="Link to this term">¶</a></dt><dd><p><aclass="extlink-wikipedia reference external"href="https://en.wikipedia.org/wiki/Toolchain">Toolchain ➚</a> is a generic term used to refer to a set of programming tools used
consecutively to perform a complex software development task.</p>