2016-11-12 22:33:28 +01:00
yosys – Yosys Open SYnthesis Suite
2013-01-05 11:13:26 +01:00
===================================
2013-02-28 14:17:57 +01:00
This is a framework for RTL synthesis tools. It currently has
extensive Verilog-2005 support and provides a basic set of
synthesis algorithms for various application domains.
2013-01-05 11:13:26 +01:00
2013-02-28 14:17:57 +01:00
Yosys can be adapted to perform any synthesis job by combining
the existing passes (algorithms) using synthesis scripts and
2013-03-16 21:20:38 +01:00
adding additional passes as needed by extending the yosys C++
code base.
2013-01-05 11:13:26 +01:00
Yosys is free software licensed under the ISC license (a GPL
2013-03-16 21:20:38 +01:00
compatible license that is similar in terms to the MIT license
2013-01-05 11:13:26 +01:00
or the 2-clause BSD license).
2024-10-17 00:11:10 +02:00
Third-party software distributed alongside this software
is licensed under compatible licenses.
Please refer to `abc` and `libs` subdirectories for their license terms.
2013-01-05 11:13:26 +01:00
2024-12-04 21:21:13 +01:00
2019-03-01 23:29:17 +01:00
Web Site and Other Resources
============================
2013-07-21 15:04:37 +02:00
More information and documentation can be found on the Yosys web site:
2021-06-09 12:16:56 +02:00
- https://yosyshq.net/yosys/
2019-03-01 23:29:17 +01:00
2025-07-31 08:39:27 +02:00
If you have any Yosys-related questions, please post them on the Discourse group:
- https://yosyshq.discourse.group
2024-12-04 21:21:13 +01:00
Documentation from this repository is automatically built and available on Read
the Docs:
- https://yosyshq.readthedocs.io/projects/yosys
Users interested in formal verification might want to use the formal
verification front-end for Yosys, SBY:
- https://yosyshq.readthedocs.io/projects/sby/
- https://github.com/YosysHQ/sby
2019-03-01 23:29:17 +01:00
2025-07-31 08:39:27 +02:00
The Yosys blog has news and articles from users:
- https://blog.yosyshq.com
2013-07-21 15:04:37 +02:00
2022-01-04 15:44:37 +01:00
Installation
============
Yosys is part of the [Tabby CAD Suite ](https://www.yosyshq.com/tabby-cad-datasheet ) and the [OSS CAD Suite ](https://github.com/YosysHQ/oss-cad-suite-build )! The easiest way to use yosys is to install the binary software suite, which contains all required dependencies and related tools.
* [Contact YosysHQ ](https://www.yosyshq.com/contact ) for a [Tabby CAD Suite ](https://www.yosyshq.com/tabby-cad-datasheet ) Evaluation License and download link
* OR go to https://github.com/YosysHQ/oss-cad-suite-build/releases to download the free OSS CAD Suite
* Follow the [Install Instructions on GitHub ](https://github.com/YosysHQ/oss-cad-suite-build#installation )
Make sure to get a Tabby CAD Suite Evaluation License if you need features such as industry-grade SystemVerilog and VHDL parsers!
For more information about the difference between Tabby CAD Suite and the OSS CAD Suite, please visit https://www.yosyshq.com/tabby-cad-datasheet
2022-01-17 12:49:32 +01:00
Many Linux distributions also provide Yosys binaries, some more up to date than others. Check with your package manager!
2022-01-04 15:44:37 +01:00
2024-12-04 21:21:13 +01:00
2022-01-04 15:44:37 +01:00
Building from Source
====================
2013-01-06 14:40:15 +01:00
2024-12-04 21:21:13 +01:00
For more details, and instructions for other platforms, check [building from
source](https://yosyshq.readthedocs.io/projects/yosys/en/latest/getting_started/installation.html#building-from-source)
on Read the Docs.
When cloning Yosys, some required libraries are included as git submodules. Make
sure to call e.g.
$ git clone --recurse-submodules https://github.com/YosysHQ/yosys.git
or
$ git clone https://github.com/YosysHQ/yosys.git
$ cd yosys
$ git submodule update --init --recursive
2026-06-02 05:45:00 +02:00
A C++ compiler with C++20 support is required as well as some standard tools
2026-06-03 06:40:17 +02:00
such as GNU Flex, GNU Bison (>=3.8), CMake (>=3.27), Make (or other CMake
generator such as Ninja), and Python (>=3.11). Some additional tools: readline,
libffi, Tcl and zlib; will be used if available but are optional. Graphviz and
Xdot are used by the `show` command to display schematics.
2017-02-07 15:12:31 +01:00
2025-07-09 14:34:03 +02:00
For example on Ubuntu Linux 22.04 LTS the following commands will install all
2014-09-02 03:52:46 +02:00
prerequisites for building yosys:
2025-11-04 08:35:07 +01:00
$ sudo apt-get install gawk git make python3 lld bison clang flex \
2025-11-01 08:11:36 +01:00
libffi-dev libfl-dev libreadline-dev pkg-config tcl-dev zlib1g-dev \
2025-11-01 04:19:38 +01:00
graphviz xdot
2014-04-18 10:19:46 +02:00
2026-06-02 05:45:00 +02:00
**NOTE**: By default, Ubuntu 22.04 LTS is limited to CMake 3.22 via `apt` . To
install a newer version and meet the minimum required for building Yosys, use
`sudo snap install cmake --classic` .
2013-03-18 19:26:35 +01:00
2026-06-02 05:45:00 +02:00
CMake is used for build configuration, and requires a separate build directory:
2013-03-18 19:26:35 +01:00
2026-06-02 05:45:00 +02:00
$ cmake -B build .
2024-10-22 12:45:06 +02:00
2026-06-03 06:40:17 +02:00
Once generated, available build variables can be inspected and modified with
`ccmake` or opening the generated `build/CMakeCache.txt` file:
2024-10-22 12:45:06 +02:00
2026-06-02 05:45:00 +02:00
$ ccmake build #..or..
$ vi build/CMakeCache.txt
2013-01-06 14:40:15 +01:00
2026-06-03 07:30:38 +02:00
When setting one-off variables, CMake provides the `-D <var>=<value>` command
line option. For example, disabling zlib support:
2026-06-03 06:40:17 +02:00
$ cmake -B build . -DYOSYS_WITHOUT_ZLIB=ON
For a more persistent configuration, we recommend creating and using a
2026-06-03 07:30:38 +02:00
`CMakeUserPresets.json` file in the root `yosys` directory. Below is an example
file which enables ccache and sets the default compiler to clang when calling
`cmake --preset clang` :
2026-06-03 06:40:17 +02:00
```json
{
"version": 1,
"configurePresets": [
{
2026-06-03 07:30:38 +02:00
"name": "default",
2026-06-03 06:40:17 +02:00
"binaryDir": "build",
"generator": "Unix Makefiles",
"cacheVariables": {
"CMAKE_C_COMPILER": "clang",
2026-06-03 07:30:38 +02:00
"CMAKE_CXX_COMPILER": "clang++",
"YOSYS_COMPILER_LAUNCHER": "ccache"
2026-06-03 06:40:17 +02:00
}
}
]
}
```
Once generated, the build system can be run as follows:
$ cmake --build build #..or..
$ cd build
$ cmake --build .
To quickly install Yosys with the default settings:
2026-06-02 05:45:00 +02:00
$ cmake -B build . -DCMAKE_BUILD_TYPE=Release
$ cmake --build build --config Release --parallel $(nproc)
$ sudo cmake --install build --strip
Tests are located in the tests subdirectory and can be executed using the `test`
target. Note that you need gawk, a recent version of iverilog, and gtest.
Execute tests via:
$ cmake --build build --target test --parallel $(nproc)
2020-04-24 20:07:13 +02:00
2024-12-04 21:21:13 +01:00
2017-02-07 15:12:31 +01:00
Getting Started
===============
2013-03-16 21:20:38 +01:00
Yosys can be used with the interactive command shell, with
synthesis scripts or with command line arguments. Let's perform
2013-01-06 14:40:15 +01:00
a simple synthesis job using the interactive command shell:
2026-06-02 05:45:00 +02:00
$ ./build/yosys
2013-01-06 14:40:15 +01:00
yosys>
2016-11-19 17:34:13 +01:00
the command ``help`` can be used to print a list of all available
commands and ``help < command > `` to print details on the specified command:
2013-02-28 14:17:57 +01:00
yosys> help help
2019-07-29 10:40:30 +02:00
reading and elaborating the design using the Verilog frontend:
2013-01-06 14:40:15 +01:00
2019-07-29 10:40:30 +02:00
yosys> read -sv tests/simple/fiedler-cooley.v
yosys> hierarchy -top up3down5
2013-01-06 14:40:15 +01:00
2023-07-10 12:54:02 +02:00
writing the design to the console in the RTLIL format used by Yosys
internally:
2013-01-06 14:40:15 +01:00
2023-07-10 12:54:02 +02:00
yosys> write_rtlil
2013-01-06 14:40:15 +01:00
2016-11-19 17:34:13 +01:00
convert processes (``always`` blocks) to netlist elements and perform
2013-01-06 14:40:15 +01:00
some simple optimizations:
yosys> proc; opt
2016-11-19 17:34:13 +01:00
display design netlist using ``xdot``:
2013-01-06 14:40:15 +01:00
2013-04-27 14:41:46 +02:00
yosys> show
2016-11-19 17:34:13 +01:00
the same thing using ``gv`` as postscript viewer:
2013-04-27 14:41:46 +02:00
yosys> show -format ps -viewer gv
2013-01-06 14:40:15 +01:00
translating netlist to gate logic and perform some simple optimizations:
yosys> techmap; opt
2015-08-14 22:23:01 +02:00
write design netlist to a new Verilog file:
2013-01-06 14:40:15 +01:00
yosys> write_verilog synth.v
or using a simple synthesis script:
$ cat synth.ys
2019-07-29 10:40:30 +02:00
read -sv tests/simple/fiedler-cooley.v
hierarchy -top up3down5
proc; opt; techmap; opt
2013-01-06 14:40:15 +01:00
write_verilog synth.v
2013-01-16 17:32:11 +01:00
$ ./yosys synth.ys
2013-01-06 14:40:15 +01:00
2013-12-08 15:42:27 +01:00
If ABC is enabled in the Yosys build configuration and a cell library is given
2016-11-19 19:51:50 +01:00
in the liberty file ``mycells.lib``, the following synthesis script will
synthesize for the given cell library:
2013-01-06 14:40:15 +01:00
2019-07-29 10:40:30 +02:00
# read design
read -sv tests/simple/fiedler-cooley.v
hierarchy -top up3down5
2013-01-06 14:40:15 +01:00
# the high-level stuff
2019-07-29 10:40:30 +02:00
proc; fsm; opt; memory; opt
2013-01-06 14:40:15 +01:00
# mapping to internal cell library
2013-02-28 14:17:57 +01:00
techmap; opt
2013-01-06 14:40:15 +01:00
# mapping flip-flops to mycells.lib
dfflibmap -liberty mycells.lib
# mapping logic to mycells.lib
abc -liberty mycells.lib
# cleanup
2014-01-29 11:11:10 +01:00
clean
2013-01-06 14:40:15 +01:00
2013-10-31 11:15:00 +01:00
If you do not have a liberty file but want to test this synthesis script,
2019-07-29 10:40:30 +02:00
you can use the file ``examples/cmos/cmos_cells.lib`` from the yosys sources
as simple example.
2013-10-31 11:15:00 +01:00
2015-11-12 13:15:19 +01:00
Liberty file downloads for and information about free and open ASIC standard
cell libraries can be found here:
2014-06-28 12:11:42 +02:00
2016-11-12 22:33:28 +01:00
- http://www.vlsitechnology.org/html/libraries.html
- http://www.vlsitechnology.org/synopsys/vsclib013.lib
2014-06-28 12:11:42 +02:00
2016-11-19 19:51:50 +01:00
The command ``synth`` provides a good default synthesis script (see
2019-07-29 10:40:30 +02:00
``help synth``):
2014-09-14 16:09:06 +02:00
2019-07-29 10:40:30 +02:00
read -sv tests/simple/fiedler-cooley.v
synth -top up3down5
2014-09-14 16:09:06 +02:00
2019-07-29 10:40:30 +02:00
# mapping to target cells
2014-09-14 16:09:06 +02:00
dfflibmap -liberty mycells.lib
abc -liberty mycells.lib
clean
2019-07-29 10:40:30 +02:00
The command ``prep`` provides a good default word-level synthesis script, as
used in SMT-based formal verification.
2013-01-06 14:40:15 +01:00
2024-11-05 01:42:16 +01:00
Additional information
======================
The ``read_verilog`` command, used by default when calling ``read`` with Verilog
2024-11-08 16:30:06 +01:00
source input, does not perform syntax checking. You should instead lint your
source with another tool such as
2024-11-05 01:42:16 +01:00
[Verilator ](https://www.veripool.org/verilator/ ) first, e.g. by calling
``verilator --lint-only``.
2016-04-03 14:26:46 +02:00
Building the documentation
==========================
2016-05-09 12:43:49 +02:00
Note that there is no need to build the manual if you just want to read it.
2022-12-07 17:51:07 +01:00
Simply visit https://yosys.readthedocs.io/en/latest/ instead.
2025-12-03 01:48:57 +01:00
If you're offline, you can read the sources, replacing `.../en/latest`
with `docs/source` .
2016-05-09 12:43:49 +02:00
2022-12-07 17:51:07 +01:00
In addition to those packages listed above for building Yosys from source, the
2025-07-31 08:39:27 +02:00
following are used for building the website:
2022-11-15 12:55:22 +01:00
2023-08-02 23:20:24 +02:00
$ sudo apt install pdf2svg faketime
2022-11-15 12:55:22 +01:00
2024-08-23 02:53:38 +02:00
Or for MacOS, using homebrew:
2026-06-02 05:45:00 +02:00
$ brew install pdf2svg libfaketime
2024-08-23 02:53:38 +02:00
2022-11-15 12:55:22 +01:00
PDFLaTeX, included with most LaTeX distributions, is also needed during the
2023-08-02 23:20:24 +02:00
build process for the website. Or, run the following:
2023-08-28 00:09:34 +02:00
$ sudo apt install texlive-latex-base texlive-latex-extra latexmk
2022-11-15 12:55:22 +01:00
2024-09-03 09:15:12 +02:00
Or for MacOS, using homebrew:
2026-06-02 05:45:00 +02:00
$ brew install basictex
$ sudo tlmgr update --self
$ sudo tlmgr install collection-latexextra latexmk tex-gyre
2024-09-03 09:15:12 +02:00
2022-11-15 12:55:22 +01:00
The Python package, Sphinx, is needed along with those listed in
`docs/source/requirements.txt` :
$ pip install -U sphinx -r docs/source/requirements.txt
2026-06-02 05:45:00 +02:00
DOCS (e.g.)
$ cmake --build build --target docs-html --parallel
This will build/rebuild yosys as necessary before generating the website
documentation from the yosys help commands. To build for pdf instead of html,
use the `docs-latexpdf` target.