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)

  1. RTL Parser(前端)

    • 解析 Verilog/VHDL,构建 Abstract Syntax Tree(AST)
    • 提取模块、端口、变量、过程控制结构
  2. Elaboration

    • 实例化模块、分层展开(flatten or preserve hierarchy)
    • 初始化数据类型、生成 Design Object(internal DB)
  3. High-Level Optimization(HLO)

    • 将行为级表达式转换为静态数据流图(SDFG)
    • 尝试对复杂表达式进行调度、绑定、重写(rewriting)
  4. Datapath Optimization

    • 构建 datapath 节点(adder、shifter、multiplier、MUX)
    • 进行资源共享、调度、绑定(binding)
    • 特殊处理乘法、条件选择等结构
  5. Logic Optimization

    • 布尔优化(常量传播、冗余移除、factorization)
    • Common subexpression elimination
  6. Mapping

    • 将中间结构(GTECH cells)映射为目标库中的元件(standard cells or custom cells)
    • 基于时序、面积、功耗做代价驱动的选择
  7. Post-Mapping Optimization

    • Retiming、buffer insertion、gate resizing、logic duplication
    • 时序闭合
  8. 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、multiplier
  • expression_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 behavior
  • report_dp_* 查看 datapath 构建状况
  • ungroup / compile_ultra -no_autoungroup 控制优化范围

四、HLO 和 datapath 的联系

HLO → datapath 优化之间是密切耦合的。

  • HLO 提供了 datapath 构建的 结构语义信息(表达式树)
  • Datapath 引擎在 HLO 成功 schedule 后尝试构造硬件资源映射
  • 若 HLO 失败(如表达式无法调度),datapath 优化必然失败
  • 某些 mux 无法构建常常是 expression 没有被合法 rewrite 成 static conditional

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低压电工常见知识点

一.工厂用电 1.工厂一般有电源380V和220V。 三相:黄绿红 蓝 双色 助记符:王力宏 分别对应第一相(R),第二相(S),第三相(T),零线(N),地线(PE) 单相:红 黑 对应火线(L) 零线(N) 左零右火 二.人体安全电压是36V 三.变压器的讲解 变压器的符号…

【沉浸式求职学习day27】

沉浸式求职学习 家人们谁懂啊!明天下午又实习笔试了,所以今天大部分时间还是在搞一些行测之类的东西,所以今天没什么分享给大家的,明晚会简单的和大家分享一下关于数据库的一些东西,以及和大家聊聊我笔试的感觉哈哈哈哈…

进入救援模式(物理服务器)

目录 **📌 准备工作****🚀 进入救援模式(物理服务器)****方法 1:直接修改启动参数****适用情况****操作步骤****方法 2:通过GRUB引导菜单进入(系统未完全崩溃时)****适用情况****操作步骤****两者的核心区别****如何选择?****注意事项****总结**当物理服务器无法正常…

基于Pytest接口自动化的requests模块项目实战以及接口关联方法详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、基于pytest单元测试框架的规则 1.1 模块名(即文件名)必须以test_开头或者_test结尾 1.2 类名必须以Test开头且不能有init方法 1.3 用…

汇总 JavaScript 内置对象常用方法详解

汇总 JavaScript 内置对象常用方法详解 JavaScript 提供了许多强大的内置对象,它们带有各种实用的方法,能够帮助我们更高效地编写代码。本文将介绍最常用的内置对象方法,并通过实例展示它们的使用场景。 目录 Array 数组String 字符串Obje…

OceanBase TPCC测试常见报错汇总

OceanBase TPCC测试常见报错汇总 报错1:加载测试数据时创建tablegroup失败报错2:加载测试数据时执行超时报错3:加载测试数据时funcs.sh函数找不到报错4:加载数据时报错超过租户内存上限办法一:增加租户内存办法二:调高转储线程数办法三:调整MemStore内存占比和冻结触发阈…

Flutter 在 Dart 3.8 开始支持 Null-Aware Elements 语法,自动识别集合里的空元素

近日,在 Dart 3.8 的 changelog 里正式提交了 Null-Aware Elements 语法,该语法糖可以用于在 List、Set、Map 等集合中处理可能为 null 的元素或键值对,简化显式检查 null 的场景: /之前 var listWithoutNullAwareElements [if …

SAIL-RK3588协作机器人运动控制器技术方案

一、核心能力与政策适配‌ ‌政策合规性‌ 满足工信部《智能机器人重点技术攻关指南》要求,支持 ‌EtherCAT主站协议(符合IEC 61158标准)‌,助力企业申报工业机器人研发专项补贴(最高300万元/项目)‌核心板…

Eigen几何变换类 (Transform, Quaternion等)

1. Transform 类&#xff1a;仿射/射影变换 模板参数 cpp Transform<Scalar, Dim, Mode, Options> Scalar&#xff1a;数据类型&#xff08;如 float, double&#xff09;。 Dim&#xff1a;维度&#xff08;2 或 3&#xff09;。 Mode&#xff1a;变换类型&#xf…

openGauss手工配置主备

1、初始化 创建一个操作系统用户&#xff0c;例如postgres&#xff0c;为这个用户设置PATH和LD_LIBRARY_PATH环境变量&#xff0c;指向opengauss/bin和opengauss/lib export GAUSSHOME/mnt/disk01/opengauss export PATH$GAUSSHOME/bin:$PATH export LD_LIBRARY_PATH$GAUSS…

CSS预处理器对比:Sass、Less与Stylus如何选择

引言 CSS预处理器已成为现代前端开发的标准工具&#xff0c;它们通过添加编程特性来增强纯CSS的功能&#xff0c;使样式表更加模块化、可维护且高效。在众多预处理器中&#xff0c;Sass、Less和Stylus是三个最流行的选择&#xff0c;它们各自拥有独特的语法和功能特点。本文将深…

基于Docker、Kubernetes和Jenkins的百节点部署架构图及信息流描述

以下是基于Docker、Kubernetes和Jenkins的百节点部署架构图及信息流描述,使用文本和Mermaid语法表示: 架构图(Mermaid语法) #mermaid-svg-WWCAqL1oWjvRywVJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-WWCAq…

js中get,set用法

1、作为对象的访问器属性 //使用Object.definePropertylet obj {_a:123};Object.defineProperty(obj, "a", {get() {return this._a;},set(val) {this._aval},});console.log(obj.a); //123obj.a456console.log(obj.a) // 456 //使用对象字面量let obj {_a:123,ge…

Steam游戏服务器攻防全景解读——如何构建游戏级抗DDoS防御体系?

Steam游戏服务器的DDoS攻防体系设计&#xff0c;从协议层漏洞利用到业务连续性保障&#xff0c;深度拆解反射型攻击、TCP状态耗尽等7类威胁场景。基于全球15个游戏厂商攻防实战数据&#xff0c;提供包含边缘节点调度、AI流量指纹识别、SteamCMD加固配置的三维防护方案&#xff…

【AI】SpringAI 第四弹:接入本地大模型 Ollama

Ollama 是一个开源的大型语言模型服务工具。它的主要作用是帮助用户快速在本地运行大模型&#xff0c; 简化了在 Docker 容器内部署和管理大语言模型&#xff08;LLM&#xff09;的过程。 1. 确保Ollama 已经启动 # 查看帮助文档 ollama -h# 自动下载并启动 ollama run deeps…

大语言模型的评估指标

目录 一、混淆矩阵 1. 混淆矩阵的结构&#xff08;二分类为例&#xff09; 2.从混淆矩阵衍生的核心指标 3.多分类任务的扩展 4. 混淆矩阵的实战应用 二、分类任务核心指标 1. Accuracy&#xff08;准确率&#xff09; 2. Precision&#xff08;精确率&#xff09; 3. …

SpringBoot Gradle插件:构建与打包配置

文章目录 引言一、Spring Boot Gradle插件基础二、依赖管理与配置三、应用打包配置四、启动脚本与运行配置五、多环境构建与配置六、集成Docker与云原生支持七、实践案例&#xff1a;自定义Spring Boot应用构建总结 引言 在Java生态系统中&#xff0c;Gradle作为一种灵活且强大…

Vue3 组件通信与插槽

Vue3 组件通信方式全解&#xff08;10种方案&#xff09; 一、组件通信方式概览 通信方式适用场景数据流向复杂度Props/自定义事件父子组件简单通信父 ↔ 子⭐v-model 双向绑定父子表单组件父 ↔ 子⭐⭐Provide/Inject跨层级组件通信祖先 → 后代⭐⭐事件总线任意组件间通信任…

【KWDB 创作者计划】_嵌入式硬件篇---数字电子器件

文章目录 前言一、系列前缀(如 "74" 或 "54")74(商用级)54(工业级)二、逻辑家族(如 "LS"、"HC"、"HCT" 等)TTL(晶体管-晶体管逻辑)家族CMOS(互补金属氧化物半导体)家族BiCMOS(双极 CMOS)家族三、功能编号(如…

黄勇的《架构探险:从Java到大数据》内容详解

《架构探险&#xff1a;从Java到大数据》内容详解 1. 书籍核心主题 黄勇的《架构探险&#xff1a;从Java到大数据》是一本系统性探讨架构设计演进的著作&#xff0c;结合Java技术栈和大数据场景&#xff0c;深入分析了从单体架构到分布式、微服务、云原生的演进路径&#xff0…