
1. 安裝依賴1.1. 安裝常用依賴$sudoapt-getinstallgawkgitmakepython3 lld bison clang flex\libffi-dev libfl-dev libreadline-dev pkg-config tcl-dev zlib1g-dev\graphviz xdot1.2. 安裝 gtestsudoaptinstalllibgtest-dev libgmock-dev2. 編譯 yosys下載源碼$gitclone https://github.com/YosysHQ/yosys.git $cdyosys $gitcheckout v0.68 $gitsubmodule update--init2.1. 方案1 依賴使用內(nèi)嵌庫 -DYOSYS_USE_BUNDLED_LIBSONcd~/ex_yosys/yosysrm-rfbuild# 先確保所有內(nèi)嵌子模塊都拉完整了gitsubmodule update--init--recursive# 強(qiáng)制使用內(nèi)嵌依賴跳過所有系統(tǒng)包查找cmake-Bbuild.--fresh\-DYOSYS_USE_BUNDLED_LIBSON\-DCMAKE_BUILD_TYPERelease cmake--buildbuild--parallel$(nproc)sudocmake--installbuild2.2. 方案2 依賴使用系統(tǒng)庫 安裝依賴2.2.1. 構(gòu)建命令后邊會安裝依賴等依賴安裝就緒后執(zhí)行如下構(gòu)建命令$ cmake-Bbuild.# 查看 tcl 的配置$grep-EYOSYS_WITHOUT_TCL|tcl_INCLUDE_DIRS|tcl_VERSION|tcl_FOUNDbuild/CMakeCache.txt# 輸出為# YOSYS_WITHOUT_TCL:BOOLOFF# tcl_FOUND:INTERNAL1# tcl_INCLUDE_DIRS:INTERNAL/usr/include/tcl8.6;/usr/include# tcl_VERSION:INTERNAL8.6.12編譯cd~/ex_yosys/tmp01/yosys# 編譯cmake--buildbuild -j$(nproc)#檢查./build/yosys--version#輸出類似# Yosys 0.68 (git sha1 38e001a6f, GNU /usr/bin/c 11.4.0)# 安裝sudocmake--installbuild# 驗證 Tcl 支持yosys-h|grep-itcl# 應(yīng)顯示# -c, --tcl-scriptfile tcl_scriptfile# execute the commands in the TCL tcl_scriptfile# 確認(rèn)版本yosys-V2.2.2. 源碼裝 tomlplusplusYosys 新版本的 CMake 構(gòu)建系統(tǒng)依賴tomlplusplus庫。tomlplusplus是一個 header-only 的 C17 TOML 解析庫。Yosys 的 CMake 構(gòu)建會通過find_package(tomlplusplus)來查找它找不到就會報tomlplusplus_DIR-NOTFOUND。以下是幾種解決方法按推薦程度排序方法 1二進(jìn)制安裝 tomlplusplusUbuntu 24.04 可能有包但舊版本 ubuntu 通常沒有。可以嘗試sudoaptinstalllibtomlplusplus-dev如果沒有這個包請使用方法 2。vcpkgvcpkginstalltomlplusplus方法 2手動編譯安裝 tomlplusplustomlplusplus使用 Meson 構(gòu)建系統(tǒng)編譯安裝后會生成 CMake 配置文件Yosys 就能找到了。# 1. 下載源碼gitclone https://github.com/marzer/tomlplusplus.gitcdtomlplusplusgitcheckout v3.4.0# 建議用穩(wěn)定版本# 2. 編譯安裝需要 meson 和 ninjameson setup build meson compile-Cbuildsudomesoninstall-Cbuild安裝后CMake 配置文件通常會在/usr/local/lib/cmake/tomlplusplus/或/usr/lib/cmake/tomlplusplus/方法 3手動指定 tomlplusplus 路徑如果你已經(jīng)安裝了tomlplusplus但 CMake 找不到比如裝到了非標(biāo)準(zhǔn)路徑可以在配置 Yosys 時手動指定cdyosys cmake-Bbuild.\-Dtomlplusplus_DIR/usr/local/lib/cmake/tomlplusplus\-DCMAKE_BUILD_TYPERelease把路徑換成你系統(tǒng)中tomlplusplusConfig.cmake所在的實際目錄。2.2.3. 驗證 tomlplusplus 的安裝安裝完tomlplusplus后先驗證 CMake 能否找到它cmake --find-package-DNAMEtomlplusplus-DCOMPILER_IDGNU-DLANGUAGECXX-DMODEEXIST總結(jié)最推薦的方法是方法 1包管理器安裝或方法 2手動編譯安裝。2.2.4. 編譯安裝 fmtcd~/ex_yosysgitclone https://github.com/fmtlib/fmt.gitcdfmtgitcheckout12.2.0# 或最新穩(wěn)定版mkdirbuildcdbuild cmake..\-DCMAKE_BUILD_TYPERelease\-DFMT_TESTOFF\-DBUILD_SHARED_LIBSON cmake--build.--parallel$(nproc)sudocmake--install.3. Liberty 文件與 PPALiberty 文件是 PPAPower, Performance, Area驗證的基礎(chǔ)數(shù)據(jù)輸入。沒有它綜合工具就無法量化評估這三個指標(biāo)。1. 為什么 Liberty 文件是 PPA 驗證的前提PPA 三個維度都依賴 Liberty 文件中的數(shù)據(jù)PPA 維度依賴 Liberty 中的數(shù)據(jù)說明P (Power)internal_power、leakage_power、switching_power每個單元的動態(tài)功耗和靜態(tài)漏電P (Performance)cell_rise、cell_fall、setup、hold門的傳播延遲和時序約束A (Area)area每個標(biāo)準(zhǔn)單元的硅面積通常以 μm2 或等價門數(shù)表示2. 在 Yosys 中驗證 PPA 的流程# 1. 綜合并映射到標(biāo)準(zhǔn)單元庫 read -sv design.v synth -top top_module dfflibmap -liberty mycells.lib abc -liberty mycells.lib # 2. 生成 PPA 報告 # 面積報告 stat -liberty mycells.lib # 時序報告需要額外的 SDC 約束文件 # Yosys 本身時序分析能力有限通常導(dǎo)出到 OpenSTA write_verilog netlist.v3.stat -liberty輸出示例 top_module Number of wires: 123 Number of cells: 89 mylib_INV_X1 23 mylib_NAND2_X1 15 mylib_NOR2_X1 12 mylib_DFF_X1 39 Estimated area: 156.3 -- 來自 Liberty 中各 cell 的 area 字段累加4. 僅有 Liberty 文件夠嗎不夠。完整的 PPA 驗證還需要文件作用來源Liberty (.lib)標(biāo)準(zhǔn)單元電氣/時序/功耗特性晶圓廠或開源 PDKSDC 約束定義時鐘頻率、輸入/輸出延遲、虛假路徑設(shè)計者編寫SPEF/DSPF互連線 RC 寄生參數(shù)后布局布線提取工具如 OpenROAD、MagicVCD/SAIF實際開關(guān)活動率用于動態(tài)功耗仿真器如 Verilator、Icarus5. 各階段的 PPA 精度階段工具鏈面積精度時序精度功耗精度RTL 綜合后Yosys Liberty? 準(zhǔn)確已知 cell area?? 估算無互連線延遲?? 估算無開關(guān)活動布局后OpenROAD / OpenLane? 準(zhǔn)確?? 較準(zhǔn)有線載模型?? 較準(zhǔn)布線后OpenROAD SPEF? 準(zhǔn)確? 準(zhǔn)確含寄生參數(shù)? 準(zhǔn)確含 SAIF6. 如果沒有 Liberty 文件會怎樣Yosys 默認(rèn)使用內(nèi)部通用單元庫$lut、$dff、$and等此時Areastat只能報告邏輯門數(shù)量無法換算為實際硅面積Performance無法計算真實延遲只能做邏輯級數(shù)估算Power完全無法評估# 沒有 Liberty 文件時 stat # 輸出 # Number of cells: 100 # $and: 30 # $or: 20 # $dff: 50 # 但沒有面積、延遲、功耗數(shù)據(jù)7. 開源 PPA 驗證完整工具鏈如果你要做完整的開源 ASIC 流程 PPA 驗證RTL (Verilog) ↓ Yosys (綜合, Liberty 輸入) ↓ OpenROAD / OpenLane (布局布線, DEF/LEF 輸入) ↓ OpenSTA (靜態(tài)時序分析, Liberty SDC SPEF) ↓ OpenRoad / ptpx (功耗分析, Liberty VCD/SAIF)8. 總結(jié)Liberty 文件是 PPA 驗證的必要條件但不是充分條件。有 Liberty → 可以做面積估算和粗略時序分析要準(zhǔn)確驗證 Performance → 還需要SDC SPEF要準(zhǔn)確驗證 Power → 還需要VCD/SAIF 開關(guān)活動數(shù)據(jù)在純 Yosys 綜合階段Liberty 文件至少能讓你得到相對可靠的面積數(shù)據(jù)和基于線載模型的粗略時序估計這已經(jīng)足夠用于早期設(shè)計空間探索DSE。4. Liberty 文件介紹Liberty通常以.lib為擴(kuò)展名是 ASIC 設(shè)計中最核心的標(biāo)準(zhǔn)單元庫描述文件格式由 Synopsys 開發(fā)并已成為業(yè)界事實標(biāo)準(zhǔn)IEEE 1801 相關(guān)。它用類似 Tcl 的語法描述一個工藝節(jié)點下所有標(biāo)準(zhǔn)單元Standard Cells的電氣特性、時序特性、功耗特性和物理特性。1. 基本結(jié)構(gòu)一個 Liberty 文件通常包含以下層級library (mylib) { // 庫級屬性 technology (cmos); delay_model : table_lookup; voltage_unit : 1V; time_unit : 1ns; capacitive_load_unit (1, pf); // 工作條件 operating_conditions (typical) { process : 1.0; temperature : 25; voltage : 1.0; } // 標(biāo)準(zhǔn)單元定義 cell (INV_X1) { area : 1.2; pin(A) { direction : input; capacitance : 0.001; } pin(Y) { direction : output; function : !A; timing() { related_pin : A; cell_rise(table_1) { ... } // 上升延遲查找表 cell_fall(table_1) { ... } // 下降延遲查找表 } } } cell (DFF_X1) { area : 3.5; ff(IQ, IQN) { ... } pin(CLK) { ... } pin(D) { ... } pin(Q) { direction : output; timing() { related_pin : CLK; timing_type : rising_edge; cell_rise(table_1) { ... } } } } }2. 關(guān)鍵內(nèi)容部分說明庫屬性工藝節(jié)點、電壓/時間單位、延遲模型如table_lookup、cmos_linearOperating ConditionsPVTProcess/Voltage/Temperature角如 tt典型、ss慢角、ff快角Wire Load Model互連線延遲估算模型用于綜合階段尚未布線時Cell 定義每個標(biāo)準(zhǔn)單元的完整描述Pin 定義引腳方向、電容、驅(qū)動能力、功能表達(dá)式時序表 (Timing Tables)基于輸入轉(zhuǎn)換時間slew和輸出負(fù)載load的二維查找表描述延遲和轉(zhuǎn)換時間功耗數(shù)據(jù)內(nèi)部功耗、漏電功耗、開關(guān)功耗Sequential Cell觸發(fā)器/鎖存器的 setup/hold 時間、時鐘到輸出延遲3. 在 Yosys 中的作用在你貼出的腳本中Liberty 文件被用于兩個關(guān)鍵步驟# 1. 將 D 觸發(fā)器映射到庫中的具體單元 dfflibmap -liberty mycells.lib # 2. 用 ABC 將組合邏輯映射到庫中的具體門單元 abc -liberty mycells.libdfflibmap掃描網(wǎng)表中的$dff通用 D 觸發(fā)器根據(jù) Liberty 文件中定義的ff單元映射為具體的 DFF 單元如DFF_X1、DFF_X2等abc將組合邏輯與或非門等映射到庫中的標(biāo)準(zhǔn)門單元INV、NAND、NOR、AOI 等同時進(jìn)行邏輯優(yōu)化和時序優(yōu)化4. Liberty 文件類型類型說明.lib人類可讀的 ASCII 文本格式上面示例.dbSynopsys 二進(jìn)制格式由lc或Library Compiler編譯.lib生成讀取更快CCS / ECSM更先進(jìn)的電流源模型用于納米級工藝的高精度時序分析5. 免費開源 Liberty 庫資源你提到的鏈接是 VLSI Technology 提供的開源庫適合學(xué)習(xí)和實驗vsclib013130nmhttp://www.vlsitechnology.org/synopsys/vsclib013.lib還有其他工藝節(jié)點如 180nm、90nm 等此外著名的開源 PDK 也提供 Liberty 文件SkyWater 130nm (SKY130)sky130_fd_sc_hd__tt_025C_1v80.lib等GF180MCUGlobalFoundries 180nm6. 簡單示例解析以 Yosys 自帶的examples/cmos/cmos_cells.lib為例library(cmos_cells) { cell(NOT) { pin(A) { direction: input; } pin(Y) { direction: output; function: !A; } } cell(NAND) { pin(A) { direction: input; } pin(B) { direction: input; } pin(Y) { direction: output; function: !(AB); } } cell(DFF) { pin(CLK) { direction: input; clock: true; } pin(D) { direction: input; } pin(Q) { direction: output; } ff(IQ, IQN) { clocked_on: CLK; next_state: D; } } }這是一個極度簡化的 Liberty 文件只定義了邏輯功能沒有時序和功耗數(shù)據(jù)。實際的工藝庫會有復(fù)雜的cell_rise、cell_fall、rise_transition等查找表。7. 總結(jié)Liberty 文件是連接 RTL 設(shè)計和物理實現(xiàn)的橋梁——它告訴綜合工具我的工藝庫有哪些門、每個門有多大、多快、功耗多少。Yosys 通過讀取 Liberty 文件才能將抽象的 RTL 映射到具體的、可制造的標(biāo)準(zhǔn)單元上。5. README.md 參考: Yosys —— Yosys 開源綜合套件這是一個 RTL 綜合工具的框架。目前它對 Verilog-2005 提供了廣泛的支持并為各種應(yīng)用領(lǐng)域提供了一套基本的綜合算法。Yosys 使用 sv-elab 和 slang 庫來提供全面的 SystemVerilog 支持。它支持非正式定義的可綜合的 SystemVerilog 子集版本為 IEEE 1800-2017 或 IEEE 1800-2023。Yosys 可以通過組合現(xiàn)有的處理流程算法來執(zhí)行任何綜合任務(wù)使用綜合腳本并根據(jù)需要通過擴(kuò)展 Yosys C 代碼庫來添加額外的處理流程。Yosys 是在 ISC 許可證下發(fā)布的自由軟件一種與 GPL 兼容的許可證在條款上類似于 MIT 許可證或 2 條款 BSD 許可證。與本軟件一起分發(fā)的第三方軟件在兼容的許可證下獲得許可。請參閱abc和libs子目錄以了解其許可條款。網(wǎng)站及其他資源更多信息和文檔可以在 Yosys 網(wǎng)站上找到https://yosyshq.net/yosys/如果您有任何與 Yosys 相關(guān)的問題請發(fā)布到 Discourse 討論組https://yosyshq.discourse.group來自本倉庫的文檔會自動構(gòu)建并在 Read the Docs 上提供https://yosyshq.readthedocs.io/projects/yosys對形式驗證感興趣的用戶可能希望使用 Yosys 的形式驗證前端 SBYhttps://yosyshq.readthedocs.io/projects/sby/https://github.com/YosysHQ/sbyYosys 博客上有來自用戶的新聞和文章https://blog.yosyshq.com安裝Yosys 是 Tabby CAD Suite 和 OSS CAD Suite 的一部分使用 Yosys 最簡單的方法是安裝二進(jìn)制軟件套件其中包含所有必需的依賴項和相關(guān)工具。聯(lián)系 YosysHQ 獲取 Tabby CAD Suite 評估許可證和下載鏈接或者前往 https://github.com/YosysHQ/oss-cad-suite-build/releases 下載免費的 OSS CAD Suite按照 GitHub 上的安裝說明進(jìn)行操作如果您需要行業(yè)級 SystemVerilog 和 VHDL 解析器等功能請務(wù)必獲取 Tabby CAD Suite 評估許可證有關(guān) Tabby CAD Suite 和 OSS CAD Suite 之間差異的更多信息請訪問 https://www.yosyshq.com/tabby-cad-datasheet許多 Linux 發(fā)行版也提供 Yosys 二進(jìn)制文件有些比其他更新。請查看您的包管理器從源碼構(gòu)建更多詳細(xì)信息以及其他平臺的說明請查看 Read the Docs 上的從源碼構(gòu)建。克隆 Yosys 時一些必需的庫作為 git 子模塊包含在內(nèi)。確保執(zhí)行例如$gitclone https://github.com/YosysHQ/yosys.git $cdyosys $gitsubmodule update--init需要支持 C20 的 C 編譯器以及一些標(biāo)準(zhǔn)工具如 GNU Flex、GNU Bison (3.8)、CMake (3.28)、Make或其他 CMake 生成器如 Ninja和 Python (3.11)。一些額外的工具readline、libffi、Tcl 和 zlib如果可用將被使用但它們是可選的。Graphviz 和 Xdot 被show命令用于顯示原理圖。例如在 Ubuntu Linux 22.04 LTS 上以下命令將安裝構(gòu)建 Yosys 的所有先決條件$sudoapt-getinstallgawkgitmakepython3 lld bison clang flex\libffi-dev libfl-dev libreadline-dev pkg-config tcl-dev zlib1g-dev\graphviz xdot注意默認(rèn)情況下Ubuntu 22.04 LTS 通過apt只能使用 CMake 3.22。要安裝更新版本并滿足構(gòu)建 Yosys 的最低要求請使用sudo snap install cmake --classic。CMake 用于構(gòu)建配置并且需要一個單獨的構(gòu)建目錄$ cmake-Bbuild.生成后可用的構(gòu)建變量可以通過ccmake或打開生成的build/CMakeCache.txt文件來檢查和修改$ ccmake build# 或者..$vibuild/CMakeCache.txt設(shè)置一次性變量時CMake 提供-D varvalue命令行選項。例如禁用 zlib 支持$ cmake-Bbuild.-DYOSYS_WITHOUT_ZLIBON對于更持久的配置我們建議在根yosys目錄中創(chuàng)建并使用CMakeUserPresets.json文件。下面是一個示例文件當(dāng)調(diào)用cmake --preset clang時啟用 ccache 并將默認(rèn)編譯器設(shè)置為 clang{version:1,configurePresets:[{name:default,binaryDir:build,generator:Unix Makefiles,cacheVariables:{CMAKE_C_COMPILER:clang,CMAKE_CXX_COMPILER:clang,YOSYS_COMPILER_LAUNCHER:ccache}}]}生成后構(gòu)建系統(tǒng)可以按如下方式運(yùn)行$ cmake--buildbuild# 或者..$cdbuild $ cmake--build.要使用默認(rèn)設(shè)置快速安裝 Yosys$ cmake-Bbuild.-DCMAKE_BUILD_TYPERelease $ cmake--buildbuild--configRelease--parallel$(nproc)$sudocmake--installbuild--strip測試位于 tests 子目錄中可以使用test目標(biāo)執(zhí)行。請注意您需要 gawk、較新版本的 iverilog 和 gtest。通過以下方式執(zhí)行測試$ cmake--buildbuild--targettest--parallel$(nproc)快速入門Yosys 可以與交互式命令 shell、綜合腳本或命令行參數(shù)一起使用。讓我們使用交互式命令 shell 執(zhí)行一個簡單的綜合任務(wù)$ ./build/yosys yosyshelp命令可用于打印所有可用命令的列表help command可用于打印指定命令的詳細(xì)信息yosyshelphelp使用 Verilog 前端讀取和細(xì)化設(shè)計yosysread-svtests/simple/fiedler-cooley.v yosyshierarchy-topup3down5以 Yosys 內(nèi)部使用的 RTLIL 格式將設(shè)計寫入控制臺yosyswrite_rtlil將進(jìn)程always塊轉(zhuǎn)換為網(wǎng)表元素并執(zhí)行一些簡單的優(yōu)化yosysproc;opt使用xdot顯示設(shè)計網(wǎng)表yosysshow使用gv作為 PostScript 查看器執(zhí)行相同操作yosysshow-formatps-viewergv將網(wǎng)表轉(zhuǎn)換為門級邏輯并執(zhí)行一些簡單的優(yōu)化yosystechmap;opt將設(shè)計網(wǎng)表寫入新的 Verilog 文件yosyswrite_verilog synth.v或者使用簡單的綜合腳本$catsynth.ysread-svtests/simple/fiedler-cooley.v hierarchy-topup3down5 proc;opt;techmap;opt write_verilog synth.v $ ./yosys synth.ys如果在 Yosys 構(gòu)建配置中啟用了 ABC并且 Liberty 文件mycells.lib中給出了單元庫則以下綜合腳本將為給定的單元庫進(jìn)行綜合# 讀取設(shè)計 read -sv tests/simple/fiedler-cooley.v hierarchy -top up3down5 # 高層級處理 proc; fsm; opt; memory; opt # 映射到內(nèi)部單元庫 techmap; opt # 將觸發(fā)器映射到 mycells.lib dfflibmap -liberty mycells.lib # 將邏輯映射到 mycells.lib abc -liberty mycells.lib # 清理 clean如果您沒有 Liberty 文件但想測試此綜合腳本可以使用 yosys 源代碼中的文件examples/cmos/cmos_cells.lib作為簡單示例。有關(guān)免費和開源 ASIC 標(biāo)準(zhǔn)單元庫的 Liberty 文件下載和信息可以在這里找到http://www.vlsitechnology.org/html/libraries.htmlhttp://www.vlsitechnology.org/synopsys/vsclib013.libsynth命令提供了一個很好的默認(rèn)綜合腳本參見help synthread -sv tests/simple/fiedler-cooley.v synth -top up3down5 # 映射到目標(biāo)單元 dfflibmap -liberty mycells.lib abc -liberty mycells.lib cleanprep命令提供了一個很好的默認(rèn)字級綜合腳本如基于 SMT 的形式驗證中所使用的那樣。附加信息默認(rèn)情況下當(dāng)使用 Verilog 源輸入調(diào)用read時使用的read_verilog命令不執(zhí)行語法檢查。您應(yīng)該首先使用其他工具如 [Verilator](https://www.veripool.org/verilator/對源代碼進(jìn)行 lint 檢查例如通過調(diào)用verilator --lint-only。構(gòu)建文檔請注意如果您只是想閱讀手冊則無需構(gòu)建它。只需訪問 https://yosys.readthedocs.io/en/latest/ 即可。如果您處于離線狀態(tài)可以閱讀源代碼將.../en/latest替換為docs/source。除了上面列出的用于從源碼構(gòu)建 Yosys 的包之外構(gòu)建網(wǎng)站還需要以下包$sudoaptinstallpdf2svg faketime或者在 MacOS 上使用 homebrew$ brewinstallpdf2svg libfaketime大多數(shù) LaTeX 發(fā)行版中包含的 PDFLaTeX 在構(gòu)建網(wǎng)站期間也需要?;蛘哌\(yùn)行以下命令$sudoaptinstalltexlive-latex-base texlive-latex-extra latexmk或者在 MacOS 上使用 homebrew$ brewinstallbasictex $sudotlmgr update--self$sudotlmgrinstallcollection-latexextra latexmk tex-gyre需要 Python 包 Sphinx以及docs/source/requirements.txt中列出的包$ pipinstall-Usphinx-rdocs/source/requirements.txt文檔例如$ cmake--buildbuild--targetdocs-html--parallel這將根據(jù)需要構(gòu)建/重建 yosys然后從 yosys 幫助命令生成網(wǎng)站文檔。要構(gòu)建 pdf 而不是 html請使用docs-latexpdf目標(biāo)。