03-逻辑综合工具 - Design Compiler
逻辑综合工具DC
IC设计流程,市场-->制定spec-->RTL(同时进行sim,通过alint检查RTL有没有错误)-->systhesis(逻辑综合)-->PR(STA)-->Tape Out
- 逻辑综合将RTL转换为Gate Netlist,这些Gate时没有物理概念的,只是一些逻辑,需要摆放到具体的位置。
- 逻辑综合还需要满足timing,否则会出现亚稳态问题。
- 逻辑正确,Timing没有问题,然后进行优化。
1 什么是逻辑综合?
将前端设计工程师编写的RTL,映射到特定的工艺库(Fab提供)上,通过添加约束,对RTL代码进行逻辑优化,形成门级网表。
- 约束
- area--面积约束
- timing--时序约束
- .......
- 优化
- 删除冗余的逻辑--简化逻辑--cell变少--delay减少--timing更好
- 简化逻辑之后--面积也会减少
- .......
2 逻辑综合在ASIC设计流程的阶段
Idea-->Function description-->RTL-->RTL simulation and verification-->Gate-Level Netlist-->Physical implementation-->Tape out-->Post-silicon verfication
- Physical implementation -- 将门级逻辑转换为实际的物理电路--会使用到physical library
3 逻辑综合的转换过程
3.1 Translation
VHDL/Verilog/System verilog 通过 translation 转换为generic(GTECH) netlist,GTECH netlist 相当于一个中间过程的网表。
- 当DC将RTL代码读入之后,会自动地将代码Translate成GETCH网表。GTECH是synopsys自家开发的一种通用的,独立于工艺的标准库,里面有与门、非门、寄存器等各种基本单元。此时GTECH网表仍然保持和rtl代码的相同的层次结构。
3.2 Logic Optimization
3.3 Gate Mapping
GETCH netlist 被映射为 gate-level standard cells
Design Compiler需要的输入
- RTL description
- Timing constraints
- 工艺库
4 DC工具的流程
- Load library and design
- Apply timing constraints and design rules constraints
- design rules constraints(驱动能力的约束)
- Systhesis the design
- Analyze the rules
- 是否满足timing
- Write out the design data
5 DC综合的方式
使用DC执行逻辑综合,一般有三种方式,通常使用dc_shell配合脚本执行命令,执行综合。
- Design Vision启动GUI
- dc_shell 启动命令行
- batch_mode,将综合使用命令写到syn.tcl脚本中,并记录log
dc_shell -f syn.tcl | tee -i sys.log
6 DC参数设置
6.1 search_path
在综合过程中,设置文件读取路径,让工具去进行搜索文件。设置地文件路径通常包含verilog、library和scripts。
set_app_var search_path "$search_path ./rtl ./scripts ./libs"
6.2 target library and link library
target library是指定工艺库的名称,其中的cell对应于设计人员想要让DC推断出并且映射到的库单元。
target_library--RTL需要mapping到target_library,将lib-->编译到db类型的库,放到target_library中进行综合
link library定义其库单元只用于参考的库名称,也就是说DC不是使用link library中的单元进行推断。
为了更好的了解target library和link library需要先弄明白DC中的设计层次
DC中的设计层次
- top层,包含很多小的module(或者实例化的IP)
- 小的module(不同的.v文件,会在加载设计时和top一起被read_verilog.v加载)
- macros(就比如买一个解码器的IP,ROM,RAM etc)
- 最小的门级单元,比如OR XOR之类。
- target ibrary即目标工艺库,由Fab确定,用哪家的工艺生产芯片,就用他家的目标工艺库。门级单元,即最小的元件在此处找到,以组成门级电路。
- link library是层次3需要的,即将.v(RTL)中例化的IP解释成门级单元的样子,然后再在target library中选取正确的元件组成门级网表。link library可以看成解释设计的功能,link library应该由IP的供应商进行提供,指定搜索路径,得到IP的解释文件resolve design references.
- 在进行逻辑综合的时候在内存中进行寻找,因为已经将小module加载到内存中了。
link
link是介于translate和compile之间地一个小步骤,主要解决设计中所有地reference。设计的instances必须有相应的定义,instance就是上面的几个设计层次中的实例。DC针对不同设计层次的instance的获取:
- 已经translate的GETEC网表可以从内存中获取
- RTL中的例化了foundary提供的stdcell,从GETECH中获取。
- macros(比如IP),将其转变为门级单元,从target library找到元件组成,也是有厂商提供的.db提供的。
- system_library,指定的库包含了工艺库中的单元的图形slow.sdb
# 指定target_library--指定具体工艺库的路径
set_appr_var target_library 90nm_typical.db
# 设定 link_library
set_app_var link_library "* 90nm_typical.db" or
set_app_var link_library "* $target_library"
# link_library 列表
set_app_var link_library [list * ${target_library} macro_library macro_library2]
- *表示从内存中获取,对应的是GETCH网表
- ${target_library}对应std
- macro_library对应macros
- $--表示使用变量
6.3 read_verilog
通过read_verilog将design读入,将RTL转化为GETCH网表,设置一个design作为current design。一般需要进行设置current design,否则系统默认读入的最后一个作为current design。将current design设置在Top上,一般针对于top进行综合。
read_verilog "Top.v A.v B.v"
6.4 current_design
设置current_design,告诉DC针对哪一个对象进行综合。
current_design Top
6.5 source timing constrain
timing constrain也是一些命令,可以将这些命令写到脚本中进行执行。
- Apply timing constrain on current design
- Clock constrain:modeling clock trees
# clock period
create_clock -period 2 [get_ports Clk]
# clock skew
set_clock_uncertainty -setup 0.3 [get_clocks Clk]
# clock transition
set_clock_transition -max 0.15 [get_clock Clk]
# clock latency
set_clock_latency -max 0.7 [get_clock Clk]
- create_clock,做约束的时候或者是检查约束的时候,模型是组合逻辑--寄存器--组合逻辑,组合逻辑就会造成delay,在FF1上升沿,将D端数据抓到Q端,进行数据传输,在FF2上升沿将输入抓入。在FF2上升沿之前,需要保证数据稳定下来,保证抓取数据正确,如果数据不稳定,在FF2上升沿之前数据没有传递到,就会造成FF2抓取数据错误。所以需要满足一个setup time,定义一个时钟,在一个时钟之内,FF1 D端数据要传到FF2 D端,并且保持数据的稳定。
- set_clock_uncertainty,约束margin skew,clock是有抖动的,要留有预量。在前端设计来所,任务Clk到FF1和到FF2的时间是一致的,在后端而言,是同过金属走线连接的,有些cell距离port比较近,有的cell离port比较远,可以通过在近端插入buffer,在远端金属走线上加RC延迟,保证FF1和FF2的timing一致。从clock的port到不同的register的时间会有偏差,叫做skew。
在前端考虑timing的时候,对于可能存在的skew也需要考虑进来。后面比较容易满足。 - set_clock_transition,理想的信号翻转是不需要时间的,但是实际的情况信号完成从0到1,或者从1到0进行跳变总是需要时间的。
- set_clock_latency,从Clk到达D_in消耗的时间。如果一个design中只有一个Clk,可以将latency忽略掉,因为检查的时候检查FF1和FF2之间相对的时间就可以。当design有不同的Clk,clk1和clk2到达的时间不同,如果要检查一个clk驱动的register到另一个clk驱动的register的时候,不仅要考虑两个register之间的相对时间还要考虑clk到register的时间。(clk1->FF1与clk2->FF2)。clk决定了什么时间去lanch。
6.6 timing constrain(II)
对于My_design内部的约束,可以通过set_cloclk的方式进行约束。一个时钟周期之内,信号可以稳定传输,这是reg to reg path 的约束。
对于IO path来说,信号什么时候来是不知道的,可以假设信号经过前一个reg输出后,经过port进入第一级reg。所以从FF1到FF2总体的时间就是一个时钟周期,知道My_design外部的时间消耗,就知道了My_Design的第一级reg的时间。就可以选择合适的cell来代替组合My_design中第一级reg之前的组合逻辑。如何告诉组合逻辑外部消耗的时间,就通过set_input_delay进行设置,告诉DC工具,外部消耗了0.6,里面用时钟周期减掉外部消耗。
# Latest Data Arrival Time at Port A,after Jane's launching clock edge = 0.6ns
set_input_delay -max 0.6 -clock Clk [get_ports A]
- get_ports A--指定从A port到前一级reg消耗的时间
对于正常来说,计算reg to reg,对于My_design的output port,也不是一个完整周期,假设外部还有一个register,知道外部的到下一个register的时间,就知道了当前My_design中reg到output port的时间。
# Latest Data Arrival Time at Port B,before Joe's capturing clock=0.8ns
set_input_delay -max 0.8 -clock Clk [get_ports B]
- -clock Clk--指定哪一个clock
- get_ports B --指定B port到下一级reg的消耗时间
- delay和clock是有关系的,内部使用clock是Clk,外部使用的也是Clk,可以使用同一个时钟周期去减,如果用的不是一个clock,情况会复杂。
6.7 environment constrainu
除了input delay和output delay,Desgin中的每一个cell都会计算delay,比如在My_design中插入了一个buffer,这个buffer的delay是从library中查出的。在library中定义了各种各样的cell,每个cell都有一个delay table,delay table是一个二维的cha表,一个是load compatitence,另一个是input transition。
也就是说对于一个cell来说,它的delay取决于input transition和输出的负载,输出的负载越达,delay越大。对于FF2来说,它的input transition是由前一级传递过来的,对于它的output load是由后一级给它的。
对于My_design中第一级来说,前面一级时port,没有input transition,分析起来比较乐观,为了让条件更加严格,可以通过set_input_transition给它一个input transition。如果对于input transition不是很了解,也可以给一个driving cell。
set_input_transition 0.12 [get_ports A]
对于output来说,它的input transition是从前面一级一级传递过来的,最后传递到一个cell上,但是对于它来说,output load又是缺失的,通过set_load进行指定它后面的load是什么样的情况。
set_load [expr {30.0/1000}] [get_ports B]
6.8 compile/compile_ultra
compile=Logic Optimization + Gate Mapping
- Performs three level of optimization--三个层次的优化
- Architectural level synthesis
在design中有结构进行调整的,工具进行优化。 - Logic level or GETCH optimization
在纯逻辑和算法的层面进行优化。 - Gate-level or mapping optimization
- Minimize area while meeting timing constraints
compile执行的命令
compile
compile_ultra
- To compile a design, use the compile command if you are using DC Expert,or the compile_ultra command if you are using DC Ultra or DC Graphical. Command options allow you to customize and control optimization.
- compile_ultra的优化功能更多一些。在优化的时候优先满足timing和DRC,area优先级是最低的。
6.9 report_qor
通过report_qor报告结果
report quality of result(qor) for a synthesis summary
- 报告信息
- levels of logic是逻辑级联数,相当于一个信号经由几个LUT串联而来,data path delay就是走线延时了,和逻辑规模、布局、扇出数有关。
2.Timing - clock period
- WNS:Worst negtive slack
- TNS:total negtive slack
3.cell count--cell数量 - Leaf cell count
3.Area - Cell area
6.10 report_timing
report_timing
- The report_timing invokes DC's Static Timing Analyzer
- Break the design down into individual timing paths
- Analyzes each timing path for max-delay timing
- DC中是不会优化hold的,优化setup通过优化组合逻辑进行。setup来说是delay太大了,减小需要进行优化组合逻辑。对于hold来说,是delay太快了,需要进行延缓,可以插入buffer进行优化hold。
- header部分
- startpoint--timing path开始;并说明startpoint是由哪个时钟进行capture和launch的
- endpoint--timing path结束;并说明endpoint是由哪个时钟进行capture和launch的
- path group--dc中path group根据capture clock进行分的,同一个capture clock的timing path分到同一个path group
- path type--max 表示setup,min表示hold
- 对于这条path经过的所有cell
reg1--->reg0
- data arrival time
- clock
6.11 output
write_sdc my_design.sdc
write -f ddc -hier -output my_ddc.ddc
write -f verilog -heir -outout my_design.gv
03-逻辑综合工具 - Design Compiler的更多相关文章
- Tcl与Design Compiler (八)——DC的逻辑综合与优化
本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 对进行时序路径.工作环 ...
- Tcl与Design Compiler (七)——环境、设计规则和面积约束
本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 本文的主要内容是讲解( ...
- Tcl与Design Compiler (十二)——综合后处理
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 概述 前面也讲了一些综合后的需要进行的一些工作,这 ...
- Design Compiler 综合
综合(synthesis) = 转换(translation) + 优化(logic optimization) + 映射(gate mapping): 转换阶段将HDL语言描述的电路用门级逻辑实现. ...
- Tcl与Design Compiler (二)——DC综合与Tcl语法结构概述
1.逻辑综合的概述 synthesis = translation + logic optimization + gate mapping . DC工作流程主要分为这三步 Translation : ...
- Tcl与Design Compiler (五)——综合库(时序库)和DC的设计对象
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 前面一直说到综合库/工艺库这些东西,现在就来讲讲讲 ...
- Tcl与Design Compiler (十一)——其他的时序约束选项(二)
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 前面介绍的设计都不算很复杂,都是使用时钟的默认行为 ...
- Tcl与Design Compiler (十三)——Design Compliler中常用到的命令(示例)总结
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 本文将描述在Design Compliler中常用 ...
- Link带参数的Verilog模块(Design Compiler)
在Design Compiler中,Verilog文件可以用read_verilog命令读入,用link命令连接.以下是连接两个文件RegisterFile.v和Test.v的脚本: # Read d ...
- Tcl与Design Compiler (一)——前言
已经学习DC的使用有一段时间了,在学习期间,参考了一些书,写了一些总结.我也不把总结藏着掖着了,记录在博客园里面,一方面是记录自己的学习记录,另一方面是分享给大家,希望大家能够得到帮助.参考的书籍有很 ...
随机推荐
- JUC(2)使用condition实现精准通知唤醒
package com.orderPC; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks. ...
- Cenots7 离线安装部署PostgreSQL
1 PostgreSQL源码包下载并复制 1.1 PostgreSQL源码包下载: 访问PostgreSQL官网 选择所需版本进行下载,本次下载安装版本为v14.5 1.2 复制源码包至服务器 使用S ...
- 探究Presto SQL引擎(4)-统计计数
作者:vivo互联网用户运营开发团队 - Shuai Guangying 本篇文章介绍了统计计数的基本原理以及Presto的实现思路,精确统计和近似统计的细节及各种优缺点,并给出了统计计数在具体业务 ...
- jupyter初体验
安装: 1.若是已经安装了anaconda,则通过 jupyter notebook 命令进入: 2.若是只安了python: pip3 install --upgrade pip 对pip进行 ...
- 万万没想到,除了香农计划,Python3.11竟还有这么多性能提升!
众所周知,Python 3.11 版本带来了较大的性能提升,但是,它具体在哪些方面上得到了优化呢?除了著名的"香农计划"外,它还包含哪些与性能相关的优化呢?本文将带你一探究竟! 作 ...
- 【笔记】CF1659E AND-MEX Walk 及相关
题目传送门 位运算 设题目中序列 \(w_1,w_1\& w_2,w_1\& w_2\& w_3,\dots,w_1\& w_2\& \dots \& ...
- 使用 Go HTTP 框架 Hertz 进行 JWT 认证
前言 上一篇文章简单介绍了一个高性能的 Go HTTP 框架--Hertz,本篇文章将围绕 Hertz 开源仓库的一个 demo,讲述如何使用 Hertz 完成 JWT 的认证与授权流程. 这里要说明 ...
- Go语言核心36讲06
我已经为你打开了Go语言编程之门,并向你展示了"程序从初建到拆分,再到模块化"的基本演化路径. 一个编程老手让程序完成基本演化,可能也就需要几十分钟甚至十几分钟,因为他们一开始就会 ...
- AR路由器如何配置Portal认证(二层网络)
规格 适用于所有版本.所有形态的AR路由器. 说明: 4GE-2S.4ES2G-S.4ES2GP-S和9ES2单板不支持NAC功能. 组网需求 如图所示,某公司接待室需要部署一套身份认证系统,对接入网 ...
- 【element】el-table-column日期格式化
要对一列日期进行格式化.可使用formatter属性,它用于格式化指定列的值,接受一个Function,会传入两个参数:row和column,可以根据自己的需求进行处理. 参阅element官网 在e ...