zoukankan      html  css  js  c++  java
  • <DC guide ---9>

    我们进行了时钟建模,设置了inputoutput_delay,这些都是为了DC对综合逻辑的优化而准备的.

    我们知道std_cell各自都由延迟,DC不断替换期间,以满足时序要求。那么这些cell_delay到底是怎么一回事?

    整个电路会被拆成 cell +net    cell的延迟信息是一个范围值,它随着输入输出连接的信号的不同而呈现非线性变化.

    net是纯导线,有着RC寄生效应.需要把这种delay时间也考虑进来.  

    总的来说:  查表去找寻 cell + net 各自的延迟,然后累加在一起啊,看是否符合时序要求。

    对于cell的延迟,DC是根据 输入跳变速率 input transition  和 输出负载电容 out load 进行查表所得的。

    对于net的延迟,DC是根据 wire_load模型的fanout-length、resistance、cap、area值进行查表所得的。

    Cell 的delay模型

    这是一个2输入与门,  我们可以感觉出   输入----输出之间的时间,可能受到  input 跳变速率、output负载电容、PVT(气压、电压、温度)等多方面共同影响。

    如果负载电容变大,输出信号B的将呈现一种缓慢拉升的状态,如下左图:

    如果输入A变化速率慢, 同样传导到输出端就会慢一些,如下右图: 

      

    我们知道, 电路会被综合成N多的cell,我们不可能说明每一个cell的输入跳变输出负载.  工艺厂商替我们想到了这个问题.

    假设两个寄存器之间的verilog,被翻译成如图的组合逻辑。黑色粗线条是wire线。其余均是std-cell。

    先理解一概概念:fanout,即驱动负载的能力大小。 And1的输出,要驱动一个not1门,以及And2的1个输出pin,Not1的输出只需要驱动nor1的一个pin。

    std_cell每个cell的每个pin,肯定要消耗前一级的负载能力。而且消耗程度可能不尽相同。如果出现某个cell的输出端挂载了过多的负载,可能部分负载就不能正常

    工作,这个跟宿舍里面一块用高压锅、电吹风、热水壶一个道理。

    为了避免这种情况:我们要清楚的知道 一个cell的输出端,所能承受的最大负载值。 以及cell每一个输入pin,所要消耗的资源大小。

    在lib文件中,对于cell的描述信息中,就包含了这两个信息:  max_fanout ----输出引脚所能带动的最大负载值。

                                                                                                  fanout_load ------输入引脚将消耗的资源。

    如果不考虑导线的存在,直接把cell的引脚互联起来就行了。但是由于寄生参数,导线又不得不考虑。

    我是这样认为的:如果一个cell驱动多个器件,那导线长度必定要增加,因为你需要走线去连接后面若干cell的pin。

    所以,fanout值和互连线长度会呈现一定的关系: 下图就是:

    Resistance: 是单位长度导线的电阻值, 0.000331kΩ

    Capacitance: 是单位长度导线的电容值,0.000086pF

    长度对应关系如表格. slop是计算超出部分的斜率值. 

    比如fanout 22的导线的长度应该是:  952.16+ (22-20)*93.7215 = 1139.6

    所以这段导线的总阻值: R= 1139.6 * .000331 = 0.377 k.    总电容 Cnet = 1139.6 * 0.000086 = 0.098 pF.

    如果一个net上连接若干个cell,net的模型可以参考下面三种建模方式: 

     导线delay的计算方法:  其实对于前后级cell互联的net有三种建模方法:每种的net_delay计算公式都不一样。

    第一种: 我们认为前后级的cell离得很近,这时候我们认为导线是很短的.电阻接近于0.(电容不为0,这个我也没想清楚)

    第二种: 是一种平衡式的走线模型,此时Dc值(即delay值) 计算公式如上.

    第三种: 是最坏的走线模型,Dc值计算公式如上.

    这是三种不同的建模方法,使用哪一种建模方式,由我们自己决定.  它取决于我们使用哪一种 corne------  BEST  WORST NORMAL

    我们知道,如果一段导线有Resistance、Cap值,会带来延迟以及影响输出端的transition time,根据导线的建模方式,我们知道了一段导线delay的计算公式,

    但是我们还不知道transition的计算公式. 这个该怎么办呢?   我也不知道是不是由于理论上无法计算,还是出于别的原因. 

    把导线的电容连同Cpin值一起考虑.  这样理想的认为导线只具有delay效果,不具有改变transition time的效果

      

    改变transition time 这个锅,交给cell来背了. 虽然不知道为啥这样做,但是我们看lib中cell的信息:

    上面是两个表格,其中 input_trans值 是cell 输入pin的 transition time,Output_load 是 Cpin + Cnet.

    根据这两个信息, 我们就能查表,找出该cell的延迟值,以及输出端的 transition time值.   

    此时导线只考虑 delay效果. 因此 output transition 又会作为下一个cell的input_transition, 依次嵌套下去。

    从这个推演来看:

    我们只要知道current_design的输入 transition,输出端的负载值。 然后通过建模导线,根据fanout,计算导线长度,Resistance、Cap值,计算导线延迟。

    层层计算cell的延迟、transition时间。就能较为准确的描述整个路径的delay信息。

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    我们理解了这一个建模原理, 有必要了解下lib库文件里面包含哪些信息.

    (1) 库名称

    (2) 库的基本特征,比如工艺类型,版本号、库中参数的单位描述,电压是1V? 时间精度是1ns?电阻单位是1kΩ? corner类型,是Best、Typical、Worst

          等等这些基本的信息。如下图:

    (3) 库环境描述。

          这个主要是描述,库的参数在不同的温度、电压、压强等条件的偏差情况。它是通过比例因子来描述的。

          举个例子:我们一般情况下一个AND的cell_delay是1ns,但是在高温85℃,电压3,3V,cell_delay的计算需要再乘以一个系数K。 

    (4) wire模型。

         这个是对net互连线所有模型的描述,跟上图中一样,包含了  单位长度电阻值、单位长度电容值、长度和fanout的对应表格等信息。

        在这里,需要特别说一下: 我们的wire模型不是只有一个.会有许多个.

    为什么要有那么多的模型呢? DC文档上是这样解释的: 在同一种工艺库下,可能每家fabless设计公司的芯片大小都不一样,

    如果面积比较大, 相应的布线就先稀疏一些,后果就是net的线变长了.所以看上图140000 和800000规模下, wire的模型还是有区别的.

    所以我们需要选择合适的模式. (DC好像能自动选择)

    (5) cell描述

        这个才是最重要的部分, 一个库内的cell信息,是我们最终想要映射的.

    cell的信息包括: 面积、

                               每一个输出口所能承载的最大fanout值,输出口说能连接的最大电容值。

                               每一个输入口所消耗掉的fanout, 自己的Cpin值. 所支持的最大transition范围. 

                               当然还有,每个cell, input-transition 和out_load ,生成的 cell-delay  out_transition表格信息。

                              等等,我可能也说不太清楚.如下表:

     

    lib库主要就是这5个方面的内容.

       

                            

  • 相关阅读:
    美国州名来源
    SQL Constraint/Index
    英语中的 姓氏/Surname
    GNU glibc
    英语人名探源/字母升序排列
    About 'atoi'
    封装一个类似jquery的ajax方法
    函数柯里化
    AngularJS实现TodoMVC
    webpack简单使用
  • 原文地址:https://www.cnblogs.com/mokang0421/p/7639152.html
Copyright © 2011-2022 走看看