Components
==========
Yosys
-----
`Yosys `_ is an open-source RTL synthesis
framework. It supports Verilog and SystemVerilog (via plugins), and can
target a wide range of FPGAs and ASICs through its standard cell technology
mapping flow.
The bundled ``yosys`` binary is built from the latest tagged upstream release
at the time the yosys-bin CI run executes.
Key binaries installed to ``bin/``::
yosys – main synthesis tool
yosys-abc – ABC logic synthesis engine (called by Yosys internally)
yosys-config – build-time configuration query tool
Standard cell libraries and scripts are installed under
``share/yosys/``.
pyosys — Python Bindings
-------------------------
``pyosys`` exposes the Yosys C++ API to Python using
`pybind11 `_ bindings that are compiled
against the Yosys source tree.
yosys-bin provides separate ``.so`` files for each supported Python version
(3.10 – 3.13) so a single installation works with multiple interpreter
versions without recompilation::
pyosys/libyosys.cpython-310-x86_64-linux-gnu.so
pyosys/libyosys.cpython-311-x86_64-linux-gnu.so
pyosys/libyosys.cpython-312-x86_64-linux-gnu.so
pyosys/libyosys.cpython-313-x86_64-linux-gnu.so
The correct variant is selected automatically by the Python import machinery.
Basic usage::
import pyosys
d = pyosys.Design()
d.run_pass("read_verilog -sv my_design.sv")
d.run_pass("synth -top my_top")
d.run_pass("write_json netlist.json")
yosys-slang Plugin
------------------
`yosys-slang `_ is a Yosys frontend
plugin that uses the `slang `_ SystemVerilog compiler
library to elaborate SystemVerilog designs. It provides the ``read_slang``
Yosys command, which supports a broader subset of the SystemVerilog standard
than the built-in ``read_verilog -sv`` parser.
The plugin is installed as::
share/yosys/plugins/slang.so
pyosys/share/yosys/plugins/slang.so (for pip-installed paths)
Loading the plugin::
# On the command line
yosys -m slang
# Inside a .ys script
plugin -i slang
read_slang top.sv
synth -top top
write_json netlist.json
The plugin is built from source during the yosys-bin CI run. It statically
links ``slang`` and ``{fmt}`` so it has no additional runtime dependencies.
Boolector SMT Solver
--------------------
`Boolector `_ is an SMT solver for the theories
of fixed-size bit-vectors, arrays, and uninterpreted functions. It is used by
Yosys formal verification flows to discharge proof obligations produced by
``write_smt2``.
The ``boolector`` binary is installed to ``bin/boolector``.
Typical usage with SymbiYosys / smtbmc::
yosys -p "read_verilog -formal my_design.sv; \
prep -top my_top; \
write_smt2 -wires model.smt2"
smtbmc --solver boolector model.smt2
Or use the DV Flow :ref:`FormalPrepare ` task to drive
the full flow from a ``flow.dv`` description.
sby — SymbiYosys
----------------
`SymbiYosys (sby) `_ is a front-end driver for
Yosys-based formal hardware verification flows. It reads a ``.sby``
configuration file that describes the design sources, the verification engine
to use (e.g. ``smtbmc``, ``aiger``, ``abc``), and the properties to check
(BMC, k-induction, cover), then orchestrates Yosys and the chosen solver.
Installed files::
bin/sby
share/yosys/python3/sby_*.py – sby support library
Example ``.sby`` file::
[options]
mode bmc
depth 20
[engines]
smtbmc boolector
[script]
read -formal my_design.sv
prep -top my_top
[files]
my_design.sv
Run with::
sby -f my_design.sby
mcy — Mutation Cover with Yosys
--------------------------------
`mcy `_ measures the quality of a formal
verification test suite by injecting mutations into a design and checking how
many are caught by the existing properties. It produces a coverage report
showing which parts of the design are exercised by the formal tests.
Installed files::
bin/mcy
bin/mcy-dash
share/mcy/scripts/ – helper scripts used internally by mcy
share/mcy/dash/ – web dashboard assets for mcy-dash
Basic usage::
mcy init # create mcy.cfg template
mcy run -j4 # run mutation checks with 4 parallel workers
mcy dash # start web dashboard on http://localhost:5000
eqy — Equivalence Check with Yosys
------------------------------------
`eqy `_ performs combinational and sequential
equivalence checking between two netlists using Yosys. It is useful for
verifying that synthesis, retiming, or other transformations preserve circuit
behaviour.
Installed files::
bin/eqy
share/yosys/python3/eqy_job.py
share/yosys/plugins/eqy_combine.so
share/yosys/plugins/eqy_partition.so
share/yosys/plugins/eqy_recode.so
Example ``.eqy`` file::
[gold]
read -sv gold.sv
prep -top top
[gate]
read -sv gate.sv
prep -top top
[strategy simple]
use sat
depth 10
Run with::
eqy -f my_check.eqy
dv-flow-libyosys
----------------
``dv-flow-libyosys`` (Python package ``dv_flow.libyosys``) integrates Yosys
with the `DV Flow `_ task framework. It
provides ready-made synthesis and formal-preparation tasks that can be wired
into a larger EDA pipeline described in a ``flow.dv`` file.
See :doc:`dvflow` for the full task reference.