!干货! 为设计指定输入驱动强度 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_cellset_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的更多相关文章

  1. Linux驱动设计——字符设备驱动(一)

    Linux字符设别驱动结构 cdev结构体 struct cdev { struct kobject kobj; struct module *owner; const struct file_ope ...

  2. 【安富莱二代示波器教程】第6章 示波器设计—双通道ADC驱动

    第6章        示波器设计—双通道ADC驱动 本章节为大家讲解示波器的ADC驱动,采用STM32自带ADC实现.关于STM32F429的ADC,可以说处处有地雷,不小心就踩上了,如果简单的使用, ...

  3. 1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者

    可能有和我一样刚开始学习java的小伙伴们, 可以或多或少了解一点别的语言知识,我就是中途转过来的, 明白一点,关键不在语言本身····· 所以面对初学者来说,基础要学好, 下面列举几个没什么难度的小 ...

  4. iOS 自定义的CodeSnippets添加按下tab键切换到指定输入位置

    在需要使用tab来选中并输入内容的地方,添加: <#输入待覆盖的内容#>

  5. python作业设计:输入用户名密码,认证成功后显示欢迎信息,输错三次后锁定

    作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3.判 ...

  6. Linux USB 鼠标输入驱动具体解释

    平台:mini2440 内核:linux 2.6.32.2 USB设备插入时.内核会读取设备信息,接着就把id_table里的信息与读取到的信息做比較.看是否匹配,假设匹配.就调用probe函数. U ...

  7. JDBC_设计架构_驱动类加载_建立Connection_效率测试

    JDBC(Java DataBase Connection) 访问数据库流程:驱动管理器--连接数据库--sql语句--结果集 装载mysql驱动 Class.forName("com.jd ...

  8. pyqt 简单判断指定的内容强度(比如帐号)

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import * from PyQ ...

  9. sdk(输入驱动物体 驱动属性 被驱动物体 被驱动属性 驱动数值 一键搞定驱动),当你的目标体很多展开会卡的时候使用这个

    import  maya.cmds  as  mc def   sdksomething( sdk_obj="",                    sdkAttr=" ...

随机推荐

  1. WPF编游戏系列 之七 动画效果(2)

    原文:WPF编游戏系列 之七 动画效果(2)        上一篇已经对关闭窗口图标进行了动画效果处理,本篇将对窗口界面的显示和关闭效果进行处理.由于所有的动画效果都是针对窗口界面的Canvas,所以 ...

  2. WPF 数据库增删改查

    <Window x:Class="DataBindingExam.MainWindow"        xmlns="http://schemas.microsof ...

  3. Poco vs Boost(Poco也有不少优点,特别是网络功能更强)

    POCO的优点: 1) 比boost更好的线程库,特别是一个活动的方法的实现,并且还可设置线程的优先级. 2) 比 boost:asio更全面的网络库.但是boost:asio也是一个非常好的网络库. ...

  4. WPF 遍历 控件

    比较简单的方式是 在设计一个画面时 先添加一个grid 或其他的布局控件 确保要遍历的控件都在这个Grid中时就可以这么写 foreach (UIElement uie in Grid.Childre ...

  5. wpf 换行符

    方法1: <TextBlock Text="第一行 第二行"/>文字中间加上: 就可以了.这个方法很有用,也可以用在ToolTip上:<ToolTip Width ...

  6. SpringMvc 资料

    web.xml解释 http://www.cnblogs.com/superjt/p/3309255.html url-pattern解释 http://www.cnblogs.com/zhangpe ...

  7. Quartz Cron 生成工具

    /** * 每周期 */ function everyTime(dom) { var item = $("input[name=v_" + dom.name + "]&q ...

  8. .net EF Join 关联表分页查询

    Join中第二个参数和第三个参数即为两张表关联对应的字段 第四个参数new 后面如果不写Model名,系统会自动生成带字段的list类型 IQueryable<Operator> oper ...

  9. ML:吴恩达 机器学习 课程笔记(Week5~6)

    Neural Networks: Learning Advice for Applying Machine Learning Machine Learning System Design

  10. DHTMLEdit控件的安装

    xp中自带了DHTMLEdit.ocx, 所以只需安装即可 但是可视化设计面板中没有这个控件,需要我们手动安装一下 具体方式: [import AcitveX control  在控件板上的安装]一. ...