Design Compiler(以下简称DC)是Synopsys公司用于做电路综合的核心工具,可以将HDL描述的电路转换为基于工艺库的门级网表。本系列主要介绍综合相关的知识以及DC工具的使用。


DC进行优化的三个阶段:结构级、逻辑级以及门级。在不同的阶段,DC运用的方法和优化余地是不一样的,下面会对这三个阶段的优化进行介绍。

上图是这三个阶段的关系图,可以看到,结构级属于最高的抽象层次,当读入Verilog代码或者没有经过映射的db文件后,DC的优化从这个阶段层次开始,可以说,结构级是优化的最高层次,所以对DC来说,这个层次的综合可以称为高层次综合(High-Level Synthesis)。结构层的下一个优化阶段是逻辑级阶段,也是读入映射过的db文件的DC的初始优化阶段。再往下一个阶段是门级阶段,也是优化的最后阶段,这里所要作的工作主要就是GTECH到工艺库的映射。

一、结构级优化

因为结构级是优化过程中层次最高的一级,因此它也是DC可以采用的优化方法最多的一级,它的主要优化方法如下图所示。

1. DesignWare选择

DW选择是结构级优化的一个很主要的特点,在这个阶段DC能够根据设计者施加的时序或者面积的约束在DW的不同实现方式中找到它认为最佳的实现方案。比如加法器的实现方式一共有如下几种:

其中DW Foundation需要有专门的license,而且使用之前还要设置综合库(synthetic library)。

2. 共享子表达式(Sub-Expressions)

这里的子表达式主要是指数学表达式,比如下面这个例子,如果按照原来的语句综合,会包含6个加法器,但是如果表达式之间的公共项提取出来,便可以大大的减小面积,如下图。

如果要直接综合出共享后的电路,可以在编写RTL代码(下图例子为VHDL)的时候强制指定共享项。

3. 资源共享(Resource Sharing)

资源共享的原理与共享子表达式类似,只不过这里指的所谓资源是一些HDL的运算符和表达式,比如加(+)、减(-)、乘(*)、除(/)以及大于(>)、大于等于(>=)、小于(<)、小于等于(<=)。这里举的例子,比如给定一个语句:

它可能有下面两种电路实现:

DC会根据具体的约束条件综合出最符合要求的结构来。

4. 运算符排序(Operator Reordering)

对于下面这个表达式Z <= A+B+C+D(输出Z是施加了一定时序约束),DC最初是按照从左至右的顺序计算的,也就是说它最初的排序如下:

如果几个输入信号到达的时间相同,DC会通过运算符排序优化成下图的平衡的结构,减小延时。

如果A信号较迟到达,则综合出的电路结构会如下:

二、逻辑级优化

在经过结构级优化之后,电路被转化成了工艺无关的GTECH库的形式,这级也称为逻辑级,对于逻辑级优化来说,只有一个方法,那就是——结构化 (structure)或者扁平化(flatten)。

1. 结构化(structure)

结构化是DC在逻辑级的默认的优化方法,它是指:使用电路的一些中间项构成一个多级的电路结构。如下图的电路一共有三级逻辑,下一级的输入是上一级的输出,使用这种优化方法一般情况下能综合出兼顾时序和面积的电路来

结构化电路的典型是奇偶校验电路。

2. 扁平化(flatten)

扁平化是将所有的组合逻辑打平成乘积项和(SOP)的两级结构(由于工艺库单元的类型和驱动能力的限制,最终电路不一定是两级结构),类似于可编程阵列逻辑(PAL)。使用这种结构的特点由于没有利用中间项,综合后电路面积将会变得很大,但是却不一定能取得较好的时序。

扁平化结构的电路和设置扁平化的DC命令如下所示:

综合结构化和扁平化的特点,可以归纳如下——

由于DC默认是用结构化的方式综合逻辑级电路,而且这种方式可以得到兼顾时序和面积的结果,因此我们可以先用这种方式优化。在优化后的电路中找出关键路径,看看关键路径上有没有符合使用SOP电路的模块,再将这些方便使用SOP的模块set_flatten,以便取得最佳的效果。

三、门级优化

门级优化是优化的最后阶段,它所要完成的任务就是将GTECH的电路映射到最终的工艺库中,并且保证映射后的电路不违反设计规则(Design Rule)。

1. 工艺映射

工艺映射包括组合逻辑映射和时序逻辑映射。组合逻辑映射是指DC使用工艺库中的各种门替换GTECH单元,并选择能实现相同逻辑的符合时序及面积要求的单元:

时序逻辑映射的方法和组合逻辑相类似,也是出于速度和面积的考虑,尽量使用复杂的时序单元吸收一部分组合逻辑

2. 设计规则检查(DRC)

对于工艺库的单元而言,Foundry都指定了每个单元的工作条件的限制,比如最大电容(max_capacitance)等等,这些限制也可以称为设计规则(Design Rule),在设计规则限定的范围内,Foundry提供的参数才有实际的意义。比如一个单元允许的最大电容为5pf,而实际工作电路中出现的电容值为10pf,那么这时,便违反了设计规则,单元的参数也就不能确保是准确的了。

因此,DC在作门级优化的时候,在映射的过程中也会检查电路的设计规则,一般的做法是在单元中插入buffer增加驱动能力,或者将小驱动的单元替换为大单元。设计规则检查分为两个过程——DRC I 和DRC II。

DRC I是指Design Compiler在不影响电路的时序和面积的前提下修正违反规则的一些单元,如果在这个前提下不能完全修正,则要进行下一步的检查,即DRC II,这一步的修正必然是以牺牲一部分时序和面积为代价的。

微信公众号

建立了一个微信公众号“Andy的ICer之路”,此公众号主要分享数字IC相关的学习经验,文章主要在公众号上发,csdn会尽量同步更新,有兴趣的朋友可以关注一下!

DC基础学习(四)综合优化的三个阶段相关推荐

  1. DC基础学习(二)Synthesis Flow1

    Design Compiler(以下简称DC)是Synopsys公司用于做电路综合的核心工具,可以将HDL描述的电路转换为基于工艺库的门级网表.本系列主要介绍综合相关的知识以及DC工具的使用. 整体的 ...

  2. JavaSE基础学习(四)—Java核心类库(下)

    目录 思维导图快速预览全文内容 一.异常机制(重点) 1.基本概念 2.异常分类 3.异常的避免 4.异常的捕获 5.异常的抛出 6.自定义异常 二.File类(重点) 1. 基本概念 2.常用方法 ...

  3. Redis基础使用(四)——缓存优化

    1. 如何查看Redis性能 info命令输出的数据可以分为10个分类,分别是: server,clients,memory,persistence,stats,replication,cpu,com ...

  4. python基础学习四:合并Excel表格小程序

    import xlrd import xlsxwriter import os #在原有的基础上,对程序进行完善:因为大多数合并的表格,他们的格式都是一样的,就拿我自己来说, #把很多同学填写的信息进 ...

  5. bootstrap基础学习四篇

    bootstrap代码 Bootstrap 允许两种方式显示代码: 第一种是 <code> 标签.如果您想要内联显示代码,那么您应该使用 <code> 标签. 第二种是 < ...

  6. Python基础学习四 函数

    1.内置函数 Python内置了很多有用的函数,是可以直接调用的. 参考链接:https://docs.python.org/3/library/functions.html 调用函数的时候,如果传入 ...

  7. 程序开发基础学习四(boost::signal2 函数学习)

    在游戏编程中,新的策划需求总是在迭代不停......,对于游戏程序员肯定深有感触吧,遇到这种情况咱只能小小的抱怨下,活还得干.尤其是遇到耦合到很多类的时候,要是直接实现不加抽象的话,那咱的代码就要被拆 ...

  8. Linux基础学习四:Linux常用的命令(非常详细)

    常用的命令  文档帮助命令 help 用法: 命令 --help 示例: dhclient --help man 用法: man 命令 示例:man dhclient空格:下一页b:上一页q:退出   ...

  9. Redis基础学习(四)—Redis的持久化

    一.概述 Redis的强大性能很大程度上都是因为数据时存在内存中的,然而当Redis重启时,所有存储在内存中的数据将会丢失,所以我们要将内存中的数据持久化. Redis支持两种数据持久化的方式: RD ...

最新文章

  1. vim的保存文件和退出命令
  2. 团队愿景和团队章程的问答?
  3. bitdock系统错误_BitDock比特工具栏
  4. HTMLCSS编码规范
  5. java获取C盘下的隐藏目录文件名称
  6. iOS知识点个人归纳总结--Runtime
  7. java 通过模板替换pdf_word模板替换方案 PDF 下载
  8. linux修改私钥的密码,linux使用密钥+密码登录ssh(centos7)
  9. BitHacks--位操作技巧
  10. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_6_方法引用_类的构造器(构造方法)引用...
  11. java 读写 ini 配置文件【IDEA】
  12. js模块化编程发展历程
  13. java多级部门数据权限设计_数据权限设计(转载)
  14. 软素质面试题分享以及一些面试技巧和面试礼仪
  15. Linux 下恢复误删文件
  16. Pboot插件-包含所有Pboot插件功能
  17. 牛逼 装逼 傻逼 的区别
  18. 如何进行图片局部转TXT文档
  19. 想在互联网上年入百万,必须具备这两种能力!
  20. 总结下自己做过的深度召回模型

热门文章

  1. 美国PARKER派克永磁高速伺服电机——GVM电机
  2. java后端和web_从java和web角度分析前端好还是后端好
  3. 情绪如何从边缘系统产生
  4. 利用ChitGPT AI大模型生成费马和笛卡尔简介
  5. win10操作系统如何应对老办公系统(ie8浏览器)的开发
  6. Leetcode-数据结构-217. 存在重复元素
  7. 自媒体怎么赚钱?新手小白日入600+
  8. vue项目使用svg文件
  9. 自动驾驶平台Apollo 2.5阅读手记:perception模块之camera detector
  10. Egret白鹭H5开发-围住神经猫