!干货! 为设计指定输入驱动强度 set_driving_cell set_drive set_input_transition
!干货! 为设计指定输入驱动强度 set_driving_cell set_drive set_input_transition
本文转自:自己的微信公众号《集成电路设计及EDA教程》
里面主要讲解数字IC前端、后端、DFT、低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程。
考虑到微信公众平台上面发布的很多推文百度搜索不到,所以以后的推文也会在这里进行转载。
推文主要内容:
为设计指定输入端口驱动强度;
set_driving_cell命令;
set_drive命令;
set_input_transition命令;
这三个命令之间的关系与区别。
相信大家在做逻辑综合或者写sdc约束的时侯总纠结上面三条命令该怎么用,那么它们之间有什么关系呢,且听我慢慢道来。
为设计指定输入驱动强度
我们知道,一个Cell的延迟与两个内容有关,一个是Input Transition,另一个是Output Load,如下图所示:
因此,对于整个设计的输入端口(Input Port)而言,要想让逻辑综合工具(如DC)、布局布线工具(如ICC)、STA工具(如PT)精确计算输入端口后边驱动的单元的延迟,必须让工具知道输入端口的Transition时间。
如下图所示,Transition时间越短(即越快Fast),Cell的延迟越小(从A端口到FF2的D端口延迟越小);反之,Transition越慢,从A端口到FF2的D端口的电路的延迟越大。因此我们需要为设计的输入端口定义驱动能力。
一般的EDA工具(如DC等)默认所有输入端口的Transition时间都是0,这显然过于理想,因此,要想精确获得输入端口处电路的时序,为所有输入端口设置合理的驱动能力或者Transition时间非常重要。
定义输入端口的驱动能力可以是标准单元库中的一个缓冲器或反相器(buffer/inverter)单元(用set_driving_cell命令设置),也可以是指定的电阻值(用set_drive命令设置),还可以是set_input_transition,那么它们有什么区别呢?该如何选取?
对输入端口指定驱动强度,方法好多哦,到底选哪种?
用set_driving_cell、set_drive还是set_input_transition呢?
set_driving_cell命令用法
应用场景:Block level
EDA工具(如DC)默认输入端口信号的Transition时间是0;
我们通过set_driving_cell命令来设置某个输入端口前面是什么驱动单元驱动它的,EDA工具会从指定的库中查找得出更加真实的Transition时间来代替零Transition。
set_driving_cell命令的语法:
set_driving_cell
[-lib_cell lib_cell_name]
[-library lib]
[-rise] [-fall]
[-min] [-max]
[-pin pin_name]
[-from_pin from_pin_name]
[-dont_scale]
[-no_design_rule]
[-none]
[-input_transition_rise rtran]
[-input_transition_fall ftran]
[-multiply_by factor]
port_list
举例:
例1:将ddfs的所有输入端的驱动单元设置为DFF1的管脚Q,并忽略该管脚上的设计规则
current_design ddfs
set_driving_cell -lib_cell DFF1 -pin Q -no_design_rule [all_inputs]
例2:为MY_DESIGN的输入端口A设置驱动单元为OR3B或者FD1的Qn输出Pin。
set_drive命令用法
应用场景:Chip level
set_drive命令通过为输入端口指定电阻值的方法来为其定义外部驱动强度。在逻辑综合工具进行优化期间,工具根据设置的驱动强度来计算由该输入端口驱动的逻辑电路的延迟。
对于芯片级的设计(即顶层设计)而言,它的输入端口的驱动能力很难用工艺库中的某个具体单元去量化,因此我们一般不能用set_driving_cell来为其指定驱动强度。我们一般在顶层通过set_drive命令定义输人电阻的大小,由于在顶层,要驱动的是负载较大的IO单元,故需要的驱动能力较强,典型的值是0.05,单位取工艺库中电阻的单位,一般为kΩ;
set_drive命令的语法:
set_drive
resistance
[-rise] [-fall]
[-min] [-max]
port_list
· 阻抗resistance:非负的驱动阻抗,该值越小表示驱动能力越大。(一个MOS管的开关模型是一个电阻串联一个开关,驱动一个MOS管栅极的是上一级MOS管的漏端,它总是通过该电阻连接到电源或者地,这里设置的是MOS管等效电阻的大小);
· 端口名列表port_list:设置为哪些输入端口设置驱动电阻。
由于通常情况下,设计的时钟和复位端都由驱动能力很大的单元或树形缓冲来驱动,所以可以用set_drive命令将这两个端口的驱动电阻设置为0,也就是驱动强度为无穷大(该命令对当前设计有效)。
举例:
例1:给设计的输入端口A、B和C指定2.0 kΩ(单位一般是kΩ,跟库中定义有关)的电阻,可以用该命令:
> set_drive 2.0 {A B C}
例2:为设计中的所有输入端口指定12.3 kΩ的电阻,可以用该命令:
> set_drive 12.3 [all_inputs]
例3:将ddfs的时钟和复位端的驱动设为无穷大,即驱动阻抗设为零:
current_design ddfs
set_drive 0 {clk, reset}
set_input_transition命令用法
应用场景:Chip level
我们可以用set_input_transition命令为输入端口指定一个固定的transition时间,工具会用该transition时间来计算它驱动的逻辑电路的延迟。
对于顶层设计(Chip level的设计)而言,除了用set_drive命令之外,我们也可以使用set_input_transition命令来为其设置固定的transition时间,因为芯片外边一般存在驱动能力比较强的器件和大电容。在这种情况下,transition时间相对独立于当前设计中的电容。
Input Transition分为上升和下降的Transition时间。
set_input_transition命令的语法:
set_input_transition
transition
[-rise] [-fall]
[-min] [-max]
port_list
举例:
例1:MY_DESIGN是Chip level的design,为其输入端口A指定0.12ns的input rise和fall transition:
Summary总结
set_driving_cell与set_drive和set_input_transition的区别
我们也可以用set_driving_cell或set_drive或set_input_transition命令来指定输入端口的驱动,那么它们有什么区别呢?
set_driving_cell命令通常是首选方法,因为它是最真实的模型。当我们的设计是模块级(Block level)的design时,我们的设计前面一般还有其他的设计。那么前面模块的输出便是我们模块的输入,如下图所示,我们可以根据外围电路的输出Cell来给自己的模块指定驱动强度:
当我们的设计是芯片级(Chip level)的顶层设计时,芯片外围电路要驱动的是负载较大的IO单元,故需要的驱动能力较强,一般无法用库里面已有的单元来指定驱动强度,因此一般用set_drive命令。
对于顶层设计(Chip level的设计)而言,除了用set_drive命令之外,我们也可以使用set_input_transition命令来为其设置固定的transition时间,因为芯片外边一般存在驱动能力比较强的器件和大电容。在这种情况下,transition时间相对独立于当前设计中的电容。
如果多种指定方式发生冲突,那么在工具中,最近使用的命令会覆盖先前的命令。
综合应用举例
对于内部的一个模块sub_design2,由于是Block level的design,因此我们根据已知的前级设计的输出单元用set_driving_cell来为本模块指定输入端口的驱动强度。
对于Chip level的顶层设计top_level_design而言,芯片外部的电路需要驱动负载较大的PAD,因此需要使用set_drive命令来通过设置电阻值来指定输入端口的驱动强度。
网易云课堂视频课程
链接:https://study.163.com/course/introduction/1005909004.htm
《Calibre DRC教程-一键搞定DRC》
《Calibredrv教程-提高流程自动化》
《搭建IC设计的EDA虚拟机/服务器》
!干货! 为设计指定输入驱动强度 set_driving_cell set_drive set_input_transition的更多相关文章
- Linux驱动设计——字符设备驱动(一)
Linux字符设别驱动结构 cdev结构体 struct cdev { struct kobject kobj; struct module *owner; const struct file_ope ...
- 【安富莱二代示波器教程】第6章 示波器设计—双通道ADC驱动
第6章 示波器设计—双通道ADC驱动 本章节为大家讲解示波器的ADC驱动,采用STM32自带ADC实现.关于STM32F429的ADC,可以说处处有地雷,不小心就踩上了,如果简单的使用, ...
- 1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者
可能有和我一样刚开始学习java的小伙伴们, 可以或多或少了解一点别的语言知识,我就是中途转过来的, 明白一点,关键不在语言本身····· 所以面对初学者来说,基础要学好, 下面列举几个没什么难度的小 ...
- iOS 自定义的CodeSnippets添加按下tab键切换到指定输入位置
在需要使用tab来选中并输入内容的地方,添加: <#输入待覆盖的内容#>
- python作业设计:输入用户名密码,认证成功后显示欢迎信息,输错三次后锁定
作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3.判 ...
- Linux USB 鼠标输入驱动具体解释
平台:mini2440 内核:linux 2.6.32.2 USB设备插入时.内核会读取设备信息,接着就把id_table里的信息与读取到的信息做比較.看是否匹配,假设匹配.就调用probe函数. U ...
- JDBC_设计架构_驱动类加载_建立Connection_效率测试
JDBC(Java DataBase Connection) 访问数据库流程:驱动管理器--连接数据库--sql语句--结果集 装载mysql驱动 Class.forName("com.jd ...
- pyqt 简单判断指定的内容强度(比如帐号)
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import * from PyQ ...
- sdk(输入驱动物体 驱动属性 被驱动物体 被驱动属性 驱动数值 一键搞定驱动),当你的目标体很多展开会卡的时候使用这个
import maya.cmds as mc def sdksomething( sdk_obj="", sdkAttr=" ...
随机推荐
- 二维码彩色广告招牌的切割制作问题(C#.net下对彩色二维码圆角样式及改进)
原文:二维码彩色广告招牌的切割制作问题(C#.net下对彩色二维码圆角样式及改进) 我们知道,目前二维码还很少用于广告招牌的制作.但随着智能手机越来越普及,互联网等网络的应用也越来越广泛,作为连接物理 ...
- VC++互相转码GBK,unicode,utf8
windows平台下微软的库自带了一些api可用于几种编码格式间的互相转码,其实可以用一个iconv开源跨平台的转码库,那个方法更方便且统一. 使用前要引入头文件和命名空间 #include < ...
- Installshield 在安装或者卸载过程中,判断某一程序是否正在运行
1.在操作时,首先引入类库ShutDownRunningApp.rul,其中ShutDownRunningApp.rul代码如下 /////////////////////////////////// ...
- Xcode自动注释插件: VVDocumenter使用和安装
开源插件: VVDocumenter 下载地址: https://github.com/onevcat/VVDocumenter-Xcode 使用效果: 使用方法: 在方法写///,效果同上图,下面有 ...
- 【Gerrit】自动设置reviewer
gerrit 提供了一种代码review解决方案,但每次代码提交之后都要设置每个commit的code reviewer, 实在是痛苦. gerrit 在官方说明文档里面提供了解决方法,地址:http ...
- 使用Newtonsoft.Json输出JSON
安装: Install-Package Newtonsoft.Json 代码: //序列化DataTable DataTable dt = new DataTable(); dt.Columns.Ad ...
- UWP入门(十)--获取文件属性
原文:UWP入门(十)--获取文件属性 重要的 API StorageFile.GetBasicPropertiesAsync StorageFile.Properties StorageItemCo ...
- Entity Framework的查询
Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). ...
- 关于跨进程使用回调函数的研究:以跨进程获取Richedit中RTF流为例(在Delphi 初始化每一个TWinControl 对象时,将会在窗体 的属性(PropData)中加入一些标志,DLL的HInstance的值与HOST 进程的HInstance并不一致)
建议先参考我上次写的博文跨进程获取Richedit中Text: 获得QQ聊天输入框中的内容 拿到这个问题,我习惯性地会从VCL内核开始分析.找到TRichEdit声明的单元,分析TRichEdit保存 ...
- 快速开发平台 WebBuilder 8.4 发布
WebBuilder是一款强大,全面和高效的应用开发和运行平台.基于浏览器的集成开发环境,可视化和智能化的设计,能轻松完成常规应用和面向手机的移动应用开发.高效.稳定和可扩展的特点,适合复杂企业级应用 ...