YosysHQ/yosys
GitHub: YosysHQ/yosys
开源 RTL 综合框架,支持 Verilog-2005,提供可扩展的综合算法与形式验证集成能力。
Stars: 4309 | Forks: 1045
# yosys – Yosys Open SYnthesis Suite
这是一个 RTL 综合工具框架。目前它提供了
广泛的 Verilog-2005 支持,并为各种应用领域提供了
一套基础的综合算法。
通过使用综合脚本组合现有的 passes(算法),
并根据需要通过扩展 yosys C++ 代码库添加额外的 passes,
Yosys 可以适应执行任何综合任务。
Yosys 是根据 ISC 许可证授权的自由软件(这是一个与 GPL
兼容的许可证,其条款类似于 MIT 许可证
或 2-clause BSD 许可证)。
随本软件分发的第三方软件
均在兼容许可证下授权。
请参阅 `abc` 和 `libs` 子目录以获取其许可条款。
# 网站和其他资源
更多信息可以在 Yosys 网站上找到:
- https://yosyshq.net/yosys/
如果您有任何与 Yosys 相关的问题,请在 Discourse 小组中发布:
- https://yosyshq.discourse.group
此存储库中的文档会自动构建并在 Read
the Docs 上提供:
- https://yosyshq.readthedocs.io/projects/yosys
对形式验证感兴趣的用户可能需要使用 Yosys 的形式验证前端 SBY:
- https://yosyshq.readthedocs.io/projects/sby/
- https://github.com/YosysHQ/sby
Yosys 博客包含来自用户的新闻和文章:
- https://blog.yosyshq.com
# 安装
Yosys 是 [Tabby CAD Suite](https://www.yosyshq.com/tabby-cad-datasheet) 和 [OSS CAD Suite](https://github.com/YosysHQ/oss-cad-suite-build) 的一部分!使用 yosys 最简单的方法是安装二进制软件套件,其中包含所有必需的依赖项和相关工具。
* [联系 YosysHQ](https://www.yosyshq.com/contact) 获取 [Tabby CAD Suite](https://www.yosyshq.com/tabby-cad-datasheet) 评估许可证和下载链接
* 或者访问 https://github.com/YosysHQ/oss-cad-suite-build/releases 下载免费的 OSS CAD Suite
* 遵循 [GitHub 上的安装说明](https://github.com/YosysHQ/oss-cad-suite-build#installation)
如果您需要工业级 SystemVerilog 和 VHDL 解析器等功能,请务必获取 Tabby CAD Suite 评估许可证!
有关 Tabby CAD Suite 和 OSS CAD Suite 之间区别的更多信息,请访问 https://www.yosyshq.com/tabby-cad-datasheet
许多 Linux 发行版也提供 Yosys 二进制文件,有些版本比其他版本更新。请使用您的包管理器进行检查!
# 从源代码构建
有关更多详细信息和其他平台的说明,请查看 Read the Docs 上的
[从源代码构建](https://yosyshq.readthedocs.io/projects/yosys/en/latest/getting_started/installation.html#building-from-source)。
在克隆 Yosys 时,某些必需的库作为 git submodules 包含在内。请
确保调用例如:
```
$ git clone --recurse-submodules https://github.com/YosysHQ/yosys.git
```
或
```
$ git clone https://github.com/YosysHQ/yosys.git
$ cd yosys
$ git submodule update --init --recursive
```
您需要一个支持 C++17 的 C++ 编译器(推荐使用最新的 CLANG 或 GCC)以及一些标准工具,例如 GNU Flex、GNU Bison 和 GNU Make。
TCL、readline 和 libffi 是可选的(参见 Makefile 中的 ``ENABLE_*`` 设置)。
Xdot (graphviz) 被 yosys 中的 ``show`` 命令用于显示原理图。
例如,在 Ubuntu Linux 22.04 LTS 上,以下命令将安装构建 yosys 的所有
先决条件:
```
$ sudo apt-get install gawk git make python3 lld bison clang flex \
libffi-dev libfl-dev libreadline-dev pkg-config tcl-dev zlib1g-dev \
graphviz xdot
$ curl -LsSf https://astral.sh/uv/install.sh | sh
```
环境变量 `CXX` 可用于控制所使用的 C++ 编译器,或者
运行以下命令之一来覆盖它:
```
$ make config-clang
$ make config-gcc
```
Makefile 有许多影响构建过程的变量。这些可以
通过修改在 `make config-...` 步骤(见上文)创建的 Makefile.conf 文件来调整,或者
可以通过直接向 make 命令传递选项来设置:
$ make CXX=$CXX
对于其他编译器和构建配置,可能需要对
Makefile 的配置部分进行一些更改。这也是设置
上述 make 变量的一种替代方法。
```
$ vi Makefile # ..or..
$ vi Makefile.conf
```
要构建 Yosys,只需在此目录中输入 'make'。
```
$ make
$ sudo make install
```
测试位于 tests 子目录中,可以使用 test 目标执行。请注意,您需要 gawk、最新版本的 iverilog 和 gtest。
通过以下方式执行测试:
```
$ make test
```
要使用单独的(非源码树)构建目录,请提供 Makefile 的路径。
```
$ mkdir build; cd build
$ make -f ../Makefile
```
非源码树构建需要干净的源码树。
# 快速入门
Yosys 可以通过交互式命令 shell、综合脚本
或命令行参数使用。让我们使用交互式命令 shell 执行
一个简单的综合任务:
```
$ ./yosys
yosys>
```
命令 ``help`` 可用于打印所有可用命令的列表,
``help `` 可用于打印指定命令的详细信息:
```
yosys> help help
```
使用 Verilog 前端读取并展开设计:
```
yosys> read -sv tests/simple/fiedler-cooley.v
yosys> hierarchy -top up3down5
```
将设计以 Yosys 内部使用的 RTLIL 格式写入控制台:
```
yosys> write_rtlil
```
将进程(``always`` 块)转换为网表元素并执行
一些简单的优化:
```
yosys> proc; opt
```
使用 ``xdot`` 显示设计网表:
```
yosys> show
```
使用 ``gv`` 作为 postscript 查看器执行相同操作:
```
yosys> show -format ps -viewer gv
```
将网表转换为门逻辑并执行一些简单的优化:
```
yosys> techmap; opt
```
将设计网表写入新的 Verilog 文件:
```
yosys> write_verilog synth.v
```
或者使用一个简单的综合脚本:
```
$ cat synth.ys
read -sv tests/simple/fiedler-cooley.v
hierarchy -top up3down5
proc; opt; techmap; opt
write_verilog synth.v
$ ./yosys synth.ys
```
如果在 Yosys 构建配置中启用了 ABC,并且在 liberty 文件 ``mycells.lib`` 中给出了单元库,则以下综合脚本将
针对给定的单元库进行综合:
```
# 读取设计
read -sv tests/simple/fiedler-cooley.v
hierarchy -top up3down5
# 高层内容
proc; fsm; opt; memory; opt
# 映射到内部 cell library
techmap; opt
# 将 flip-flops 映射到 mycells.lib
dfflibmap -liberty mycells.lib
# 将逻辑映射到 mycells.lib
abc -liberty mycells.lib
# 清理
clean
```
如果您没有 liberty 文件但想测试此综合脚本,
可以使用 yosys 源代码中的文件 ``examples/cmos/cmos_cells.lib``
作为简单示例。
关于免费和开源 ASIC 标准单元库的 Liberty 文件下载和信息可以在这里找到:
- http://www.vlsitechnology.org/html/libraries.html
- http://www.vlsitechnology.org/synopsys/vsclib013.lib
命令 ``synth`` 提供了一个良好的默认综合脚本(参见
``help synth``):
```
read -sv tests/simple/fiedler-cooley.v
synth -top up3down5
# 映射到目标 cells
dfflibmap -liberty mycells.lib
abc -liberty mycells.lib
clean
```
命令 ``prep`` 提供了一个良好的默认字级综合脚本,
如基于 SMT 的形式验证中所使用的。
# 附加信息
默认情况下在使用 Verilog 源输入调用 ``read`` 时使用的 ``read_verilog`` 命令
不执行语法检查。您应该先使用其他工具(例如
[Verilator](https://www.veripool.org/verilator/))对源代码进行 lint,
例如通过调用
``verilator --lint-only``。
# 构建文档
请注意,如果您只是想阅读手册,则无需构建它。
只需访问 https://yosys.readthedocs.io/en/latest/ 即可。
如果您处于离线状态,您可以阅读源代码,将 `.../en/latest`
替换为 `docs/source`。
除了上面列出的从源代码构建 Yosys 所需的软件包外,
构建网站还需要以下软件包:
```
$ sudo apt install pdf2svg faketime
```
或者在 MacOS 上,使用 homebrew:
$ brew install pdf2svg libfaketime
大多数 LaTeX 发行版中包含的 PDFLaTeX 在网站的
构建过程中也是必需的。或者,运行以下命令:
```
$ sudo apt install texlive-latex-base texlive-latex-extra latexmk
```
或者在 MacOS 上,使用 homebrew:
$ brew install basictex
$ sudo tlmgr update --self
$ sudo tlmgr install collection-latexextra latexmk tex-gyre
Python 包 Sphinx 是必需的,以及 `docs/source/requirements.txt` 中列出的那些包:
```
$ pip install -U sphinx -r docs/source/requirements.txt
```
从存储库的根目录运行 `make docs`。这将根据需要构建/重建 yosys,
然后从 yosys 帮助命令生成网站文档。
要为 pdf 而不是 html 进行构建,请调用
`make docs DOC_TARGET=latexpdf`。
建议对将用于构建文档的 Yosys 构建使用 `ENABLE_HELP_SOURCE` make 选项。
此选项启用 passes 的源位置跟踪,并通过分组
相关命令并允许文档链接到相应的源文件来改进命令参考。
如果没有这个,Sphinx 构建期间将引发关于 `Found commands assigned to group unknown` 的警告,并且 `make docs` 配置为默认在出现警告时失败。
标签:ASIC, C++, EDA工具, FPGA, OSS CAD Suite, RTL综合, SBY, Tabby CAD Suite, Verilog, Yosys, 代码框架, 半导体, 开源, 形式化验证, 数字电路设计, 数据擦除, 硬件开发, 硬件描述语言, 逆向工具, 逻辑综合, 集成电路设计