关于lib的分析

 工艺库分为逻辑库物理库两类。

    逻辑库包括DC综合所需要逻辑信息,时延信息,各单元的面积大小、功耗,互连线RC模型以及运行条件等。逻辑库是一个.lib文本文件,它经库编译器(LC)生成DC可以直接使用的以.db为扩展名的二进制文件。本节所说明的库信息是指逻辑库的库信息。

    物理库描述与版图设计相关的单元的物理特性(如:单元的长和宽、层次结构、、天线规则、工艺设计规则、单元方向等)。物理库与逻辑库相对应,即在逻辑库中描述的单元,对应在物理库中也必须有这个单元的物理描述。物理库是以.plib为扩展名的文本文件,经库编译器(LC)生成DC可以直接使用的以.pdb为扩展名的二进制文件。

 

逻辑库由库分组、库级属性、环境描述和单元描述几个部分组成。下面分别进行说明。

(1) 库分组

库分组定义了库的名字和库的具体描述,建议库文件名与库名一致。库分组描述列出如下:

library(mylib) {

    ……

    <library description>

    ……

}

 

(2) 库级属性

库级属性描述了整个库的特性,包括工艺类型、日期、版本和应用于整个库的默认值。库级属性描述列出如下:

library(mylib) {

    technology(cmos);

    delay_model         :table_lookup;

    date                :“Feb 29,2000”;

    revision             :“1.0”;

    current_unit          :“1A”;

    time_unit            :“1ns”;

    voltage_unit          :“1V”;

    pulling_resistance_unit  :“1kohm”;

    capacitive_load_unit(1.0,pf);

    default_inout_pin_cap   :1.5;

    default_input_pin_cap   :1.0;

    default_output_pin_cap  :0.0;

    default_max_fanout     :10.0;

    default_max_transition  :3.0;

    default_operating_conditions  :NOMINAL

    in_place_swap_mode        :match_footprint;

    ……

}

 

(3) 环境描述

环境描述定义了模化参数,如:温度、电压和制程,这些模化参数由比例因子(scaling factors)、时序范围模型(timing range model)和运行条件(operation conditions)组成。另外,环境描述还包含线负载模型(wire-load model),这个模型被DC用来估算互连线延迟。

比例因子

比例因子或K 因子用于表示由于PVT(工艺、电压、温度)的变化而引起的延时变化的缩放倍数,部分比例因子列出如下

k_process_fall_transition :1.0;

k_process_rise_transition :1.2

k_process_fall_propation :0.4;

k_process_rise_propagation :0.4;

k_temp_fall_transition :0.03;

k_temp_rise_transition :0.04;

k_temp_fall_propagation :1.2;

k_temp_rise_propagation :1.24;

k_volt_fall_transition :0.02;    

k_volt_rise_transition :0.5;

k_volt_fall_propagation :0.9;

k_volt_rise_propagation :0.85;

 

运行条件

运行条件定义了用于综合时所采用的工艺、温度、电压条件和互连线RC 模型。如果只有一套某一运行条件的工艺库文件,而在综合时却指定了其它运行条件,DC将使用比例因子来修正库单元相应的时间参数。

下面列出几个典型的运行条件:

operating_conditions ( worst ) {

        process     : 1 ;

        voltage     : 1.62 ;

        temperature : 125 ;

}

 operating_conditions ( typical ) {

        process     : 1 ;

        voltage     : 1.8 ;

        temperature : 25 ;

}

operating_conditions ( best ) {

        process     : 1 ;

        voltage     : 1.98 ;

        temperature : 0 ;

    }

 

tree_type定义了互连线的RC模型,DC使用这个模型来计算互连线延时。worst_case_tree是指将所有互连线电容集中放在负载引脚一端的极端情况,这种情况使输入单元承担了全部的线电容和线电阻。typical_tree模型是指所有负载引脚均匀分担来自驱动引脚的互连线电容、电阻的情况。best_case_tree模型是指将所有互连线电容集中放在驱动引脚一端的极端情况,此时负载引脚只有连线电容而没有连线电阻。

线负载模型

线负载(wire_load)是根据特定工艺,基于不同设计规模和设计方法,从实际版图中得出的互连线RC时延经验模型,它被DC在综合时用来估算互连线时延的信息。通常,每一个工艺库中都有几种线负载模型,它们分别适用于不同规模的逻辑设计。由于对于不同的设计互连线时延差别也较大,所以建议读者根据自己的逻辑设计特点建立自己的线负载RC模型。

线负载模型定义了单位长度的电容、电阻和面积,扇出负载与线长的对应关系(fanout_length),线性近似斜率(slope)。当扇出负载超出定义在fanout_length上的最大值时,互连线长度可以用斜率slop值根据已有的fanout_length线性化近似得到。wire_load定义列出如下:

wire_load ( "reference_area_2500000" ) {

        resistance    : 0.00038 ;

        capacitance   : 0.00025 ;

        area          : 0.00000 ;

        slope         : 57.0571 ;

        fanout_length ( 1,32.381 ) ;

        fanout_length ( 2,80 ) ;

        fanout_length ( 3,119.048 ) ;

        fanout_length ( 4,175.714 ) ;

        fanout_length ( 5,219.048 ) ;

        fanout_length ( 6,259.524 ) ;

        fanout_length ( 7,288.571 ) ;

        fanout_length ( 8,297.143 ) ;

        fanout_length ( 9,302.381 ) ;

        fanout_length ( 10,328.095 ) ;

        fanout_length ( 11,428.571 ) ;

        fanout_length ( 12,442.857 ) ;

        fanout_length ( 13,447.619 ) ;

        fanout_length ( 14,459.048 ) ;

        fanout_length ( 15,532.381 ) ;

        fanout_length ( 16,659.524 ) ;

        fanout_length ( 17,801.905 ) ;

        fanout_length ( 18,901.905 ) ;

        fanout_length ( 19,953.81 ) ;

        fanout_length ( 20,990.952 ) ;

}

 

(4)    单元描述

在库中的每个单元都有一个单元描述。一个单元的描述列出如下:

cell ( AND2HD1X ) {

        area : 13.306;

        cell_leakage_power : 0.540865 ;

        cell_footprint     : and2 ;

        pin ( A ) {

            direction        : input ;

            capacitance      : 0.00294286 ;

            rise_capacitance : 0.00292701 ;

            fall_capacitance : 0.00294286 ;

        }

        pin ( B ) {

            direction        : input ;

            capacitance      : 0.00314674 ;

            rise_capacitance : 0.00314674 ;

            fall_capacitance : 0.00314291 ;

        }

        pin ( Z ) {

            direction        : output ;

            capacitance      : 0 ;

            rise_capacitance : 0 ;

            fall_capacitance : 0 ;

            max_capacitance  : 0.226562 ;

            function         : "A&B" ;

            timing (  ) {

                related_pin  : "A" ;

                timing_sense : positive_unate ;

                cell_rise ( delay_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.058498, 0.069378, 0.5596, 1.20027, 1.60813, 2.4304" ) ;

                    values (

                        "0.132658, 0.13572, 0.184429, 0.210828, 0.216418, 0.220603",

                        "0.234715, 0.237675, 0.290719, 0.321558, 0.333297, 0.344568",

                        "0.792694, 0.795275, 0.850812, 0.882457, 0.893892, 0.909202",

                        "1.53602, 1.53849, 1.59362, 1.62571, 1.63737, 1.65246",

                        "2.00032, 2.00245, 2.05805, 2.09008, 2.10162, 2.1164",

                        "2.9285, 2.93095, 2.98578, 3.01854, 3.03025, 3.04543") ;

                }

                rise_transition ( delay_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.058498, 0.069378, 0.5596, 1.20027, 1.60813, 2.4304" ) ;

                    values (

                        "0.0864, 0.0864, 0.0928, 0.1056, 0.12, 0.1264",

                        "0.2552, 0.256, 0.2648, 0.2728, 0.2808, 0.2944",

                        "1.4344, 1.4344, 1.4352, 1.4368, 1.4384, 1.4432",

                        "3.0232, 3.0232, 3.0256, 3.0256, 3.0272, 3.028",

                        "4.0184, 4.02, 4.02, 4.0192, 4.0224, 4.024",

                        "6.0096, 6.0104, 6.0104, 6.008, 6.0144, 6.016") ;

                }

                cell_fall ( delay_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.052446, 0.0824, 0.5592, 1.20013, 1.60613, 2.41933" ) ;

                    values (

                        "0.143626, 0.152282, 0.266736, 0.366397, 0.418983, 0.513028",

                        "0.221282, 0.228051, 0.352769, 0.458738, 0.514917, 0.616055",

                        "0.586788, 0.59427, 0.719505, 0.829946, 0.888611, 0.994143",

                        "1.06431, 1.07178, 1.19716, 1.30821, 1.36643, 1.47228",

                        "1.36312, 1.37058, 1.49612, 1.60655, 1.66504, 1.77053",

                        "1.96028, 1.96777, 2.09331, 2.20336, 2.26244, 2.368") ;

                }

                fall_transition ( delay_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.052446, 0.0824, 0.5592, 1.20013, 1.60613, 2.41933" ) ;

                    values (

                        "0.071987, 0.071488, 0.0896, 0.1032, 0.1096, 0.124",

                        "0.1736, 0.1768, 0.1832, 0.2024, 0.2096, 0.2208",

                        "0.832, 0.8312, 0.8352, 0.84, 0.8424, 0.8496",

                        "1.744, 1.744, 1.7464, 1.7472, 1.7504, 1.7512",

                        "2.316, 2.316, 2.316, 2.3184, 2.3192, 2.3208",

                        "3.46, 3.46, 3.4608, 3.4624, 3.4616, 3.4664") ;

                }

            }

            timing ( ) {

                related_pin : "B" ;

                timing_sense : positive_unate ;

                cell_rise ( delay_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.060154, 0.074798, 0.560133, 1.20013, 1.60813, 2.43027" ) ;

                    values (

                        "0.128169, 0.127024, 0.199365, 0.238135, 0.25307, 0.268721",

                        "0.229865, 0.228965, 0.304938, 0.347712, 0.365036, 0.389908",

                        "0.787456, 0.786799, 0.863978, 0.907405, 0.925125, 0.951696",

                        "1.53077, 1.52981, 1.60608, 1.65, 1.66857, 1.6947",

                        "1.99502, 1.9936, 2.07113, 2.11542, 2.13293, 2.15915",

                        "2.92294, 2.92204, 2.99977, 3.04354, 3.06143, 3.0869") ;

                }

                rise_transition ( delay_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.060154, 0.074798, 0.560133, 1.20013, 1.60813, 2.43027" ) ;

                    values (

                        "0.0864, 0.079992, 0.0936, 0.1152, 0.1152, 0.1288",

                        "0.2544, 0.2552, 0.2656, 0.2728, 0.2784, 0.2944",

                        "1.4344, 1.4328, 1.4344, 1.436, 1.4368, 1.4424",

                        "3.0248, 3.0248, 3.0264, 3.0272, 3.0272, 3.0304",

                        "4.0184, 4.0208, 4.0216, 4.0208, 4.0232, 4.0248",

                        "6.0072, 6.0104, 6.0128, 6.0104, 6.0112, 6.0144") ;

                }

                cell_fall ( delay_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.052451, 0.0824, 0.559333, 1.20013, 1.6064, 2.41933" ) ;

                    values (

                        "0.126639, 0.132641, 0.242935, 0.329603, 0.376793, 0.460927",

                        "0.2063, 0.213754, 0.327784, 0.424606, 0.47516, 0.564781",

                        "0.570069, 0.577186, 0.694979, 0.796279, 0.848888, 0.944099",

                        "1.0475, 1.0546, 1.17276, 1.27353, 1.3264, 1.42242",

                        "1.3462, 1.35294, 1.47096, 1.57188, 1.62489, 1.72057",

                        "1.94298, 1.95042, 2.06831, 2.16854, 2.22243, 2.31789") ;

                }

                fall_transition ( delay_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.052451, 0.0824, 0.559333, 1.20013, 1.6064, 2.41933" ) ;

                    values (

                        "0.075245, 0.072279, 0.0816, 0.1112, 0.1152, 0.1224",

                        "0.172, 0.1712, 0.1832, 0.196, 0.2064, 0.2224",

                        "0.8304, 0.8312, 0.8336, 0.8392, 0.8416, 0.8512",

                        "1.7424, 1.7448, 1.744, 1.7488, 1.7496, 1.752",

                        "2.3152, 2.3168, 2.316, 2.3184, 2.3192, 2.3208",

                        "3.4592, 3.4592, 3.46, 3.46, 3.464, 3.4656") ;

                }

            }

            internal_power (  ) {

                related_pin : "A" ;

                rise_power ( energy_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.058498, 0.069378, 0.5596, 1.20027, 1.60813, 2.4304" ) ;

                    values (

                        "0.013386, 0.013365, 0.014318, 0.017374, 0.019457, 0.024357",

                        "0.013555, 0.013516, 0.014163, 0.016746, 0.018669, 0.02311",

                        "0.013912, 0.01384, 0.014309, 0.016664, 0.018504, 0.02262",

                        "0.013991, 0.013899, 0.014389, 0.016764, 0.018596, 0.022649",

                        "0.01401, 0.013914, 0.014412, 0.0168, 0.018626, 0.022675",

                        "0.014019, 0.013926, 0.014422, 0.016819, 0.01866, 0.022701") ;

                }

                fall_power ( energy_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.052446, 0.0824, 0.5592, 1.20013, 1.60613, 2.41933" ) ;

                    values (

                        "0.022462, 0.022574, 0.025149, 0.029088, 0.031833, 0.0375",

                        "0.023736, 0.023, 0.024594, 0.028132, 0.030562, 0.03568",

                        "0.023918, 0.023266, 0.024768, 0.027961, 0.030185, 0.034954",

                        "0.023997, 0.023336, 0.024856, 0.028046, 0.030268, 0.034931",

                        "0.024022, 0.023361, 0.024884, 0.028074, 0.030299, 0.034958",

                        "0.024049, 0.023398, 0.024903, 0.028107, 0.030327, 0.034984") ;

                }

            }

            internal_power (  ) {

                related_pin : "B" ;

                rise_power ( energy_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.060154, 0.074798, 0.560133, 1.20013, 1.60813, 2.43027" ) ;

                    values (

                        "0.013149, 0.013103, 0.015064, 0.018038, 0.020512, 0.025301",

                        "0.013259, 0.013487, 0.014353, 0.017285, 0.01934, 0.023808",

                        "0.01362, 0.013838, 0.014642, 0.017174, 0.019046, 0.023158",

                        "0.013688, 0.013907, 0.014718, 0.017263, 0.019125, 0.023166",

                        "0.013704, 0.013913, 0.014749, 0.017295, 0.019155, 0.023183",

                        "0.013704, 0.013933, 0.014773, 0.017329, 0.019187, 0.023211") ;

                }

                fall_power ( energy_template_6x6 ) {

                    index_1 ( "0.001, 0.02, 0.14, 0.3, 0.4, 0.6" ) ;

                    index_2 ( "0.052451, 0.0824, 0.559333, 1.20013, 1.6064, 2.41933" ) ;

                    values (

                        "0.018949, 0.018661, 0.022518, 0.02613, 0.028693, 0.034174",

                        "0.020822, 0.020238, 0.021849, 0.025168, 0.027458, 0.032409",

                        "0.02103, 0.02051, 0.021907, 0.025016, 0.027147, 0.03174",

                        "0.021056, 0.02054, 0.021934, 0.025052, 0.02718, 0.031698",

                        "0.021064, 0.020545, 0.021947, 0.025056, 0.027189, 0.031705",

                        "0.021081, 0.020551, 0.02196, 0.025062, 0.027197, 0.031702") ;

                }

            }

        }

    }

原文地址:https://www.cnblogs.com/godlovepeng/p/9646735.html