DC知识点总结

编写脚本用于处理综合报告信息

在分析综合报告的时候,用户往往只关注部分重要的的报告信息。而一次综合流程输出的报告数目比较多,在阅读和分析过程往往会令人无从下手,因此设计一个脚本文件,当用户在./report文件下执行脚本后,自动生成一个报告总结,汇总需要用户关注的报告信息。

Tcl脚本思路

伪代码的书写思路大致如下所示,具体的代码则需要更加细致的补充

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 获取当前目录绝对位置和目录下的文件名
filepath = pwd
filename = [ eval ls ]
# 对文件名进行处理
split $filename "\n"

# 遍历文件名
foreach line $filename {
# 判断文件名,正则匹配,选择想要的文件
if {string first $line} {
file copy $line $filepath/report_review
} elseif {
# 继续进行其他字符串匹配
}
}
DC Flow Summary

  上述图片是实际项目过程中的命令执行流程,在实际的工作环境中,每一步骤都会处理上一步骤的环境配置,因此每一次都会加载上一次的信息,这是一个重复的过程,因此在脚本环境中,会出现重复读入输入,并利用同一个命令输出每一步骤的报告。

  在设计中,实际的效率并不高,特别是当设计模块已经到达千万,甚至上亿门之后,综合要求更多的软件运行时间,如果某一步骤运行出错,会导致下一步骤无法运行,这对综合人员来说也是一种压力,特别是在后端进度实际就是为了给前端节省时间的情况之下。

  在上图的内容中,综合过程可以概括为compiler+elaborate,之后的insert_dft 属于DFT工程师的设计内容在实际的过程中,综合工程师可能在了解原理的情况下进行dft的插入

DC优化设计方式:给指定功能提供最小、最快的逻辑实现。
DC的过程:综合HDL,将其转换为optimized, technology-dependent, gate-level design. 支持flat 和 hierarchical design, 支持组合和时序设计,主要进行面积,时序,功耗优化。

DC工具简介

DC Expert keyword: Wire load Mode, WLM
DC Ultra keyword: concurrent(并发) advanced optimization,high performance design, Topographical technology-可以用来精确估计设计的物理信息
DC Graphical keyword: optimize MMMC design, reduce congestion, improve runtime in ICC, floorplan

DC Expert Feature

  1. 层次化编译(bottom-up or top-down)
  2. 全编译,增量编译
  3. 为复杂的 Flip-Flop 和latch 做时序优化
  4. 基于latch设计的时序补偿
  5. 时序分析
  6. 命令行及GUI

DC Ultra Feature(相比 DCE 增加的)

  1. 更快的运行时间
  2. 先进的算法优化
  3. 集成datapath partition and synthesis
  4. 先进时序分析
  5. 先进的延时优化算法
  6. 先进的leakage power优化
  7. register retiming(工具通过在组合逻辑间移动register优化时序)
DC Ultra in Topographical technology
  1. 多电压多供电设计
  2. Concurrent MMMC优化,减少迭代次数提高,获得结果的时间效率
  3. 和ICC共享 Placement以及优化技术,使用更准确的数据处理,提高设计质量

DC Graphical Feature

  1. 优化MMMC design
  2. 减少Routing Congestion
  3. 提高area, timing与ICC的联系
  4. 提高在ICC中的运行时间与可布线性
  5. 创建和修改Floorplan (using Floorplan Exploration)
  6. Physical guidence technology,包含enhanced placement,提高QoR等能力

DC in Design Flow

DC in Design Flow

DC术语

尽管下面术语有轻微的不同,在DC manual 中可以看作相等的含义。

Synthesis: 指为RTL生成 gate-level netlist的过程,过程包含read design 和 optimize design
Optimization: 是Synthesis中的一步操作,指完成(选择)满足设计约束的library cell 集合
Compile: 是Design Compiler 的过程,用来执行synthesis 和 optimization

Design

Design:实现逻辑功能的电路描述。
Logical-level Design: 使用 Boolen equation 实现
Gate-level Design: 使用 Interconnect cell 实现

Flat Design: 不包含子设计,只有一个结构层次,且只包含library celll
Hierarchical Design: 包含子设计,子设计也可以包含子设计,创建多个层次结构

Reference: 一个用来搭建更大电路的library component or design
Leaf cell: 只包含一个设计的unique instance
Port: 端口拥有方向,input, output, inout

DC支持的Flow类型

Full compile: DC map、optimize整个设计,产生一个gate-level netlist,并且如果设计中存在已经mapped cell也会被 unmapped,该Flow不会保护已经存在的netlist结构。

Incremental compile: DC 可以通过改善设计结构提高design QoR,它是在init compile的基础上进行mapping, 主要集中在未满足约束的area设计上,已经存在的netlist会被保护起来,mapping 优化只有在能够改善设计的基础上被采用

编译策略

Top-down: top-level design 和子设计共同编译.
Bottom-up: 子设计分开编译,从底层一直变异到top-level.
Mixed: 小模块使用Top-down,大模块使用Bottom-up.

Optimization

基于约束与变量进行优化,将设计转换成library cell,其理念是如果设计能够减少功耗且不增加其他设计模块的功耗,则可以采用该cell,完成优化

Design Compiler Mode

Wire Load Mode:线性负载模型,延时计算使用估计,精度较差

Topographical Mode:拓扑模型,延时计算精确性更高

​ Multimode: 多corner,多mode

​ UPF Mode: UPF低功耗

WLM:在默认情况下,dc_shell会启用WLM, 使用线性负载进行时序预估,此时compilecompile_ultra都是在WLM下进行synthesis过程

Topographical: 需要命令dc_sell -topographical_mode启用,此时compile_ultracompile_ulra -spg都工作在拓扑模式,且-spg工作在DC Graphical模式,会使用到后端Floorplan的物理信息。

Setup File

DC 从三个文件位置读取.synopsys_dc.setup文件

1
2
3
The Synopsys Root directory
Your home directory
The current working directory
Name Rules

一些制造厂可能会自己修改命令规则,比如将Design Ware中的cell 转换成U , 将 reset转换成RET

用户也可以通过命令修改命名规则,define_name_ruleschange_name可以用来改变port 和 net的名称

dc_shell执行的程序过程

1.创建log文件

2.读取.synopsys_dc.setup文件

3.Batch Mode下执行脚本文件

4.展示DC应用的信息

重定向标准输入输出

重定向命令可以分成三个命令:

1
2
3
4
puts "hello world" > file.log	# 输出到file.log中,且会覆盖文件之前的内容
puts "hello world" >> file.log # 在文件末尾增加file.log内容,不会覆盖文件之前的内容

redirect file.log {plus 12 13} # 将12+13的结果输出到file.log中。

The Synthesis Flow

Synthesis Flow

Using Multicore Technology

DC 支持使用多核技术完成程序运行任务,每个license支持 8 cores, 可以使用命令设置多核功能

1
set_host_optiops -max_cores 8  # 设置最大运行核数为8个,增加并行执行任务数,减少运行时间

通过多核技术提高运行时间

report 或者 check命令会增加脚本运行时间,为了减少运行时间,可以并行多核执行命令

1.在DCG mode下,可以使用命令redirect -bg指定后台运行的命令以及执行命令的cores。但是后台最多只能指定两个后台运行的任务,只有后台活跃任务少于两个,剩余的任务才能运行.支持 report analysis等命令
2.在redirect -bg命令使用时,需要关闭set_svf命令,等redirect -bg使用完成之后,才能继续使用。

parallel_execute用来并行执行命令,如果默认没有update_timing,则parallel_execute会自动执行update_timing

在综合中划分模块

综合中,模块划分可以减少综合时间,但是查的划分会增加block的尺寸,增加优化时间。

考虑设计重用划分

设计重用可以减少设计时间,根据设计重用的目的进行划分可以利用实例化设计减少设计时间

保存组合逻辑设计完整性

1.将相关的组合逻辑和它的目标寄存器组合在一起
2.消除glue logic(胶连逻辑), “Do not add glue-logic at the top level”的意思就是说在设计的顶层连接各个子模块的时候要直接相连,而不要插入一些简单逻辑来连接各个子模块。

以寄存器作为输出

为了简化约束定义,将寄存器作为全部模块的输出。对约束编写有两个好处:
1.一个独立模块的输入驱动能力总是和平均的输入驱动能力相等
2.前一个模块的输入延时,总是和Flip-Flop路径延时相等,这样的话不需要考虑只有组合逻辑的路径,也就能够更好的进行时序预算

根据设计目的划分

设计如果为了更好的面积优化以及 timing critical ,则可以根据设计目的进行划分,这样就可以对特定的模块采用针对性的约束指定优化策略

根据编译技术进行划分

当设计中出现高度结构化的设计和随机设计时,可以对不同的模块采用不同的编译策略
1.高度结构化电路设计:例如,错误检测电路,这种电路包含大量的OR tree ,更加适合结构化编译
2.random design : 在flatten design 中出现的设计策略

保证共享资源的一致性

资源共享只会出现在verilog中的always 语句块,DC 可以使用资源共享获取更好的设计质量,如下图所示:

设计资源共享

保证用户定义资源和驱动逻辑的完整性

user-defined resource是用户自定义的函数,程序或者是Macro cell,DC不会自动创建这些资源的实例化设计,当一个user-defined resource 实例化无法满足设计要求时,可以手动增加实例化设计的数目,来完成设计要求。

image-20211023152026364

隔绝特定功能

可以通过功能在Top-level进行模块划分,例如隔离异步设计模块可以缩小STA问题分析的范围以及确定可测试性设计范围。

隔绝特定功能

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!