Synopsys 逻辑综合的整体架构概览
目录
一、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