Yosys 綜合
實例
一般 FPGA IDE 的第一步都是RTL 綜合(Synthesis)。之后就能看到數字電路圖了。然后可以做RTL 級的仿真模擬。
直接上代碼,這里我們看一個簡單的加法器來學習。
module adder(input [7:0] a,input [7:0] b, input ci, // carry inoutput [7:0] sum, output co // carry out
);wire [8:0] tmp; // 多一位是為了輸出進位assign tmp = a + b + ci; // 算上進位assign sum = tmp [7:0];assign co = tmp [8]; // 輸出進位
endmodule
如何綜合
寫一個yosys腳本:
read_verilog adder.v
hierarchy -check
proc; opt; memory; opt; fsm; opt
show -format dot -prefix ./adder_rtl
write_json out.json
這個 .ys
文件是用于 yosys
工具的腳本,它指定了如何對 Verilog 設計文件進行綜合。本腳本的作用是讀取一個 Verilog 文件,并執行一系列綜合步驟,最后生成一個 JSON 格式的輸出文件以及一個 RTL (寄存器傳輸級) 圖。以下是對腳本各部分的詳細解釋:
-
讀取設計
read_verilog adder.v
read_verilog
命令讀取指定的 Verilog 文件 (adder.v
) 并將其載入到yosys
的設計數據庫中。這個文件應該包含你要綜合的硬件描述代碼。
-
層次結構檢查
hierarchy -check
hierarchy
命令檢查設計的模塊層次結構,確保所有的模塊引用都是一致的,并且所有的子模塊都能找到。-check
選項會在檢查過程中報告任何發現的問題。
-
高級綜合步驟
proc; opt; memory; opt; fsm; opt
- 這一系列命令執行了多步優化和轉換處理:
proc
:處理進程,轉換所有的進程 (always 塊) 成為數據流圖 (DFG)。opt
:優化設計,執行一系列常規優化步驟以簡化和優化電路。memory
:處理和優化存儲器 (RAM, ROM),將其轉換成適當的實現。opt
:再一次優化設計,以利用前一步的轉換可能帶來的新優化機會。fsm
:處理有限狀態機 (FSM),將 FSM 轉換成最優實現。opt
:最后再進行一次優化,確保所有前面的轉換和優化都得到充分利用。
- 這一系列命令執行了多步優化和轉換處理:
-
展示設計
show -format dot -prefix ./adder_rtl
show
命令生成設計的圖形表示。-format dot
選項指定輸出格式為 DOT 格式 (Graphviz 使用的圖形描述語言),-prefix ./adder_rtl
選項指定生成的文件前綴為./adder_rtl
。最終會生成一個./adder_rtl.dot
文件,該文件可以用 Graphviz 工具進行可視化。
-
生成 JSON 輸出
write_json out.json
write_json
命令將當前設計寫入 JSON 格式文件out.json
。這個文件包含了綜合后的設計信息,可以用于其他工具進行進一步處理或分析。
運行腳本:
yosys ./synthesis_rtl.ys
這時我們可以看到out.json
和 adder_rtl.dot
文件。
查看 RTL 原理圖
.dot 文件如何看呢?運行如下命令即可。我用的是Ubuntu22.04, dot
應該已經默認安裝了。
dot -Tpng adder_rtl.dot > adder_rtl_dot.png