目錄
一、DC Shell 邏輯綜合的整體架構概覽
?? 邏輯綜合的主要階段(Pipeline)
二、核心架構模塊詳解
1. Internal Database(設計對象數據庫)
2. Scheduler(調度器)
3. Rewriting Engine(表達式重寫器)
4. Datapath Engine
5. Mapping Engine
三、腳本化流程(TCL 下的控制路徑)
四、HLO 和 datapath 的聯系
一、DC Shell 邏輯綜合的整體架構概覽
Design Compiler(DC)作為 Synopsys 的旗艦綜合工具,其底層架構是高度模塊化的,以“中間表示(IR)”驅動的靜態調度優化器(Static Scheduling Optimizer)為核心,依次執行 RTL 解析、靜態數據流圖構建、表達式轉換、邏輯優化、結構優化、時序收斂與映射幾個階段。
?? 邏輯綜合的主要階段(Pipeline)
-
RTL Parser(前端)
- 解析 Verilog/VHDL,構建?Abstract Syntax Tree(AST)
- 提取模塊、端口、變量、過程控制結構
-
Elaboration
- 實例化模塊、分層展開(flatten or preserve hierarchy)
- 初始化數據類型、生成?Design Object(internal DB)
-
High-Level Optimization(HLO)
- 將行為級表達式轉換為靜態數據流圖(SDFG)
- 嘗試對復雜表達式進行調度、綁定、重寫(rewriting)
-
Datapath Optimization
- 構建 datapath 節點(adder、shifter、multiplier、MUX)
- 進行資源共享、調度、綁定(binding)
- 特殊處理乘法、條件選擇等結構
-
Logic Optimization
- 布爾優化(常量傳播、冗余移除、factorization)
- Common subexpression elimination
-
Mapping
- 將中間結構(GTECH cells)映射為目標庫中的元件(standard cells or custom cells)
- 基于時序、面積、功耗做代價驅動的選擇
-
Post-Mapping Optimization
- Retiming、buffer insertion、gate resizing、logic duplication
- 時序閉合
-
Netlist Generation
- 輸出 gate-level netlist(Verilog),或 GTECH(generic technology)表示
二、核心架構模塊詳解
1. Internal Database(設計對象數據庫)
DC 所有 design 元素(cell、net、pin、expr、mux、dp node)都以對象存在于 Internal DB 中。常用的數據結構有:
design
:頂層模塊net
?/?port
?/?pin
dp_node
:datapath node,封裝如 adder、multiplierexpression_tree
:行為表達式樹,供 HLO 重寫器處理- 屬性系統:所有對象可攜帶 attribute(可以通過?
get_attribute
?操作)
2. Scheduler(調度器)
核心的調度引擎是 DC 的靈魂。它決定表達式中每個操作應在哪個“cycle”執行,或是否跨越 cycle 邊界:
- 基于控制依賴與數據依賴圖(DFG)
- 考慮 path slack、resource sharing、binding 成本
- 配合 timing engine 實時計算 slack 和 delay
3. Rewriting Engine(表達式重寫器)
HLO 中的重要部分,處理結構變換,比如:
a + (b + c)
?重寫為?(a + b) + c
(sel) ? a : b
?轉換為 mux 構造形式- 探測 shared pattern(子表達式共享)
4. Datapath Engine
datapath 引擎負責將 SDFG 圖中的操作構建為硬件友好的 datapath 單元(而非離散 gates):
- 構造 datapath 節點(如 dp_adder、dp_mux)
- 調用綁定器將 dp_node 綁定到實現(如 multiplier)
- 嘗試資源復用與 cross-cycle 構造
這一步是能否提升面積/功耗的關鍵步驟,也最容易失敗。
5. Mapping Engine
將 GTECH 表達式映射為標準 cell。這里會調用:
- Cell selector:遍歷 cell library 尋找合適 cell
- Timing annotator:估計時延
- Area/capacitive cost estimator:為選擇提供權重
三、腳本化流程(TCL 下的控制路徑)
dc_shell
?的整體流程可以通過一套典型的腳本來掌控:
read_verilog design.v
elaborate top
linkset_synlib_optimization true
compile_ultra -gate_clock -no_autoungroup
write -f verilog -hierarchy -o top_mapped.v
高級用戶可以用:
set_attribute
?設置 datapath behaviorreport_dp_*
?查看 datapath 構建狀況ungroup
?/?compile_ultra -no_autoungroup
?控制優化范圍
四、HLO 和 datapath 的聯系
HLO → datapath 優化之間是密切耦合的。
- HLO 提供了 datapath 構建的?結構語義信息(表達式樹)
- Datapath 引擎在 HLO 成功 schedule 后嘗試構造硬件資源映射
- 若 HLO 失敗(如表達式無法調度),datapath 優化必然失敗
- 某些 mux 無法構建常常是 expression 沒有被合法 rewrite 成 static conditional