DC综合脚本中文详细解释

2023-11-09

#script for Design Compiler DC综合编译脚本
#language:TCL 语言说明
#Usage: 使用说明

1)make sure the lib in the current directory 确保设计库在正确的文件夹下

2) if you have the file .synopsys_dc.setup, 用来设置是否定义过dc的启动文件,

set synopsys_dc_setup_file 1, 如果定义过了就设置变量为1

if not, set synopsys_dc_setup_file 0 没有的话设置变量为0,

3) change Step 3 : Variables to what you want 第三个步骤主要是设置一些变量,不同项目里面设置这里基本就可以了

Especially : top module name, clock name, 例如设置一些顶层名字,时钟名字,复位名字,文件名和周期等等的变量

reset name, all files name, and period

4) typing dc_shell-t -f run_72.tcl | tee -i run.log dc综合的启动命令,使用脚本启动,-t表示脚本启动,|是管道符,

#前面一条的输出会成为后面的输入,tee命令将前面命令的标准输出保存到文件.log中,以便以后查看,
#意思是运行完dc_shell -t -f命令后会在终端出现一堆的信息,这些信息被写入.log文件中

#整个脚本分为8个步骤

set synopsys_dc_setup_file 0 #首先定义启动文件变量为0,表示还没有设置过启动文件,需要设置,如果设置为1,下面的if语句就不会执行,表示设置好了
#-----------------------------------------------------

Step 1 : 步骤一:设置一下启动文件,就是一些工艺库和搜索路径

Setting Up path and library:

If you have edited the file .synopsys_dc.setup, then you can skip over this step

#-----------------------------------------------------
if { $synopsys_dc_setup_file == 0} {
set search_path [list /home/chanshi/dc/library/smic /home/chanshi/dc/rfid/source /home/chanshi/dc/script] 设置搜索路径列表
set target_library {typical.db} 设置目标库,也就是工艺库
#set target_library {CSM35OS142_typ.db};

if you want use typical library,change to typical.db

#set link_library [list { } ram_interp_typical_syn.db ram_458_typical_syn.db typical.db]
set link_library [list {
} $target_library] 设置链接库列表,一般和目标库一样,可以连接已经综合的一些单元到设计中
}
#set symbol_library {csm18ic.sdb csm18io.sdb} 设置符号库
#set synthetic_library {dw_foundation.sldb}; 设置综合库,主要是一些可以综合的ip,一般是没有的,除非有特殊要求,才会加这个库

Design Ware

set command_log_file “command.log” 定义命令日志文件

#-----------------------------------------------------

Step 2 :

Compile Swithes

#set verilogout_no_tri true ;

if inout used, tri net will be used

#通过将三态(tri)逻辑声明成线网(wire)来确保网表中不会出现三态逻辑,因为一些布线工具很难读取包含tri、tran源语、assign语句的网表,对于“inout”类型的port,DC产生tri wire 语句和tran 源语,对于tri,还会产生assign语句
set test_default_scan_style multiplexed_flip_flop
#设置扫描链的类型,还可以通过set_scan_configuration -style来设置
set link_force_case case_insensitive
#设置link命令是否区分大小写,默认是check_reference,就是根据产生reference的模块格式来判断是否大小写敏感,如果是vhdl格式就是不敏感,如果是verilog就敏感
define_name_rules VLSI_NET -allowed “a-zA-Z0-9_” -first_restricted “0-9_” -type net -max_length 256 设置命名规则,
define_name_rules VLSI_CELL -allowed “a-zA-Z0-9_” -first_restricted “0-9_” -type cell -max_length 256
define_name_rules VLSI_PORT -allowed “a-zA-Z0-9_” -first_restricted “0-9_” -type port -max_length 256
define_name_rules TAN_RULE -allowed “a-zA-Z0-9_” -first_restricted “0-9_[]” -max_length 256 -map { { {“cell”, “mycell”}, {"*-return", “myreturn”}}};
set hdlin_check_no_latch “true”
#设置如果推断出锁存器,是否报warning,默认是false,即不报。
set hdlin_merge_nested_conditional_statements “true”
#顾名思义,是否把嵌套的if融合,默认值是false,就是对于嵌套的条件语句(if或case语句)中的每一个if和case都推断出一个选择器,这种做法有利于把某些迟到的条件判断信号(late arriving signals)安排到离输出最近的选择器上(进而有利于减小延迟),如果设成true,就会把这些选择器融合成一个大的选择器,这样所有的选择信号到输出的距离都是相同的

#-----------------------------------------------------

Step 3 :步骤三主要定义一些变量,以便后面的命令调用

Define Variables

#-----------------------------------------------------
set active_design “whole_modules”; 定义顶层名

Top module name

source files.tcl; 执行files.tcl文件

All RTL source_files (verilog)

set clock_name “clk”; 定义时钟名

Name of clock

set reset_name “reset”;定义复位名

Name of reset

set clk_period 70.0 定义时钟周期
#定义时钟周期,注意带小数点,这样计算出的值都带小数点,不然小于1的数都显示为0

Desired Clock Period = 1000/Frequence

set clk_uncertainty_setup [expr $clk_period/200]; 定义时钟抖动
#定义时钟不确定性,这里只定义了相对于建立时间的不确定性,就是时钟上升沿有可能提前 clk_uncertainty_setup(时钟偏差和时钟抖动之和)到来,dc要提前clk_uncertainty_setup检查建立时间是否满足

Uncertainty of clock

set clk_latency [expr $clk_period/10]; 定义时钟延时
#定义时钟延迟,是时钟信号从其实际时钟原点到设计中时钟定义点的传输时间

Network Latency of clock

#考虑reg1+combo1--------combo2_input+reg2+combo2_output-----------combo3+reg3的模型来解释input_delay和output_delay,中间的combo2_input+reg2+combo2_output是要综合的模块
set input_delay [expr $clk_period/4]; 定义外部输入延迟,可以假定外部是一个D触发器和一个组合逻辑组成,那么输入延迟就包括触发器的延时加组合逻辑的延时
#定义一个外部输入(组合逻辑combo1)用了多少时间(即从时钟上升沿到输入数据到来经历的延迟),dc计算还有多少时间留给内部组合逻辑combo2_input,例如时钟周期为10ns,input_delay是4ns,则还有(6-tsu)留给内部组合逻辑combo2_input

Input Delay of all input ports except clock

set output_delay [expr $clk_period/4];定义外部输出延迟,
#定义一个外部输出(组合逻辑combo3)用了多少时间(即外部组合逻辑的延迟),dc计算有多少时间留给内部组合逻辑combo2_output,例如时钟周期为10ns,output_delay为4ns,则还有(6-Tclk2Q)留给内部组合逻辑combo2_output

Output Delay of all output ports

set area_desired 0;
#定义面积的期望值,用于set_max_area
set wire_load_model “smic18_wl20”;
#为了精确地计算设置线载模型(DC支持三种模式:

以此来决定如何选择用于跨层次边界的网线的线载模型),用于计算时序路径的延迟,用于set_wire_load_model

Model of the intra net

set output_load “typical/NAND2BX1/AN” ;
#为了精确地计算输出电路的时间,需要设置端口负载(输出或输入的外部电容负载),就是为所有输出端口指定一个负载,综合时dc就会认为这里有一个这样的负载(并不是说综合时在这里强制添加一个电容),dc综合时就会选择满足这个负载的器件,例如假设已经知道某输出端口要驱动的是一个反相器,那么把输出负载设置成这个反相器的输入负载即可,当然可以设置成很大,这样dc就会用驱动能力很大的器件,来满足所有单元被驱动。这个指令的作用是在布图前综合过程中设置模块输出端口的容性负载和往连线上反标注布图后提取的电容信息,这里选取某一器件的某一引脚的负载作为output load,也就是dc认为所有输出端口要达到能驱动这个引脚

model of the output_load

set synthesis_reports {/home/chanshi/dc/report};
#指定综合报告的输出目录
#name of report directory
sh mkdir s y n t h e s i s r e p o r t s ; s e t t i m i n g r e p o r t " synthesis_reports; set timing_report " synthesisreports;settimingreport"synthesis_reports/ a c t i v

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DC综合脚本中文详细解释 的相关文章

  • 在 TCL 中使用多个参数启动程序 (vcom) 时出现问题

    我正在尝试使用额外选项从 TCL 脚本启动程序 vcom set compilationArgs quiet 93 vcom compilationArgs work work polar2rect sc corproc vhd 但是当我运
  • Tcl 扩展:扩展的 ClientData 的生命周期

    重要的本机扩展将需要每个解释器的数据 动态分配的结构 我目前正在使用Tcl SetAssocData 有一个对应的密钥 扩展名和适当的删除例程 以防止此内存泄漏 然而 Tcl PkgProvideEx 也允许记录这样的 信息 该信息可以通过
  • 如何在 TCL 中创建并迭代哈希值的哈希值?

    如何在 TCL 中创建并迭代哈希值的哈希值 如果我有这样的数据 foo a gt aa gt aa1 aa2 aa3 ab gt ab1 ab2 ab3 ac gt ac1 ac2 ac3 b gt ba gt ba1 ba2 ba3 bb
  • 卸载活动 TCL Mac

    我正在尝试在 Mac 上卸载 Active TCL 但网站提供的代码不起作用 我收到错误消息 指出不是目录 当我查看代码提供的文件路径时 我可以手动查找 但它不起作用 还有其他方法可以摆脱这个吗 以下是提供的代码 cd Library Fr
  • 限制滚动条长度

    我正在尝试使用 Perl Tk 创建一个像 GUI 一样的简单记事本 我已经用过Scrolled小部件来创建一个Text带有两个滚动条的小部件 一个在右侧 一个在底部 两个滚动条相遇的地方如下所示 不过 我想让它看起来像微软的 记事本 应用
  • 如何将 put 的输出作为输入提供给过程?

    我有一个将列表打印为格式化表格的过程 它有像 print table temp 这样的用例 我如何给出不同过程的输出 其中我使用 puts 命令打印输出作为该过程 print table 的输入 set list1 abc 1 defg 2
  • Rstudio tcltk 包的特定问题

    我正在尝试编译一个提示用户输入的交互式代码 我将 tcltk 包用于各种对话框 一切似乎都工作正常 直到今天它停止工作 应该注意的是 a 我没有在配置方面进行任何更改 b 它只是在 RStudio 中停止工作 但在 R 中仍然可以工作 假设
  • TCL/Expect - exec - 如何使用参数执行程序

    我正在尝试使用 TCL 命令exec in tclsh这是我的结果 set show me dir ls ls exec show me dir VboxSharedFolder set show me dir ls la ls la ex
  • TCL 的通用字符串引用

    我正在编写一个实用程序 恰好是在 python 中 它以 TCL 脚本的形式生成输出 给定 python 中的一些任意字符串变量 不是 unicode 我想生成一个 TCL 行 例如 set s something 这将设置 TCL 变量
  • 我可以从 Tcl 中的文件句柄中找到文件名吗?

    如同我可以从 Perl 中的文件句柄中找到文件名吗 https stackoverflow com questions 2813092 can i find a filename from a filehandle in perl但在 Tc
  • 将其放入 TCL 正则表达式中的转义字符串

    I use Expect作为测试框架并编写一些辅助函数来简化匹配模式的键入expect命令 因此 我寻找将任何字符串转换为字符串的函数 其中所有特殊的正则表达式语法都被转义 例如 和其他字符 这样我就可以将任何字符串放入正则表达式中 而不必
  • PYTHON 的 Tcl 文件解析器

    我有一个 tcl 文件 是否有任何解析器可以直接从 tcl 文件中提取数据 我不想使用 REGEX 来完成此任务 pyparsing 可以解决这个问题吗 我正在使用Python 2 7 tcl 文件不是数据文件 它们是用 Tcl 编程语言编
  • 如何用C++扩展TCL?

    我可以编写可编译并用于扩展 TCL 的 C 代码 我不是指调用可执行文件 吗 我可以描述一些类 函数并通过调用已编译的 so 或 a 文件 C 代码在我的 TCl 代码中使用它们吗 如果是 请示意性地向我解释一下它是如何完成的 http c
  • tcl:如何使用变量的值创建新变量

    这是我正在尝试做的一个例子 set t SNS set t top commands that return value 想要获取存储在 t top 的信息 puts t top SNS top really want the data s
  • `new_root.mainloop()` 不会使主窗口无响应

    假设我有这个 tkinter 脚本 import tkinter as tk def callback new root tk Tk new root mainloop print Done root tk Tk button tk But
  • 将列表传递给 Tcl 过程

    将列表传递给 Tcl 过程的规范方法是什么 如果我能得到它 以便列表自动扩展为可变数量的参数 我真的很喜欢它 所以像这样 set a b c myprocedure option1 option2 a and myprocedure opt
  • 无法读取:变量不是数组

    我有以下代码 set arr1 a1 t1 set arr2 a2 t2 set l1 lappend l1 arr1 lappend l1 arr2 set arr3 a3 l1 foreach names array names arr
  • 从另一个应用程序通过 Rscript 启动后,如何将 R Tk 窗口置于前面?

    我有一个脚本 大致如下 if require tcltk2 install packages tcltk2 repos http cran us r project org require tcltk2 base lt NULL done
  • 在 R 中使用 tcltk 在弹出窗口(表格小部件)中显示数据 - 为什么它会删除最后一行数据?

    我正在努力创建一个小部件来使用 tcl tk 在弹出窗口中查看表格 我正在遵循这个例子 http r 789695 n4 nabble com Tck tk help td1837711 html http r 789695 n4 nabb
  • 在退出脚本之前等待后台进程完成

    在退出脚本 TCL Bash 之前 如何确保所有后台进程已完成执行 我正在考虑将所有后台进程 pid 写入 pid 文件 然后最后 pgrep pidfile 以查看在退出之前是否有任何进程仍在运行 有一些更简单的方法可以做到这一点吗 TC

随机推荐

  • SpringBoot项目-执行查询-抛出关于zeroDateTimeBehavior异常提示

    错误信息 The connection property zeroDateTimeBehavior only accepts values of the form exception round or convertToNull The v
  • [论文阅读:姿态识别&Transformer] 2110 HRFormer: High-Resolution Transformer for Dense Prediction

    论文阅读 姿态识别 Transformer 2110 HRFormer High Resolution Transformer for Dense Prediction 文章目录 论文阅读 姿态识别 Transformer 2110 HRF
  • js对象数组去重问题

    const arr2 id 1 name 张三 id 2 name 李四 id 1 name 张三 id 2 name 李四 const newArr arr2 filter currentValue currentIndex selfLi
  • boost电路公式详解

    这个是我在设计boost电路遇到问题时找的文章 觉得说的很好 所以就转载过来方便查看 原文链接 https www eet china com mp a68179 html 以下是那边文章的内容 我们知道 不论是buck 还是boost电路
  • Centos7搭建简单的Samba服务器

    目录 背景要求 环境准备 在centos7中搭建一个简单的samba服务器用于测试 帮助理解samba服务的简易用法 背景要求 设置公共目录 所有人可以访问 权限为只 读 为结算中心和技术部分别建立单独的目录 只 允许公司总经理和对应部门员
  • 高德地图自定义车辆定位marker以及弹出框窗口

    地图安装 npm install vue amap save 项目中设置高德地图 安装成功后在main js设置以下内容 import VueAMap from vue amap Vue use VueAMap VueAMap initAM
  • 邻接矩阵无向图

    邻接矩阵 无向图和有向图在邻接矩阵中的表示方法 无向图和有向图大同小异 在这里只以无向图为例 代码部分通过简单调整即可对应编译有向图 邻接矩阵数据类型定义 define MaxVertices 100 定义最大容量 typedef stru
  • ASP.NET系统用户权限设计与实现

    引言 电子商务系统对安全问题有较高的要求 传统的访问控制方法DAC Discretionary Access Control 自主访问控制模型 MAC Mandatory Access Control 强制访问控制模型 难以满足复杂的企业环
  • react-native及npm install 安装问题

    我们项目中已经开始用react native 所以swift学习放下一段时间 学了一个月的rn 今天分享记录学习过程 学习资料整理 1 react native 中文网 http reactnative cn docs 0 27 getti
  • Qt-认清信号槽的本质

    目录 放个目录方便预览 这个目录是从博客复制过来的 点击会跳转到博客 简介 猫和老鼠的故事 对象之间的通信机制 尝试一 直接调用 尝试二 回调函数 映射表 观察者模式 Qt的信号 槽 信号 槽简介 信号 槽分两种 信号 槽的实现 元对象编译
  • 数据研发面经——字节跳动

    数据研发面经 字节跳动 1 抽象类与接口 2 多态 3 四种引用 4 锁 并发怎么处理 5 进程和线程的区别 6 shuffle机制 mapreduce流程 7 JVM虚拟机 为什么需要虚拟机 8 内存区域 五部分 栈和堆区别 具体存放的东
  • 2017.10.9 DZY Loves Math VI 失败总结

    一看到love math就知道肯定不会做 首先lcm拆成i j gcd i j 然后就讨论分子和分母 但并没有什么卵用 这个题对比传统反演题 主要不同的是f函数不是很直观 所以如果枚举gcd 那剩下的两个数一定互质 然后就按照gcd 1的反
  • 思科VoIP配置清单(转)

    我配过简单的VoIP 用的是思科的设备 希望对你有用 R1接口为192 168 1 1 R2接口为192 168 1 2 R1 R2直连 并相互各连两部电话 要想实现互相通话 可以做如下配置 其中 5164765 6239560为连接R1的
  • C# 创建Excel并写入内容

    在许多应用程序中 需要将数据导出为Excel表格 以便用户可以轻松地查看和分析数据 在本文中 我们将讨论如何使用C 创建Excel表格 并将数据写入该表格 添加引用 在C 中创建Excel表格 需要使用Microsoft Office In
  • Typora和PicGo-Core搭配使用(解决博客单独上传图片问题)

    前言 本文简单介绍快速上传图片并获取图片 URL 链接的工具 图片存放到Gitee仓库中 在博客网站发布时不必担心图片转存失败问题 解决本地图片在网站需单独上传的难题 将本地图片存储在网络中 图床 并生成URL 联网情况下通过URL链接即可
  • Unity之六:项目实战篇

    文章目录 一 一个简单的实例 二 使用CMake组织项目与Unity 2 1 目录结构 2 2 CMakeLists txt的编写 2 3 使用实例 一 一个简单的实例 一个测试单元是源文件 测试文件和Unity构成的 把他们放在一起进行编
  • 【算法提升】——异或理解,位的运算

    个人主页 努力学习的少年 版权 本文由 努力学习的少年 原创 在CSDN首发 需要转载请联系博主 如果文章对你有帮助 欢迎关注 点赞 收藏 一键三连 和订阅专栏哦 目录 一 只出现一次的数字 1 二 数组中只出现一次的数字2 一 只出现一次
  • localStorage在Safari浏览器无痕模式下失效

    Safari无痕模式是不能使用localStorage的 可以利用这个特性判断用户是否开启无痕模式 并提醒用户关闭无痕模式 if typeof localStorage object try localStorage setItem loc
  • 学习笔记 JavaScript ES6 异步编程Promise

    Promise ES里面对异步操作的第一种方案 学习Promise 让异常操作变得优雅 Promise的精髓在于异步操作的状态管理 一个Promise最基本用法 他的参数是一个方法 这个方法里有两个参数 一个是异步操作执行成功的回调 一个是
  • DC综合脚本中文详细解释

    script for Design Compiler DC综合编译脚本 language TCL 语言说明 Usage 使用说明 1 make sure the lib in the current directory 确保设计库在正确的文