design compiler
DC(Design Compiler)是Synopsys公司的logical synthesis工具,它根据design description和design constraints自动综合出一个优化了的门级电路。它可以接受多种输入格式,如HDL、Schematics、Netlist等,并能生成多种性能report,在reducing design time的同时提高了设计的性能。
支持 .db、.v、.vhd、.edif、.vgh、.lib等,.db一般是厂商的单元库;.v是veilog的后缀;.vhd是VHDL的后缀;.edif 和 .vhd是两种形式的netlist。
提供 .db、.v、.vhd、edif、.vgh等,并可以输出sdc、sdf等相关格式文件。
DC是把HDL描述的电路综合为跟工艺相关的门级电路。并且根据用户的设计要求,在timing、area、power上取得最佳的效果。在floorplanning和placement和插入时钟树后返回DC进行时序验证。
帮助可以用3种求助方式:
1. 使用SOLD,到文档中寻求答案
2. 在命令行中用man+ DC命令(我最喜欢这种)
3. 在命令行中用info+ DC命令
SOLD文档可以在teminal中输入sold&执行。
$> sold&
或者用命令 which dc_shell找到dc的安装目录。找到online目录。
综合设置提供必要的参数给DC,使工具能够知道进行综合时所需要的必要的信息,如:工艺库,目标库,标志库等等。要在.synopsys_dc.setup上设置好这些参数。而.synopsys_dc.setup要在三个目录下有说明,一个是synopsys的安装目录,一个是用户文件夹,最后一个是工程目录。由后一个设置覆盖前一个文件。
具体参数包括:search_path, target_library, link_library, symbol_library
target_library是在synthesis的map阶段时需要的实际的工艺库。
链接时需要的库,通常与library相同,设置时,需要加“*”,表示内存中的所有库。
该参数指定库的存储位置
DA是 Design Analyzer的简称,它调用DC来进行综合,但是它是图形化的,可以看逻辑电路图,当然需要你的库有symbol库.
这个问题似乎很幼稚,shell接口当然可以用,但我们大部分人已经习惯使用windows这种友好的图形化界面,恰好DA是图形化的,非常适合初学者!不过本人强烈建议使用shell接口的。synopsys的synthesis包括dc_shell(这是synopsys自带的)和dc_shell -tcl_mode(script命令遵循tcl语法格式)。
1.13 SOLD是什么?
SOLD是 Synopsys OnLine Document的简称,基本包括了synopsys公司的所有工具的文档集合.
我们知道,DC综合过程包括3个步骤:translation + logic optimization + mapping
transition 对应命令为 read_verilog(read_vhdl等)
logic optimization 和 mapping 对应于 compile
logic optimization 和 mapping 均在compile命令完成,但是可以指定使用特殊的优化方法:structural 和flatten,建议大家在synthesis时同时生成structural 和flatten格式的netlist,然后打开看看到底有什么不同之处。
DC script. 是一组dc 命令的集合,使得综合可以流程化也易于管理。
路径(path),是DC中的一个重要概念。它包括4种路径方式:
1 input到FF的D端。
2 FF的clk到另一个FF的D端。
3 FF的clk到输出Q。
4 input到output。
基于路径的综合就是对这四种路径进行加约束,综合电路以满足这些约束条件。
参数的单位由所使用的库决定,在读入库之后,可以用report_lib去看库的信息,里边有详细的单位说明
设计变量:一共有八种:Design, cell, reference, port, pin, net, clock, library。其中cell是子设计的例化,reference是多个子设计例化的通称,port是design的输入输出,pin是cell的输入输出。
这两个概念是DC中path概念的起始点和终点:
2 终点可以是FF的data和output
一个是全部查找包括:all_inputs , all_outputs, all_clocks, all_registers。
设计是DC中的重要对象,你所要综合的东西就叫design,确切的说是你所要综合模块的top文件。
在design中,instance的子设计,称为cell。
当存在一个模块被多次例化,那么该模块就称为reference
使用analyze + elaborate 或者 read_verilog、read -f verilog、read_vhdl、read_file 命令。
read_file 是可以读取任何synopsys支持格式的;analyze和eloborate只支持verilog和VHDL两个格式,但是他们支持在中间过程中加入参数而且以便以后可以加快读取过程。
方法一:使用 uniquify,就是把引用几次那么就在内存中换名引入多个子设计,适用于不同时序约束
确定所有文件是否均存在并把它们链接到当前设计。
是指芯片物理上的参数,比如电压,温度等。
使用set_wire_load_model 命令,
读取库文件到DC中,使用report_lib看有多少可用的线载模型
使用set_operating_conditions
一般可以分为最坏(worst case)、典型(typical)、最佳(best case)。
由于我们要做的是一颗要在实际环境中正常工作的芯片,而温度和环境对电路的性能有很大影响,因此为了尽可能地模拟芯片工作,设置合适的工作环境信息是非常必要的。
语法检查,建立GETECH库(大家可以自己去搜索什么叫GETECH库)值得注意的是,read命令不自动执行link操作。
GETCH库是由软宏(soft macros)组成的,是加法器,乘法器之类的东西,这些组件都是在DW里引用的。
我没有用过!暂时没有答案
我没有试过!暂时没有答案
dc_shell -tcl -f
一个是基于HDL的结构优化转化为GETCH结构;基于GTECH的逻辑优化,包括架构(strcuture),打平(flatten),转化为优化过的GETCH;基于GETCH的门级优化,主要作用是映射到实际的工艺库中。
约束分为design constraint和optimization constraint。design constraint不由用户确定,已经由所采用的库确定了,用户只能添加进一步的约束。optimization constraint分为两个方面,timing constraint和area constraint。timing constraint又可分为组合电路的约束,时序电路的约束以及输入输出的约束。
支持,synopsys支持dc_shell 和dc_shell -tcl_mode。前者是SYNOPSYS的内部语言,后者遵循tcl语法。
使用set_dont_use 命令
总的分为:area constraint 和 timing constraint。
set_max_area
描述一个clock包含两个因素:频率和相位。
使用create_clock 建立时钟constraint。
如果存在PLL,那么首先对输入的初始时钟用create_clock进行约束。
再用create_propagated_clock 对PLL输出时钟在基于输入时钟进行约束,或者直接用create_clock,
虚拟时钟是指在当前要综合的模块中不存在的物理时钟。比如,设计外的DFF的时钟。
建立这样的时钟有益于描述异步电路间的约束关系,不过本人在实际工作中基本不设置!
DC支持对时钟的T,waveform,jitter,skew,latency 描述,请大家务必搞清楚jitter和skew得区别,
使用set_clock_uncertainty -setup(-hold) 约束时钟的jitter
使用set_clock_uncertainty 约束时钟网络的skew
使用 set_clock_latency -option ,option is source or network,the default is network。
端口的外部条件包括:输入驱动大小,输出负载的大小,扇出大小。
可以使用set_dirive 和set_driving_cell,或者用set_input_transition,注意这三者区别!
使用set_load 对输出电容值进行约束,单位根据工艺库的define所定。
我们知道,基于path会有四种路径形式,DC中提供
create_clock 定义寄存器和寄存器之间的路径;
set_input_delay 定义输入与寄存器之间的路径;
set_output_delay 定义寄存器与输出之间的路径;
set_max_delay 和 set_min_delay定义输入和输出的组合路径;
定义输入延时,来约束设计中输入逻辑的时序
定义输出延时,来约束设计中的输出逻辑的时序
组合电路有set_max_delay 和set_min_delay进行约束
2.17 如何对电路的速度进行约束?
使用create_clock
加上set_max_delay重新约束,这样综合工具就会按照set_max_delay 的值尽量满足要求,不过这样会增加design的area,如果timing还是不能满足,那只能修改设计。
对某一路径使用set_false_path
DRC是电路必须满足的设计规则,使用
set_max_capcitance
set_max_fanout
set_max_tansition
使用set_flase_path使得某些路径不进行timing check
使用set_multicycle_path 对路径进行约束
使用reset_path
由于综合时,默认三态门是enable的,所以对某些路径要设置set_false_path
对门控时钟电路进行setup和hold检查,使用set_gating_clock_check
使用set_dont_touch_network,请注意和set_dont_touch用法的区别
2.27 如何修正hold 时间冲突?
加入set_fix_hold约束,这步约束在front-end遇到时一般不考虑,留给back-end公司处理!
可以使用top-down 和bottom-top。
仅需提供单一TOP的script
将设计作为一个整体,可得到较好的结果
对多时钟的综合更为适合
每个子模块都有自己的script,便于管理
当一个模块改变时,不用重新综合所有设计
使用characteristic
编译时间长
子模块改变则整个设计都要重新综合
对多时钟设计综合效果不好
3.6 bottom-up方式有什么缺点?
需要维护多个script
设计映射为门之后,时序和面积约束可以再定义,incremental确保维持以前的电路结构,只作改善时序和性能,不添加不必要的逻辑。
3.8 ...
report_area
report_timing,详细请man report_timing 这个命令,看看它的多种option用法
report_cell 但是缺省的report_cell只能看current_design下面的一级的cell的面积,因此就有两种方法解决这个问题:
1. 用report_cell [get_cells -hier *]可以看所有的cells面积
2. 用list_design列出所有的design, 然后改变current_design到你所想要看的那一级的cell, 然后直接用report_cell.
report_design
使用report_constraint -all_violators
使用report_net
4.6 如何看整个综合后的网表中使用多少种类型的电路门?
使用report_hierarchy
使用report_timing_requirements,请大家思考一下有哪些timing exceptions
design compiler相关推荐
- verilog case语句_浅谈Design Compiler -- Verilog语言结构到门级的映射
昨天的文章中,我们了解到Design Compiler(DC)作为Synopsys公司开发的一款用于电路综合的EDA工具,在全球数字电路市场去得了巨大的成功,它的设计初衷是将用Verilog HDL语 ...
- Tcl与Design Compiler (二)——DC综合与Tcl语法结构概述
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 1.逻辑综合的概述 synthesis = tra ...
- Design Compiler指南——后综合过程
本文我们着重讨论使用Design Compiler综合大型设计时要注意的一些问题,比如怎样调整综合方法,出现约束违反后怎样修正,怎样给不同的子模块作时序和负载预算,以及给整个设计在具体综合之前先作一个 ...
- Design Compiler指南——设计综合过程
在前面一章介绍完施加约束之后,接下来要做的工作就是将设计进行综合编译(compile),本文我们将主要讨论综合编译的过程.主要分为这样几个部分: 优化的三个阶段及其特点 编译的策略 编译层次化的设计 ...
- Design Compiler指南——施加设计约束
Design Compiler是一个约束驱动(constrain-driven)的综合工具,它的结果是与设计者施加的约束条件密切相关的.在本文里,我们主要讨论怎样给电路施加约束条件,这些约束主要包括- ...
- Design Compiler指南——预综合过程
预综合过程是指在综合过程之前的一些为综合作准备的步骤,包括Design Compiler的启动.设置各种库文件.创建启动脚本文件.读入设计文件.DC中的设计对象.各种模块的划分以及Verilog的编码 ...
- Design Compiler指南——概述和基本流程
综合是前端模块设计中的重要步骤之一,综合的过程是将行为描述的电路.RTL级的电路转换到门级的过程:Design Compiler是Synopsys公司用于做电路综合的核心工具,它可以方便地将HDL语言 ...
- 关于deepin系统安装design compiler的问题解答
关于deepin系统安装design compiler的问题解答 Design Compiler是Synopsys综合软件的核心产品.它提供约束驱动时序最优化,并支持众多的设计类型,把设计者的HDL描 ...
- Tcl与Design Compiler (十二)——综合后处理
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 概述 前面也讲了一些综合后的需要进行的一些工作,这 ...
- sip 时序图_Tcl与Design Compiler (五)——综合库(时序库)和DC的设计对象(下)
~ 回复 以下关键词 查看更多IC设计教程 ~ 目前支持的关键词有: Innovus ICC or IC Compiler DC or De ...
最新文章
- 如何为某些HTML标记存储任意数据
- 1.在VS2010中文版中开发WP7程序
- python httplib2的安装
- 前端学习(1487):axios介绍
- 王者-寻找庄家蛛丝马迹
- Ubuntu免密码输入关机脚本
- lua32位和64位字符串和Uint之间的转换
- 复盘-对过去的事情做思维演练
- sig值怎么计算_spss结果中 F值 t值及其显著性 sig 的解释
- 存储器基本概念及分类介绍
- 关于DBF文件格式的详细说明
- CTF Blind pwn题型学习笔记
- Dagger2利器系列二:懒/重加载+Component 的组织关系
- 微信小程序实现共享数据
- JVM00_面试官对类加载器子系统、运行时数据区、内存分布、执行引擎的灵虚拷问,你能坚持到第几问?
- 打得京东当当响 | 一点财经
- ERROR: Failed building wheel for box2d-py 解决方法
- macOS Ventura 13.0 (22A380) Boot ISO 原版可引导镜像
- 7-55 Keven裂了
- Fortona 4D欧洲之星能维持多久,多久做一次,
热门文章
- 输入一行电报文字,将字母变成其下一字母(如’a’变成’b’……’z’变成’a’其它字符不变)。
- 20181014NOIP模拟
- 学习记录:使用STM32F1看门狗
- 我的世界服务器控制台发消息,我的世界控制台指令大全 使用起来超方便
- [渝粤教育] 西南交通大学 体育健康课程Ⅰ—太极功夫 参考 资料
- 网页设计与制作第一课:什么是html,html基础与文本控制标记
- java程序占用cpu100%问题查找方案
- Android 工具:Show GPU Overdraw
- 为什么说荆州松滋刘氏采穴堂是刘开七、刘广传的后裔
- [Mugeda HTML5技术教程之2] Mugeda HTML5富媒体平台简介