Tcl与Design Compiler (四)——DC启动环境的设置
本文属于原创手打(有参考文献),如果有错,欢迎留言更正;此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner
主要内容有:
·启动环境的概述
·路径变量的定义与解释
·库的指定与解释
(1)启动环境配置简述
我们按照前面的基本流程使用DC进行设置,但是这里主要使用的是脚本,因此不能一条一条命令进行演示其效果。在启动DC之前,首先要配置DC的启动环境,也就是那些库的设定。配置DC的启动环境主要是.synopsys_dc.setup配置文件的书写。.synopsys_dc.setup这个文件就是DC的配置文件,它配置了DC启动过程中要执行哪些命令、干哪些事。其中,search_path 、target_library...等等(后面会讲,放在这里给大家留个印象),这些是DC内部的变量名称,用来告诉DC做那些事的方法。
一般.synopsys_dc.setup 文件有三个:①一个在synopsys的安装目录下,这个文件最好不要动;②一个在用户目录下,这个文件没事也不要动他;③还有一个当前工作目录下,也就是启动DC的目录下(没有就需要自己创建),这个是要我们自己写的,这个想怎么动就怎么动。我们配置DC的启动环境,就是在启动的目录创建.synopsys_dc.setup并且修改它。
此外,这个文件名字不能随意更改,按照默认的名字来,DC在启动的过程中会自动读取各个名字的文件。(如果改变了它的名字,就需要通过source命令source一下)。
(2).synopsys_dc.setup配置文件的书写
如下图所示,一般设计的的目录文件夹管理:
主要关注两个文件夹,一个是rtl:放置.v设计文件,一个是syn文件夹:综合时的信息。
进入综合文件夹:
有5个文件夹,mapped是存放综合完成之后的文件的目录,这些文件是经过综合库映射的。Unmaped是存放综合时没有经过工艺库映射所得到的文件目录。
Report是存放报告(比如时序报告、面积报告、DC启动报告等)的目录。Script是存放约束脚本的目录。Work就是启动DC的目录了,在这个目录里面,我们要进行创建.synopsys_dc.setup文件并且编写这个文件:
文件的内容主要是指定这个四个库(的名称和路径):
当然这个不是这个文件的全部内容,这个文件的全部内容如下(后面有这个文件内容的讲解):
(3).synopsys_dc.setup的讲解
简单的.synopsys_dc.setup文件如上图所示了,总共79行。Echo那些行都是在终端打印相应的信息而已,提供我们判断DC是否按照我们设定的环境进行启动以及启动到哪一步。“#”开头的是注释部分。31行(包括31行)之前的set语句是进行定义变量,也就是把路径用变量来代替,在进行设置库的时候,就可以使用这些变量,而不是用长长的路径了,同时也让别人了解你这个路径是什么意思。依次定义:
①设计目录(SYN_ROOT_PATH)的路径:也就是你的总的设计路径,在这个路径下面进行仿真、综合、形式验证等等的操作。
②RTL文件的路径(RTL_PATH):放置RTL文件的路径。
③配置文件的路径(CONFIG_PATH):放置DC的一些配置文件,这里的设计没有任何的配置文件,因此没有进行设置。
④脚本路径(SCRIPT_PATH):放置约束脚本的路径。
⑤未映射文件的路径(UNMAPPED_PATH):放置DC没有用工艺库进行映射时得到的文件,也就是GTECH格式的文件(什么是GTECH文件,最前面第一点的时候就说了的哈),或者以ddc格式保存的未映射的文件。
⑥映射后的文件的路径(MAPPED_PATH):放置DC最终优化后得到的结果,可能是以ddc的形式保存。
⑦放置报告的路径(REPORT_PATH):放置DC运行过程中的一些报告,比如启动报告,使用约束脚本运行中的报告,时序报告、面积报告等,通过查阅这些报告,分析DC是否按照我们预料中的情况进行启动、运行,分析设计是否满足要求等。
⑧DC运行时的路径(WORK_PATH):启动DC时的路径,也就是DC工作时的路径。
⑨DC的路径(DC_PATH):也就是安装DC的路径。
⑩define_design_lib work -path $WORK_PATH:这个就不是定义变量了,这个是DC内部命令格式,指定设计和库的工作路径。
⑩①符号库(Symbol library )的路径(SYMBOL_PATH):指定你符号库的路径,至于什么是符号库,前面也有解说了。关联一些图形化库,使用GUI界面的时候,就可以看到综合得到的门级网表的图形化界面。否则看不到。
由于我用的是台积电90纳米的库,图形化符号库及其路径如下图所示:
第一个就是库的路径看,后面那个是库的名称;由于我们需要定义的是库的路径,因此自然是写路径,而不是写库的名字。
附注:.sdb是DC使用的库,是给DC看的,我们查阅得到的是乱码;而.slib是给我们看的,我们可以用vim打开。
⑩②工艺库(technology library )的路径:也就是链接库(link library) 、目标库(target library) 的路径,这两个库合称为工艺库。至于工艺库里面的具体信息,后面会进行讲解。我的库的路径和名称如下:
这里的.db 格式是用来给DC用的,也就是说,DC读取工艺库文件,就是读取.db这种格式的文件;.lib是给工程师看的。此外还有什么fast、typical、slow这些名称,这些是库的工作模式,一般情况下,我们都选择slow,在最慢的情况下DC进行综合,得到的时序和面积都OK,那么在其他情况下肯定都OK了的。.pdb,.plib是对应库的配置文件。
从上面中我们会发现,定义(路径)变量用的都是set(跟tcl语法一样),因此这里就要强调一下:
set : 自己自定义的一些变量,方便定义系统变量的时候,不用那么麻烦;主要是定义。
set_app_var :定义DC内部的系统变量、指定DC内部的连接等。主要指定有:search_path、synthetic_library、target_library、link_library、symbol_library 以及其他的一些命令开关等。
当定义完这些“自定义”的变量之后,我们就要做一些正经事了,就是指定DC要用到的库了。
⑩③指定搜索路径(Search_path):当读入了一些工艺库时,忘了设置它的路径,那么DC就会根据这个变量设置的路径去寻找库。DC可以根据这些路径进行寻找相关的库文件;或者,当需要多个.v文件时,通过这个变量告诉DC那些.v文件可能的路径,让DC根据.v文件的名字去找.v文件。
如:set_app_var search_path “$search_path ./../....libs”;
set_app_var search_path [list . $xxx $xxxx ](注意:换行的时候需要加换行符\,而且\后面不能有空格),list是列表的意思,意思是这个search_path有多个(路径)变量,第一个路径变量搜索不到(库或者需要的文件),可以从下一个路径中找;中间的 . 的意思好像是当前目录。
接下来就是指定库文件了。在前面粗略地说了一下各个库的意思,下面在介绍指定库的同时,也接收这些库在DC中的作用,但是库里面的具体内容不在下面说明,将在后面进行介绍。
⑩④指定综合库(synthetic_library):这个库一般是synopsys的库:DesignWare library 和标准单元库,这里指定的就是库的名字了。
DesignWare library 这个库是synopsys的IP库:当使用到synopsys公司的IP核的时候比如使用了该公司的乘法器IP,那么就要定义这个综合库;此外,当需要用到这个库的一些比较高端的IP核的时候,是需要相关的证书的。
例如当你在代码中用来“*”或者“+”这操作,那么DC会通过这个你指定的综合库进行映射或者优化这些操作符(就是翻译成门电路)。这个库非必须指定。在这些库的名称如下所示:
⑩⑤指定目标工艺库(target_library):DC将RTL级的HDL描述映射到实际的门级电路时所需要的标准单元库。这个库指定为半导体制造商提供的工艺库。库里面的具体内容后面详细说明。这里指定的就是库的名字。
附注:启动DC之后,可以通过printvar target_library 查看工艺库名称。
⑩⑥指定链接库(link_library):这里指定的就是库的名字了,链接库可以从下面几点理解:
·链接库是target_library一样的单元库或者是已经综合到门级的底层模块设计(比如IP核)。作用是:用于分辨电路中逻辑门和子模块的功能,然后用实际的库单元或者子模块代替它们;在由上而下的综合工程中,上一层的设计调用底层已经综合的模块时,将从link_library中寻找并且链接起来,因此当读入的文件是门级网表(比如用到了IP核的网表)时,需要把 link library 设成指向生成该门级网表的目标库,否则 DC 因不知道网表中门单元电路的功能而报错。
如果需要将已有的设计从工艺A转到工艺B时,可以将当前的单元综合库A设为link_library,而将单元综合库B设为target_library,重新映射一下就可以了。
·路径面前加*号表示开辟一块单独的内存空间给DC自己使用,然后先搜寻内存中已有的库,然后再搜寻变量link_library指定的其他库。DC搜寻的库为search_path指定的目录(比如说之前读入设计时读入了库a,库a存到内存里;这时DC在进行综合的时候,发现缺少某个东西,于是就先从库a里面找,找不到时就会从列表里面的变量路径中找)。
·一般情况下,我们只用一个工艺库,需要引用目标工艺库,因此指定target_library;此外我们还有可能用到synopsys公司的IP核,因此需要指定他的DW库。(这一点也就是上面这么指定link_library的原因)。
⑩⑦最后是指定图形化符号库(symbol_library):这里指定的就是库的名字了,这个前面说得比较详细了,这里不再重述。
⑩⑧最后source的那个脚本是用来定义一些命名规则,去掉网表中的一些符号,放置后端工程师拿到的网表中带一些奇怪的符号从而引起不必要的错误。
注意:
·库的指定只需要指定target_library、link_library,其他的可以不指定;
·上面的库设置仅仅适用于逻辑综合,也就是非拓扑模式下的综合;拓扑模式下,需要使用到物理库,或者相关的物理布局等信息;对于拓扑模式下的综合,我们在前面的流程中提及到,在后面的实验中,我们也会进行相关的解释。
·最后,一般情况下(以后的文章中),为了方便管理,我们会像上一节那样:
A路径变量的定义我们会放在common_setup.tcl中(一般是用set设置的变量)。
B库变量的指定我们一般放在dc_setup.tcl这个文件中,这里的库变量一般是用set_app_var进行指定,此外指定的是具体的某一个库,而不仅仅是路径,DC会从search_path里面寻找到这些库。
C.synopsys_dc.setup文件中,仅仅包含source xxx.tcl这些内容,比如source common_setup.tcl ;source dc_setup.tcl 以及source其他的设置内容。
Tcl与Design Compiler (四)——DC启动环境的设置的更多相关文章
- Tcl与Design Compiler (七)——环境、设计规则和面积约束
本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 本文的主要内容是讲解( ...
- Tcl与Design Compiler (一)——前言
已经学习DC的使用有一段时间了,在学习期间,参考了一些书,写了一些总结.我也不把总结藏着掖着了,记录在博客园里面,一方面是记录自己的学习记录,另一方面是分享给大家,希望大家能够得到帮助.参考的书籍有很 ...
- 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 (五)——综合库(时序库)和DC的设计对象
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 前面一直说到综合库/工艺库这些东西,现在就来讲讲讲 ...
- Tcl与Design Compiler (十三)——Design Compliler中常用到的命令(示例)总结
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 本文将描述在Design Compliler中常用 ...
- Tcl与Design Compiler (六)——基本的时序路径约束
本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 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 概述 前面也讲了一些综合后的需要进行的一些工作,这 ...
随机推荐
- C语言 extern3 全局变量的使用
和函数的全局使用极其类似: 第一种方法,也是最简单的: 在 first.h 中定义, ; 在对应的first.c中使用: #include "first.h" #include & ...
- hadoop编译
说明: hadoop版本:hadoop-2.5.0-cdh5.3.6 环境:centos6.4 必须可联网 hadoop 下载网址: http://archive.cloudera.com/cdh5/ ...
- Thrift入门初探--thrift安装及java入门实例
什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...
- VMware WorkStation9.0虚拟机如何运行WINPE
VMware WorkStation9.0虚拟机如何运行WINPE...我们在使用VMware的过程中,有些时候需要让VMware来运行WINPE系统,比如在使用VMware进行系统封装的过程中,其中 ...
- [PHP] PHP1 与 CGI
早期,一个web程序通过cgi方式提供数据处理,编写cgi程序可以用不同的语言. 这个过程是,我们生成一个服务端可执行程序,处理 web server 传过来的请求,(设置header头)然后返回数据 ...
- CSS3 3D的总结(初学者易懂)
CSS3 3D案例的总结 如果要说是3D的基础概念,首先我就来说一说rotateX().rotateY().rotateZ()这几个属性 rotateX():对应的是3D模型中的X轴上的旋转,传入的参 ...
- Ognl值栈对象及struts标签
用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面 ...
- linux 下maven安装
版本要求maven3.2.3 软件下载 wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.2.3/binaries/apache-maven-3 ...
- tmux进阶之tmuxinator
tmux进阶之tmuxinator 作者:crane-yuan 日期:2017-03-03 前言 tmuxinator是tmux的配置管理工具,解决了tmux服务器关机后session丢失问题.tmu ...
- 详细领悟ThreadLocal变量
关于对ThreadLocal变量的理解,我今天查看一下午的博客,自己也写了demo来测试来看自己的理解到底是不是那么回事.从看到博客引出不解,到仔细查看ThreadLocal源码(JDK1.8),我觉 ...