Timing library #
- Timing library is an ASCII representation of the Timing, Power and Area associated with the standard cells.
- Characterisation of cells under different PVT conditions results in the timing library (.lib).
- The delay calculation happens based on the 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 the NLDM model which was based on voltage calculation.)
- There are basically three major parts in the .lib file.
- Global definition
- Cell definition
- Pin definition
Example:
library(“<timing_library_file_name>”) {
technology (cmos) ;
delay_model : table_lookup ;
library_features ( report_delay_calculation ) ;
date : “Fri Nov 30 18:32:01 2018” ;
revision : “N-2017.12-SP3-1-T-20180709” ;
nom_process : 1.000 ;
nom_voltage : 0.500 ;
nom_temperature : 0.000 ;
operating_conditions( “TC_0C_0.500v” ) {
process : 1.0000 ;
voltage : 0.5000 ;
temperature : 0.0000 ;
} /*
voltage_unit : “1V” ;
time_unit : “1ns” ;
capacitive_load_unit (1.000000, pf);
slew_derate_from_library : 1.0000 ;
slew_lower_threshold_pct_rise : 25.0000 ;
slew_lower_threshold_pct_fall : 25.0000 ;
slew_upper_threshold_pct_rise : 75.0000 ;
slew_upper_threshold_pct_fall : 75.0000 ;
input_threshold_pct_rise : 50.0000 ;
input_threshold_pct_fall : 50.0000 ;
output_threshold_pct_rise : 50.0000 ;
output_threshold_pct_fall : 50.0000 ;
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;
CSS modeling #
cell(test_inv) {
sensitization_master : sensitization_2pins ;
pin_name_map(a, nz);
area : 0.058320 ;
cell_footprint : invbfx__0_27000x0_21600 ;
dont_touch : true ;
dont_use : true ;
user_function_class : invbfx ;
bias_cell_type : type0 ;
leakage_power() {
related_pg_pin : “vddx” ;
when : “!a” ;
value : “10.3396” ;
}
leakage_power() {
related_pg_pin : “vddx” ;
when : “a” ;
value : “27.3392” ;
}
leakage_power() {
related_pg_pin : “vddx” ;
value : “18.8394” ;
}
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” ; – Input Transition
fall_power(pwr_tin_oload_8x8) {
index_1(“0.0026, 0.0091, 0.0208, 0.0477, 0.1092, 0.2501, 0.5728, 1.3117”); – Output Transition
index_2(“0.0001753, 0.001753, 0.005259, 0.014024, 0.028048, 0.056096, 0.112192, 0.224384”);
values(“-0.000147999, -0.000116204, -9.9388e-05, -9.15477e-05, -8.89641e-05, -8.78625e-05, -8.77568e-05, -8.86109e-05”,\
“-0.000147329, -0.000133719, -0.000114725, -9.90501e-05, -9.2389e-05, -8.88678e-05, -8.74372e-05, -8.76292e-05”,\
“-9.62226e-05, -0.000109586, -0.000108212, -9.87576e-05, -9.17245e-05, -8.72602e-05, -8.52254e-05, -8.51122e-05”,\
“5.85213e-05, 1.06494e-05, -3.07649e-05, -5.67322e-05, -6.60965e-05, -7.01782e-05, -7.28751e-05, -7.55423e-05”,\
“0.000448619, 0.000358893, 0.000251914, 0.000138144, 6.99835e-05, 1.94176e-05, -1.38555e-05, -3.59452e-05”,\
“0.00138605, 0.0012478, 0.00105279, 0.000788589, 0.000579694, 0.0003895, 0.000238867, 0.000131103”,\
“0.00358914, 0.00339593, 0.0030936, 0.00261539, 0.00216088, 0.00165921, 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.000624976, 0.000625528, 0.000620044, 0.000606421”,\
“0.00057026, 0.000579005, 0.000601697, 0.000613055, 0.000620547, 0.000616349, 0.000613066, 0.000606767”,\
“0.000624926, 0.000609997, 0.000606642, 0.000618644, 0.000619993, 0.000614282, 0.000609817, 0.000602518”,\
“0.000779716, 0.000735585, 0.000693294, 0.000660908, 0.000654471, 0.000636192, 0.000617264, 0.000604443”,\
“0.00116515, 0.00108679, 0.000988542, 0.000874694, 0.00080072, 0.000750226, 0.00069269, 0.000640554”,\
“0.00208005, 0.00196292, 0.00179229, 0.00155078, 0.00134564, 0.00114358, 0.000990842, 0.000850647”,\
“0.00421199, 0.00405349, 0.00379951, 0.00338218, 0.0029669, 0.00248531, 0.00199356, 0.00158282”,\
“0.00912789, 0.0089296, 0.00858221, 0.00795848, 0.00726265, 0.00633347, 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.0366689, 0.0688597, 0.133222, 0.262049”,\
“0.00582735, 0.00929867, 0.0147726, 0.0257469, 0.0418931, 0.0741512, 0.138551, 0.267403”,\
“0.00777565, 0.0126066, 0.0199625, 0.0333371, 0.0511158, 0.0836079, 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);
cell_rise(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.003662, 0.00591784, 0.0100274, 0.0199363, 0.0357457, 0.0673047, 0.130516, 0.256666”,\
“0.00533169, 0.0086724, 0.0139934, 0.0247369, 0.0405948, 0.0721691, 0.135373, 0.261504”,\
“0.00692925, 0.0115714, 0.0186801, 0.0316934, 0.0490837, 0.0809562, 0.144202, 0.270566”,\
“0.00894095, 0.0155017, 0.0254895, 0.0428429, 0.0640509, 0.0998892, 0.164353, 0.290745”,\
“0.0111444, 0.0204672, 0.0346413, 0.0590135, 0.0875107, 0.132095, 0.20588, 0.336895”,\
“0.0128037, 0.0260342, 0.0462165, 0.0809701, 0.121163, 0.181817, 0.275395, 0.428052”,\
“0.011912, 0.0305673, 0.0592519, 0.108766, 0.166032, 0.252044, 0.380778, 0.577428”,\
“0.00412729, 0.0295678, 0.0701308, 0.140523, 0.222333, 0.344812, 0.527736, 0.800604”);
}
wave_rise(2, 1);