Physical DesignPhysical Design Inputs

Timing Library (.lib)

Admin
July 29, 2020
10 min read
  • The timing library (.lib) is an ASCII representation of the Timing, Power and Area associated with the standard cells.
  • Characterization of cells under different PVT conditions results in the timing library (.lib).
  • The delay calculation happens based on input transition (Slew) and the output capacitance (Load).
  • Nowadays, CCS and ECSM models are used to characterize the library, where the calculations are based on current models which is more accurate. (In earlier days, it was NLDM model which was based on voltage calculation.)
  • There are basically three major parts in the .lib file:
    • Global definition
    • Cell definition
    • Pin definition

Lets dig more into the .lib file by looking into its contents. Below are the contents of .lib file. We will go through each and every point of this .lib.

library(“<timing_library_file_name>”) { ==> library and the name

technology (cmos) ; ==> Which technology this is, like this one is CMOS technology.

delay_model : table_lookup ; ==> This explains about the delay model

library_features ( report_delay_calculation ) ;

date : “<>” ; ==> Which date this .lib is generated.

  revision : “<>” ; ==> This is a tag of revised lib, if the .lib is revised.

nom_process :  1.000 ; ==> Nominal Process

 nom_voltage :  0.500 ; ==> Nominal Voltage

 nom_temperature :  0.000 ; ==> Nominal Temperature

operating_conditions( “TC_0C_0.500v”  ) { ==> Now with the help of PVT defined above we define operating condition  

process : 1.0000 ;

 process : 1.0000 ;

  voltage : 0.5000 ;

 temperature : 0.0000 ;

 } /*

voltage_unit : “1V” ; ==> Voltage Unit

 time_unit : “1ns” ; ==> Time Unit

capacitive_load_unit (1.000000, pf); ==> Capacitance unit

  slew_derate_from_library : 1.0000 ; ==> Slew derate definition

slew_lower_threshold_pct_rise : 25.0000 ; ==> Lower Threshold value of the rise percentage, which is 25% here

  slew_lower_threshold_pct_fall : 25.0000 ; ==> Lower Threshold value of the fall percentage, which is 25% here

  slew_upper_threshold_pct_rise : 75.0000 ; ==> Upper Threshold value of the rise percentage, which is 75% here

  slew_upper_threshold_pct_fall : 75.0000 ; ==> Upper Threshold value of the rise percentage, which is 75% here

input_threshold_pct_rise : 50.0000 ; ==> Input threshold percentage of rise signal, which is 50% input_threshold_pct_fall : 50.0000 ; ==> Input threshold percentage of fall signal, which is 50%

output_threshold_pct_rise : 50.0000 ; ==> Outputs threshold percentage of rise signal, which is 50%

output_threshold_pct_fall : 50.0000 ; ==> Outputs threshold percentage of rise signal, which is 50%

  k_temp_rise_transition : 0.000000;

  k_temp_fall_transition : 0.000000;

  default_fanout_load : 1.000000;

  default_inout_pin_cap : 1.000000;

  default_input_pin_cap : 1.000000;

  default_output_pin_cap : 0.000000;

cell(ivlsi_inv) { ==> Cell definition as cell and its name is ivlsi_inv

sensitization_master :   sensitization_2pins ; ==> Says about the inputs and output where sensitivity present.

pin_name_map(a, nz);

area : 0.058320 ; ==> Although Area is non-characterization element but still present wrt physical information.

cell_footprint : invbfx__0_27000x0_21600 ; ==> Cell footprint is something depends on physical presence of cell defined.

dont_touch : true ; ==> Don’t touch means this cell can be used as dont touch while implementation.

dont_use : true ; ==> Similar to don’t touch we can have it as don’t use.

user_function_class : invbfx ; ==> User function defined

bias_cell_type : type0 ;

leakage_power() { ==> This defines the leakage power of the cell

related_pg_pin : “vddx” ; ==> vddx is the power pin, related to this pin we gets Leakage power

when : “!a” ; ==> Condition at which leakage power defines

value : “10.3396” ; ==> Value of the leakage power when condition is “!a”.

 }

leakage_power() {

 related_pg_pin : “vddx” ;

 when : “a” ;

value : “27.3392” ; ==> Same as above value of the Leakage power when condition is “a”.

 }

    leakage_power() {

     related_pg_pin : “vddx” ;

  value : “18.8394” ; ==> Value of the Leakage power without any condition.

    }

Below are the definitions of the pins of the inverter cell like vdd_sub, vddx, vssx, a and nz.

pg_pin(vdd_sub) {

voltage_name : vdd_sub ;

pg_type : nwell ;

physical_connection : device_layer ;

}

 pg_pin(vddx) {

voltage_name : vddx ;

pg_type : primary_power ;

 related_bias_pin : “vdd_sub” ;

} ´

 pg_pin(vssx) {

voltage_name : vssx ;

pg_type : primary_ground ;

}

pin(a) {

capacitance : 0.00160233 ;

 

direction : input ;

 

 driver_waveform_rise : “driver_waveform_default_rise” ;

 

driver_waveform_fall : “driver_waveform_default_fall” ;

 

 fall_capacitance : 0.00160673 ;

 

  input_voltage : default ;

 

max_transition : 1.25 ;

 

min_transition : 0.0026 ;

 

related_ground_pin : vssx ;

 

related_power_pin : vddx ;

 

rise_capacitance : 0.00159793 ;

 }

pin(nz) {

direction : output ;

function : “(!a)” ;

max_capacitance : 0.189116 ;

min_capacitance : 0.0001753 ;

output_voltage : default ;

related_ground_pin : vssx ;

related_power_pin : vddx ;

 power_down_function : “!vddx+vssx+!vdd_sub” ;

internal_power() {

related_pin : “a” ;

 fall_power(pwr_tin_oload_8x8) {

  index_1(“0.0026, 0.0091, 0.0208, 0.0477, 0.1092, 0.2501, 0.5728, 1.3117”); ==> Index 1 is Inputs transition.

index_2(“0.0001753, 0.001753, 0.005259, 0.014024, 0.028048, 0.056096, 0.112192, 0.224384”); ==> Index 2 is output transition.

The below values defined under values are the calculations between index_1 and index_2.

values(“-0.000147999, -0.000116204, -9.9388e-05, -9.15477e-05, -8.89641e-05, -8.86109e-05”,\

“-0.000147329, -0.000133719, -0.000114725, -9.90501e-05, -9.2389e-05, -8.74372e-05, -8.76292e-05”,\

“-9.62226e-05, -0.000109586, -0.000108212, -9.87576e-05, -9.17245e-05, -8.51122e-05”,\

“5.85213e-05, 1.06494e-05, -3.07649e-05, -5.67322e-05, -6.60965e-05, -7.55423e-05”,\

“0.000448619, 0.000358893, 0.000251914, 0.000138144, 6.99835e-05, -3.59452e-05”,\

“0.00138605, 0.0012478, 0.00105279, 0.000788589, 0.000579694, 0.000238867, 0.000131103”,\

“0.00358914, 0.00339593, 0.0030936, 0.00261539, 0.00216088, 0.00118175, 0.000788172”,\

“0.00866063, 0.00841249, 0.0079894, 0.00724807, 0.00644864, 0.00542011, 0.004257, 0.00311623”);

 }

rise_power(pwr_tin_oload_8x8) {

index_1(“0.0026, 0.0091, 0.0208, 0.0477, 0.1092, 0.2501, 0.5728, 1.3117”);

index_2(“0.0001753, 0.001753, 0.005259, 0.014024, 0.028048, 0.056096, 0.112192, 0.224384”);

values(“0.000568497, 0.000599019, 0.000616371, 0.000623806, 0.000620044, 0.000606421”,\

 “0.00057026, 0.000579005, 0.000601697, 0.000616349, 0.000613066, 0.000606767”,\

 “0.000624926, 0.000609997, 0.000606642, 0.000614282, 0.000609817, 0.000602518”,\

 “0.000779716, 0.000735585, 0.000693294, 0.000636192, 0.000617264, 0.000604443”,\

“0.00116515, 0.00108679, 0.000988542, 0.000750226, 0.00069269, 0.000640554”,\

“0.00208005, 0.00196292, 0.00179229, 0.00114358, 0.000990842, 0.000850647”,\

“0.00421199, 0.00405349, 0.00379951, 0.00248531, 0.00199356, 0.00158282”,\

 “0.00912789, 0.0089296, 0.00858221, 0.00795848, 0.00522903, 0.00407016”);

 }       }

timing() {

related_pin : “a” ;

timing_sense : negative_unate ;

timing_type : combinational ;

cell_fall(tmg_ntin_oload_8x8) {

index_1(“0.0026, 0.0091, 0.0208, 0.0477, 0.1092, 0.2501, 0.5728, 1.3117”);

index_2(“0.0001753, 0.001753, 0.005259, 0.014024, 0.028048, 0.056096, 0.112192, 0.224384”);

   values(“0.00393813, 0.00625971, 0.010441, 0.0205487, 0.133222, 0.262049”,\

“0.00582735, 0.00929867, 0.0147726, 0.0257469, 0.0741512, 0.138551, 0.267403”,\

“0.00777565, 0.0126066, 0.0199625, 0.0333371, 0.0511158, 0.14803, 0.276876”,\

“0.0106062, 0.0174052, 0.0277462, 0.0456719, 0.067481, 0.104167, 0.169837, 0.298695”,\

“0.0146357, 0.0242567, 0.0389171, 0.0641249, 0.0935581, 0.139434, 0.215086, 0.348664”,\

“0.0205777, 0.0340551, 0.054797, 0.0906361, 0.132208, 0.19485, 0.291265, 0.447761”,\

“0.0297283, 0.0484552, 0.0777388, 0.128609, 0.187845, 0.276577, 0.40946, 0.612261”,\

“0.045054, 0.0702475, 0.111051, 0.182581, 0.266549, 0.392714, 0.581635, 0.863379”);

  }         wave_fall(1, 2);

Share the Article