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, 代码框架, 半导体, 开源, 形式化验证, 数字电路设计, 数据擦除, 硬件开发, 硬件描述语言, 逆向工具, 逻辑综合, 集成电路设计