文章目录

  • 0、引言
  • 1、如何理解DC所做的工作
  • 2、 .synopsys.dc.setup的建立
  • 3、启动文件的知识讲解:
  • 4、启动DC吧
  • 5、再看看workshop吧
  • 6、图形界面来使用

0、引言

本博客是通过小破站,经典的DC视频教程,相信不少人应该看过,这里仅仅是针对个人菜鸡的水平,对其做的笔记。本人其实已经看过了5遍左右。刚开始时候,本人菜鸡,没听明白,随着工作的深入,逐渐才体会得到,如果加上了自己的理解,我感觉这样才算是真看懂了。如果我的博客仅仅是原话的抄录,我觉得毫无意义,所以我加上了自己的理解,希望读者能领会,指正。转载务必注明本人博客!
作者:ciscomonkey

1、如何理解DC所做的工作

DC的任务是综合,湾湾人称之为合成,综合的概念是通过RTL、单元库、约束,吐出netlist,由于每一个单元库都有各自的特性极限,如果你的约束不合理,如果你的代码不可综合,所以不是每一个RTL的想法都能够跑出netlist。
​基本的综合可以用一个等式来表达:synthesis = translation + logic optimization + gate mapping




如上图所示,db代表是给工具读的,而lib是给人读的,其中1p98v,代表1.98v,ff代表快速模型。

2、 .synopsys.dc.setup的建立

我们知道安装目录,用户目录,以及工程目录下都可以有这个文件,工程目录下面的优先级是最高的,也是我们经常拿来改动的。这个工程目录下面肯定是空的,需要我们自己手写,所以需要我们一次写好模板,以后拿来用即可。有5个文件夹,mapped是存放综合完成之后的netlist文件的目录,这些文件是经过综合库映射的。Unmaped是存放综合时没有经过工艺库映射所得到的文件目录。
Report是存放报告(比如时序报告、面积报告、DC启动报告等)的目录。Script是存放约束脚本的目录。Work就是启动DC的目录了,在这个目录里面,我们要进行创建.synopsys_dc.setup文件并且编写这个文件,将这个文件放置在work的目录下面。
参考博客如下:
https://www.cnblogs.com/iclearner/p/6621967.html
模板如下,我个人的模板如下所示:


echo "set your project work path"
set SYN_ROOT_PATH /rhys_li/dc_training/my_dc_lab/lab1echo "set your rtl document path"
set RTL_PATH $SYN_ROOT_PATH/rtlecho "set your config document path"
set CONFIG_PATH $SYN_ROOT_PATH/configecho "set your scripts document path"
set SCRIPT_PATH $SYN_ROOT_PATH/scriptsecho "set your unmapped document path"
set UNMAPPED_PATH $SYN_ROOT_PATH/unmappedecho "set your mapped document path"
set MAPPED_PATH $SYN_ROOT_PATH/mappedecho "set your report document path"
set REPORT_PATH $SYN_ROOT_PATH/reportecho "set your work document path"
set WORK_PATH $SYN_ROOT_PATH/work#set your DC software path
set DC_PATH   /opt/Synopsys/Synplify2015echo "====================Define your library directory=================="#Maps a design library to a UNIX directory. This directory is used to store intermediate representations of designs.
define_design_lib work -path $WORK_PATHecho "set your symbol library"
set SYMBOL_PATH /opt/Foundary_Library/TSMC90/aci/sc-x/symbols/synopsysecho "set your lib path"
set LIB_PATH /opt/Foundary_Library/TSMC90/aci/sc-x/synopsysecho "*******************system variables settings***********************"echo "************library path automatic search settings*****************"set_app_var search_path [list  . $search_path \$LIB_PATH \$SYMBOL_PATH \$RTL_PATH \$SCRIPT_PATH \${DC_PATH}/libraries/syn \]
# This virables are automatically set if you perform ultra command.
# Specify for use during optimization
# You do not need to be anything to access the standard library.
# DC is setup to use this lirary by defaultecho "************DC' own library path*********************"
set_app_var synthetic_library [list dw_foundation.sldb standard.sldb]echo "***********Target library name *********"
set_app_var target_library [list slow.db ]echo "***********Link library name************"
set_app_var link_library [list * ${target_library} dw_foundation.sldb]echo "***********Symbol Library name**********"                      ]
set_app_var symbol_library [list tsmc090.sdb]#Source the naming rulesecho "*****************************************************"
echo "***************End of Load .synopsys_dc.setup********"
echo "*****************************************************"echo "******************************************************"
echo "*************************author:ciscomonkey***********"

3、启动文件的知识讲解:

个人理解。
target library: 综合完成后,生成的网标里面的所有基本cell需要的 library. 如:AND/XOR/DFF 等。

官方解释:The target_library specifies the name of the technology library that corresponds to the library whose cells the designers want DC to infer and finally map to.

Target library代表你设计所用到的目标库,是DC在mapping时将设计映射到特定工艺所使用的库,就是使用目标库中的元件综合成设计的门级网表,也就是standard cell的库。通常在综合时,我们都用SS corner下的standard cell库作为target library(也就是选择slow模型下的db), 然后DC会在这些library中去做综合以及优化。通俗点说,只有作综合用的库放在target_library,像ROM,PAD,IO等不用综合的单元,就不要放到target_library中了。

link library:

官方解释:The link_library defines the name of the library that refers to the library of cells used solely for reference。

link library代表设计所用到的链接库。是提供门级网表实例化的基本单元,也就是门级网表实例化的元件或单元都来自该库。链接库定义为standard cell的库文件加上所有IO pad ,memory, IP等宏单元库文件。通常link library会包含target library

target library与link library的区别:
也就是说target library是map时从其中选用stdcell的那个库,link library是包括了target library,同时还包括了设计中用到的IP等宏模块。

本人ciscomonkey博主的理解:target library是给DC让其translate这些std的cell,从而形成netlist,而那些不需要translate的,不需要映射的如IP,memory,PAD等IP,就不必给target library了。

现在我的整个设计的各个部分都已经完成了映射,包括标准的logic 、IO 、IP等,现在我需要将这张已经完成映射的netlist给DC做一个链接,也就是将映射好的每一个部分整合起来,因此,需要都填在link library里面。

本博主的另一种理解是:link library就相当于一个菜单,有没有inv呀,有没有mux呀,相当于一个人点菜一样,把自己需要的东西都写上去,对于这些inv mux就去target library里面去找。在找之前先去内存中去找,所以link library里面需要先加*,然后再去target library里面做一个map的动作,最后将PAD cell 和IP 和基本的logic cell 进行link起来。也就是说link library相当于做一个链接的作用,他负责将那些已经映射好的netlist进行一个顶层的链接。

synthetic library: 这个是综合工具理解你的function block (如RTL code中的 + - / * 等)需要的library.
所以对于synopsys DC来说,synthetic library一般只有:dw_foundation.sldb.
默认的synthetic library一般有:dw_foundation.sldb. 在design compiler的安装目录下可以找到,还有一个是standard.sldb 这个是默认加载的。


https://my.oschina.net/u/4579537/blog/4349836
网上的应该也是照着ug来的


最后网上的还出现了一个hs_name_rules.v 这个我没用到过,说是对verilog的命名规则的检查。

另外,set与set_app_var有什么区别呢
如果定义了一个不是DC的内部变量使用set_app_var就会报错。
因此为了风险性,建议,如果你是在定义DC的内部变量,比如说search_path的话,需要使用set_app_var更加安全,否则我可能错误set targrt_library 这样也不会报错。

此外,对于search_path变量来说就是,DC会在search_path中挨着一个一个地根据这个路径来寻找后面设置的.db文件等。
所以在后面设置DC内部变量的时候,只需要写上文件名 xxx.db xxx.sldb等等即可。

为什么set_app_var search_path [list . $search_path。。。。。
里面还有一个search_path,因为里面这个search_path指的是根目录文件里面的.synopsys_dc_setup里面的默认的search_path。前面已经说过这个work目录下面的启动文件只是将里面的变量的优先级调到最高。如果不写的话,这个search_path就会完全覆盖掉根目录下面的search_path,所以你还可以看到有人用的是追加列表append而不是set。
什么是Design Ware?
DesignWare为synopsys自己开发的一些软IP,其中包括加法器,乘法器,比较器,FIFO等IP,根据约束,DC会直接调用相应适合的IP核。

define_design_lib指定中间文件存放到work目录,否则默认会存放到当前目录,文件多了看起来比较混乱。另外,建议使用current_design命令显式指定当前模块。
如果我使用如下,这个启动文件,我是在my_li的文件夹下面,是没问题的。也就是说文件夹,是指我的工作文件夹,也就是我的启动环境的文件夹。通常来说就为work。如果你在work路径下,然而你这里的filename为比如一个my_li,就会报错,你就写你的当前启动环境所在的文件夹就可以了。

4、启动DC吧

这里,我们现在已经配置好的启动文件,你现在准备好手中的RTL,随便用一个你以前写过的不带IP核的RTL好了(以后会介绍如何用IP核)。除了约束我们现在不用管,脚本也不用管。我们先把DC跑起来吧。
在work目录下面,我们启动之前写好的启动文件。

我们使用了
dc_shell | tee start.log
从而让这份启动日志也打印在start.log中



如下图所示我们使用read_verilog命令,值得注意的是如果我们用*.v是不可以的,这里由于只有一个文件,我还是展示一下列表的使用,另外,由于我们在search_path里面指定了路径,因此就会在里面去搜索,所以,这里只用写.v的文件名就可以了

接着做一个link
link没有参数



详见syn2 link的用法,建议这里可以看一下,能对DC有进一步的理解。

使用list_libs 查看当前内存中所有使用的库


使用list_designs来查看当前的设计有几个module。下图在TOP.v文件里面有4个module,其中TOP.V是顶层的module。
其中*代表顶层的current_design
也可以直接使用current_design 来查看

5、再看看workshop吧

按理说,前面已经把启动文件已经写好了,这里就应该收尾了,想必你也一样曾在eetop上下载过官方的workshop吧,刚开始后的时候,我也不知索然,因为发现视频里面讲解的.synopsys_dc.setup根本不一样。
但是现在你要是已经明白了刚才我介绍的那些命令,应该知道了。
  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其他的设置内容。
  所以官方是按照这样设计的。其实也没关系,我们再来看看官方是怎样启动的。

我文中参考了如下两篇文章,在此表示感谢:
https://www.cnblogs.com/IClearner/p/6618992.html
https://www.cnblogs.com/IClearner/p/6621967.html

首先来看一下common_setup.tcl
看不懂的怎么办,看syn2手册进行命令查询,文章末尾我会放上DC相关的手册

##########################################################################################
# User-defined variables for logical library setup in dc_setup.tcl
##########################################################################################set ADDITIONAL_SEARCH_PATH        "../ref/libs/mw_lib/sc/LM  __________  _________ "  ;# Directories containing logical libraries,# logical design and script files.set TARGET_LIBRARY_FILES          ___________________  ;#  Logical technology library fileset SYMBOL_LIBRARY_FILES          ___________________  ;#  Symbol library file##########################################################################################
# User-defined variables for physical library setup in dc_setup.tcl
##########################################################################################set MW_DESIGN_LIB                 ______________  ;# User-defined Milkyway design library nameset MW_REFERENCE_LIB_DIRS         ../ref/libs/mw_lib/_______  ;# Milkyway reference librariesset TECH_FILE                     ../ref/libs/tech/cb13_6m.tf  ;#  Milkyway technology fileset TLUPLUS_MAX_FILE              ../ref/libs/tlup/cb13_6m_max.tluplus  ;#  Max TLUPlus fileset TLUPLUS_MIN_FILE              ../ref/libs/tlup/cb13_6m_min.tluplus  ;#  Min TLUPlus fileset MAP_FILE                      ../ref/libs/tlup/cb13_6m.map  ;#  Mapping file for TLUplus

官方给出的common_setup.tcl如上图所示,现在就是填空,首先把search_path给填上。


这里有一些milkway的东西,我暂时不懂。不过看样子应该是官方提到的Create_mw_lib 主要使用DC的物理综合的时候,需要生成物理库。在后续进行介绍。

所以,这里我就直接把填好的两份tcl粘贴出来了。

##########################################################################################
# User-defined variables for logical library setup in dc_setup.tcl
##########################################################################################set ADDITIONAL_SEARCH_PATH        "../ref/libs/mw_lib/sc/LM  ./rtl  ./scripts "  ;# Directories containing logical libraries,# logical design and script files.set TARGET_LIBRARY_FILES          sc_max.db ;#  Logical technology library fileset SYMBOL_LIBRARY_FILES          sc.sdb ;#  Symbol library file##########################################################################################
# User-defined variables for physical library setup in dc_setup.tcl
##########################################################################################set MW_DESIGN_LIB                 TOP_LIB ; # User-defined Milkyway design library nameset MW_REFERENCE_LIB_DIRS         ../ref/libs/mw_lib/sc  ;# Milkyway reference librariesset TECH_FILE                     ../ref/libs/tech/cb13_6m.tf  ;#  Milkyway technology fileset TLUPLUS_MAX_FILE              ../ref/libs/tlup/cb13_6m_max.tluplus  ;#  Max TLUPlus fileset TLUPLUS_MIN_FILE              ../ref/libs/tlup/cb13_6m_min.tluplus  ;#  Min TLUPlus fileset MAP_FILE                      ../ref/libs/tlup/cb13_6m.map  ;#  Mapping file for TLUplus
######################################################################
# Logical Library Settings
######################################################################
set_app_var search_path "$search_path $ADDITIONAL_SEARCH_PATH"
set_app_var target_library $TARGET_LIBRARY_FILES
set_app_var link_library "* $target_library"
set_app_var symbol_library $SYMBOL_LIBRARY_FILES######################################################################
# Physical Library Settings
######################################################################set_app_var mw_reference_library $MW_REFERENCE_LIB_DIRS
set_app_var mw_design_library $MW_DESIGN_LIBcreate_mw_lib   -technology $TECH_FILE \-mw_reference_library $mw_reference_library \$mw_design_library
open_mw_lib     $mw_design_library
set_tlu_plus_files -max_tluplus $TLUPLUS_MAX_FILE \-tech2itf_map $MAP_FILE
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#  History
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -history keep 200# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#  Aliases
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -alias h history
alias rc "report_constraint -all_violators"
alias rt report_timing
alias ra report_area
alias rq report_qor
alias page_on {set sh_enable_page_mode true}
alias page_off {set sh_enable_page_mode false}
alias fr "remove_design -designs"# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#  Other lab specific settings
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -set_app_var alib_library_analysis_path .. ; # Common ALIB library location
define_design_lib WORK -path ./work   ; # Location of "analyze"d files
suppress_message "LINT-99 CMD-041 TFCHK-049 TFCHK-050 TFCHK-055 TFCHK-084 MWLIBP-300 MWLIBP-301 MWLIBP-324"  ; # Messages irrelevant to lab# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#  Additional Setup Files
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -source common_setup.tcl
source dc_setup.tcl# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#  Verify Settings
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -echo "\n=================================================================="
echo "\nLibrary Settings:"
echo "search_path:             $search_path"
echo "link_library:            $link_library"
echo "target_library:          $target_library"
echo "symbol_library:          $symbol_library"
echo "mw_reference_library:    $mw_reference_library"
echo "mw_design_library:       $mw_design_library"
echo "\n=================================================================="echo "\nI am ready...\n"

现在我把启动环境换成官方的。

由于用到了物理综合的命令,所以必须要使用dc_shell -to 模式来启动dc。

这里,我个人对create dw方面的,也就是物理综合方面的东西,还欠缺,所以在我自己写的启动环境中,没有设置这方面的内容,官方设置了。后面,如果我搞懂了,我再来进行补充。

6、图形界面来使用

如下博文,对图形界面有介绍。
https://blog.csdn.net/qq_40223983/article/details/96426938

DC使用教程系列1-.synopsys.dc.setup的建立相关推荐

  1. DC使用教程系列2-时钟的概念与环境接口面积约束脚本

    文章目录 1.时钟约束的概念 2. DC中的时序约束 3.环境.设计规则和面积约束 3.1 环境设置选择**set_operatting_condition** 3.2 设置线负载模型set_wire ...

  2. DC 入门教程(一)——DC的准备工作与启动

    写这篇教程的目的是为了缓解自己严重的拖延症吧,也是为了师弟们接手工作,所以本篇教程会以我们学校实验室的详细情况去写,如有巧合,来叫声师兄就好了/滑稽脸 实验室基本情况,DC已经安装在服务器上,服务器c ...

  3. Synopsys DC 笔记

    一.DC综合概述 DC(Design Compile)是将行为级(RTL)的源码转换为门级网表的过程.大体上可以分为三个步骤: 综合=转化+逻辑优化+映射 GTECH格式 GTECH格式是DC先将不同 ...

  4. 《Adobe Acrobat DC经典教程》—第1章1.11节在阅读模式下查看PDF文件

    本节书摘来自异步社区<Adobe Acrobat DC经典教程>一书中的第1章1.11节在阅读模式下查看PDF文件,作者[美]Lisa Fridsma(丽莎 弗里斯玛) , Brie Gy ...

  5. 《Adobe Acrobat DC经典教程》—第1章1.7节使用工具栏

    本节书摘来自异步社区<Adobe Acrobat DC经典教程>一书中的第1章1.7节使用工具栏,作者[美]Lisa Fridsma(丽莎 弗里斯玛) , Brie Gyncild(布里 ...

  6. 《Adobe Acrobat DC经典教程》—第1章1.3节Acrobat Reader简介

    本节书摘来自异步社区<Adobe Acrobat DC经典教程>一书中的第1章1.3节Acrobat Reader简介,作者[美]Lisa Fridsma(丽莎 弗里斯玛) , Brie ...

  7. 修改PDF中文字好用的软件,PDF编辑软件,adobe acrobat DC安装教程,adobe acrobat DC和 adobe acrobat pro的区别,

    目录 修改PDF中文字好用的软件,PDF编辑软件 adobe acrobat DC和 adobe acrobat  pro的区别 adobe acrobat DC安装教程 下载资源的安装包,我已经放到 ...

  8. DC综合的引导语句——synopsys translate_off/synopsys translate_on/parallel_case/full_case

    DC综合的引导语句--synopsys translate_off/synopsys translate_on/parallel_case/full_case 最近在读他人verilog代码中发现存在 ...

  9. LIVE MINI ESP32开发板教程系列(三)drv2605L模块+手机常用振动器实现117种震动效果

    LIVE MINI ESP32开发板教程系列(三)drv2605L模块+手机常用振动器实现117种震动效果 LIVE MINI ESP32引脚图 手机振动器介绍 DRV2605L模块 硬件连线图 DR ...

最新文章

  1. javascript 之 面向对象【理解对象】
  2. 计算机科学与技术的感性认识,对计算机科学与技术学科的简单认识
  3. flutter闪屏过渡动画,闪光占位动画
  4. Mr.J--树、二叉树、森林的转换
  5. HTTP Cookie详解
  6. 【redis】在spring boot2.0中使用redis的StringRedisTemplate 自动注入@Autowired
  7. 蜘蛛侠论坛 2.0 源代码发布
  8. Python 中的 None 与真假
  9. 三维姿态捕捉_三维人脸识别的方法有哪几种
  10. 仿QQ聊天软件2.0版
  11. 计算机web前端岗位职责,web前端开发工程师岗位的职责
  12. 关关php采集插件,推荐使用:关关采集器(杰奇全版本通用编码版)v3.5.00
  13. 计算机应用精华系统性整理
  14. 树莓派智能小车资料整理
  15. 爱奇艺视频怎么下载,如何将qsv格式转为mp4格式
  16. Microsoft OneNote - 图片文字提取
  17. 背包客:走遍世界都有家
  18. 【算法分析】实验 1. 基于贪心的会议安排问题
  19. 学人工智能有前途吗?AI发展前景怎么样?
  20. 微信小程序wxparse特殊解析空格,解析↵换行符号

热门文章

  1. 斐波那契数列的实现(简单递归和动态规划)
  2. PIVOT 和 UNPIVOT 命令的SQL Server版本
  3. DFS 之 poj 2386 Lake Counting
  4. css小经验: 转载 - CSS文本溢出省略号:text-overflow:ellipsis
  5. Linux下Python基础调试
  6. Bochs调试Linux内核 - 定位内核中的变量或数据结构
  7. Linux内核BPF学习1
  8. 使用matlab构建一个信号、添加噪声信号并图示信号
  9. Matlat计算符号导数
  10. VC++2019 使用wininet下载文件