数字逻辑综合工具-DC-06

——综合优化过程

编译的策略:Top-down
(做设计有两种策略:top-down 和 bottom-up)
设计一定是一种层次化的结构,一层一层地去例化

Top-down只有一层的约束,针对某些模块,可能会有一些特殊的约束
在一个soc系统里面,会有一些真正的工作模块,和一些管理模块,这些工作模块跟clk、rst不会放到一起去做综合,clk、reset这些模块一般会做一些特殊的约束,比如clock gating,会放在额外的脚本里面做
如果采用bottom-up的综合顺序,当出现了glue logic(胶合逻辑),即如果在顶层模块里,并不是只有模块与模块的连接,而是由一个与门连接而成。如果采用bottom-up的顺序,下层模块保持don’t touch,那么还需要针对top层写一个额外的约束(要把glue logic也放进去编译)。
如果这样做的话,一个Soc项目里的顶层会有四五十个模块,针对每一个模块都写一个约束,这个工作量会非常大,而且效果不一定好,所以一般采用top-down的方式。

【compile_ultra】
用在时序约束紧张的时候。相当于打开了很多的开关。
这个命令在compile命令上做了更强的一些优化功能,会把整个模块给打散。

全部打散会有些问题,对于后仿而言,最后只能看到一个顶层,如果后仿有问题,没法确定是哪个模块产生的!
针对一些关键路径会优化,尝试做多次,直到所有的方法都没法满足约束。

这个命令做的一些优化:
1、 结构级优化:比如做了一个加法器(行波进位加法器、超前加法器等等)(比较大的优化)
2、 逻辑级优化
3、 门级优化:局部上的一些优化
DC会尝试着在满足时序约束的同时,将面积达到最小。

如果不满足要求,DC会找出critiical path,对其进行resynthesis

【DesignWare Library】
这是一个soft IP库:加减乘大于等于小于
FIFO、shiftreg、div_seq、ram……
(自己写的没有人家写的可靠)

在设计都进来的时候,link check保存为unmapped .ddc,这个格式里面主要是一些DW开头的器件。

【一些常见的算术优化方法:】

1、 折叠
2、 公共表达式——资源分享
3、 少用乘法
4、 乘以某个常数——把这个常数拆成2的多少次放,做移位相加,替代乘法器

【逻辑复制】

单元的延迟跟两个因素有关:输入的转换时间和扇出负载。
上图有一个关键路径,它的组合逻辑延时比较长,为了减小这个时间,把输入门的负载减小:将逻辑一分为二,对于关键路径,不让它驱动过多的单元,对于约束比较松的路径,可以安排large fanout(以面积换速度)。

【库分析】

等效表达式:DC会针对同一个表达式做不同的表达方式。预先建立好逻辑。
说实话不是很懂。

【边界优化】

有的时候会借助一些常数,可以被优化掉,比如用DFF的QB端,优化过后的信号会出现_BAR的后缀。
问题:做形式验证(把网表跟rtl代码作数学表达式上的等价校验)的时候,需要把DC产生的default.svf文件(一般在工作目录下)交给formality工具,告诉formality这些结构发生了一些改变。否则Formality会不认识这些优化的地方。

【Auto-ungrouping】
这是compile ultra默认的,如果不希望打散,加上命令set_ungroup <references_or_cells> false 命令

例子:

【扫描链-scan】(DFT)哪些地方短路了,哪些地方开路了给扫描出来。一般用这种带选择的触发器来代替一般的触发器,作为扫描链。扫描链的插入必然会带来更大的面积和更长的组合路径。
在综合的时候一般要加入-scan选项,让DC把里面普通的触发器替代成这种带MUX的触发器,看看能不能完成。

在没有做DFT的时候,-scan选项只是插入一个MUX,并没有形成一个链!

【timing_high_effort_script选项】
对时序做最好的优化。
会把时序的优先级提升到超过DRC(Design Rule Check)的优先级!
DRC是工艺厂商的要求,不满足DRC可能会出错。

【-timing】

【-retime】

上图:前面的不满足,后面的有点余量
下图:把前面的一部分组合逻辑挪到后面去,这样前一级就得到了很大的改善。后面一点点的violation可以通过把时钟稍微往后挪一点来改善掉。
Retiming的基本思想:这几个在功能和时序上是等效的

如果不希望这种retiming发生在一些特定的寄存器或者design中,可以通过命令设置

retiming的结果也需要放在.svf文件里告诉Formality

【路径分组】
在一个设计里面可能会有很多的clock,DC会把这些路径根据时钟进行分组

【亚关键路径被忽略的问题】


如果最长路径不能满足是需要求,那么DC会放弃对其它逻辑的一些优化。
(假设COMBO不满足时序要求,中间那个reg-to-reg路径就不优化了。)
——重新分组:这个组的最差的一个挂了,那这个组么得救了,其他组的还能抢救一下。

比如这里,分成Inputs Outputs Reg-to-Reg和COMBO四个组
命令:(既然是路径,就要指定从哪来到哪去(from to))

【critical range】

这个组里,最差的已经提高不了了,现在设置一个范围,在这个范围里面的,都尽量去做一些优化。

【给分定的组指定一个权重】

发现某些组是特别重要的,就把权重提高一点。

三个建议的值:1 2 5 默认的是1。5的重要程度最高。
weight的另外一个例子:

这里换了一种实现DFF的方式,Tsetup变长了,但Tc2q变短了,即提高了CLK路径的优先级,牺牲了别的路径,改善了该路径。

【【操作部分】】



(官方建议critical_range不超过时钟周期的百分之十)

这些值设好了之后要查看一下,report_path_group

license没有compile_ultra,用-map_effort high(发现综合结果不满足要求,回过头来做优化,注意,这种不会做结构级的优化) -area_effort high来代替

把综合之后的网表保存为ddc格式

脚本运行完了之后看时序
report_timing -delay_type max(看最差的那条)


(这是在脚本里把路径分组注释掉之后的结果)
注意,现在只报告了一个路径。而且这个路径属于clk_i路径组。

通过report_path_group来查看分组的情况

(此时没有任何分组)

ungroup之前的电路图:

(此时的设计是分级的)

敲入命令:ungroup -flatten -all之后,只能看到一个顶层了

compile没加-scan选项时的ddc网表:
(在mapped里面,top.ddc)

这是一个普通的D触发器

敲入命令:compile -map_effort high -area_effort high -scan

==>综合出来这样的DFF
这些DFF并没有连成一个链,需要用DFT Compiler去做。(不是所有的芯片都一定要做DFT的)。

【设置了路径组之后的综合】
report_path_group

再执行report_timing -delay_type max


(这边不存在COMBO的路径,所以没有报)

数字逻辑综合工具-DC-06——综合优化过程相关推荐

  1. 数字逻辑综合工具实践-DC-07 ——综合优化(二)和RTL coding 和DFT

    数字逻辑综合工具实践-DC-07 --综合优化(二)和RTL coding 和DFT 主要内容: 1. Pipeline优化 2. RTL设计时的一些注意事项 3. DFT简介 (DFT是后端里很重要 ...

  2. DC课程笔记-数字逻辑综合工具-DC Environment Attributes

    文章目录 课程内容笔记46:57开始至末尾 本节来源网络视频笔记 主要介绍DC的时序timing约束 课程内容笔记46:57开始至末尾 移除设计 remove_design -hierarchy 查看 ...

  3. DC课程笔记-数字逻辑综合工具-DC Synthesis Optimization Techniques

    文章目录 课程内容笔记00:00开始至 本节视频来源于DC视频教程,本节主要约束环境 课程内容笔记00:00开始至 芯片的输出端口要驱动一个负载,如何在DC综合时候就模仿在流片回来后的输出管脚的负载, ...

  4. 数字逻辑综合工具实践-DC-08——静态时序分析(STA)

    数字逻辑综合工具-DC-08 时序分析 综合结束之后,如何确定这个网表能不能用. [Timing Reports] report_timing Incremental 信息包含了Net 和 Cell一 ...

  5. 数字逻辑综合工具-DC-04 ——怎样增加时序约束(Timing Constraints)

    数字逻辑综合工具-DC-04 --怎样增加时序约束(Timing Constraints) 逻辑综合的过程为:转化 优化 映射 另外还有环境约束和面积约束 时序有三个大的方面 input logic ...

  6. 数字逻辑综合工具-DC-11——一些其它命令和综合之后的文件

    对于reset 和clock这种大扇出的信号来说,必须要人为设置为ideal network,不要让DC动它,因为线负载模型对于这些大扇出的情况估算不准. 如果不添加don't touch属性的话,D ...

  7. 数字逻辑综合工具实践-DC-10——CDC约束

    [分频时钟input delay] (找短的间隔) [多时钟output delay] 记得要用add_delay 也是找短的 [时钟之间的uncertainty] 模仿两个时钟之间的偏移量 要用-f ...

  8. DC基础学习(四)综合优化的三个阶段

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

  9. Linux环境下EDA软件的使用——数字IC设计DC综合篇

    Linux环境下EDA软件的使用--数字IC设计DC综合篇   目前,绝大部分集成电路设计所用到EDA软件都是Linux版本,对于芯片工程师,熟悉一款EDA软件是入门的必修课,当然要真正的掌握会是十分 ...

最新文章

  1. 对我而言Linux究竟有什么魅力
  2. python难学嘛-python语言难学吗
  3. 【Mac】安装 tesserocr 遇到的一些坑(‘cinttypes' file not found)
  4. Topshelf 学习 跨平台
  5. mongodb 导出 带条件_将 MongoDB 导出成 csv
  6. excel 双击 计算机,Excel 2016双击文件打开后是空白,再次双击才能打开(或者通过文件,打开才能打开)...
  7. 批处理 设置电脑最佳性能_批处理最佳做法
  8. 常用并发工具类(锁和线程间通信工具类)
  9. 怎么查看数据库服务器型号,如何查看服务器数据库类型
  10. matlab 图像常用函数
  11. exists hive中如何使用_07045.16.2如何使用Hive合并小文件
  12. View4.5测试参考文档1--测试环境规划
  13. Mesos和Docker的集成
  14. Protel99SE应用技术问答(经典)
  15. OPPO发布首款折叠旗舰Find N, 产品+服务高端化布局并行
  16. 基于Python实现的网上购书功能的网站后端
  17. 2013年04月12日 JavaEE+物联云计算就业班-上海
  18. 万亿候苹果,1000000000000 美元的海盗公司 | 摸鱼系列
  19. 镜像站(整理各个镜像站资源)
  20. 计算机问卷调查数据分析报告,调查问卷分析报告怎么写

热门文章

  1. rust和gta5哪个吃配置_10款游戏体感嗨翻天的Steam大作,GTA5险无缘榜单,吃鸡仅排第三...
  2. DS串应用—最长重复子串
  3. 液晶的介电各向异性、双折射特性和电控双折射特性
  4. php emoji 保存 显示不出来,PHP导出带有emoji表情的文本到excel文件出问题了
  5. MobaXterm x11-forwarding
  6. Python实现简单的爬虫
  7. Far planner代码系列(1)
  8. 搜索引擎核心读书心得2:暗网抓取
  9. ip地址简介 ip地址取值0-255 最后一位也可以为0
  10. annotations are not allowed here