M
MohEllayali
Guest
read_lib in primetime
Hello everybody,
I am beginning to use prime time, I run a script to genrate an sdf file
my basic understanding is that prime time parse a .db or a .lib file and exctract some delay information from it and put it within the sdf file ??
so with this ( may be wrong idea), I run this script
my original lib contains this information about let say the cell : OCMTR24
and what I got on the sdf file is
I got for instance 1.013 ns as rising delay for the IOPATH between A(in) and Z(out)
but I can't find nowhere this value in my original lib file ???
so my question is what does PT do exactly ??
is it possible to check that PT results are good
Many thanks
Hello everybody,
I am beginning to use prime time, I run a script to genrate an sdf file
my basic understanding is that prime time parse a .db or a .lib file and exctract some delay information from it and put it within the sdf file ??
so with this ( may be wrong idea), I run this script
Code:
set search_path ". ./lib"
read_lib "./lib/DARE180_IO_LBP_TYP.lib"
set link_path "* DARE180_IO_LBP_TYP"
read_verilog Verilog/IO_LBP_design.v
current_design IO_LBP_design
link_design
set rc_slew_derate_from_library 1
set rc_slew_lower_threshold_pct_fall 0
set rc_slew_lower_threshold_pct_rise 0
set rc_slew_upper_threshold_pct_fall 100
set rc_slew_upper_threshold_pct_rise 100
set rc_input_threshold_pct_rise 50
set rc_input_threshold_pct_fall 50
set rc_output_threshold_pct_rise 50
set rc_output_threshold_pct_fall 50
#set_load 5 [all_outputs]
#set_input_transition 1 [all_inputs]
set_operating_conditions -library DARE180_IO_LBP_TYP TYP
write_sdf -context verilog ./IO_LBP_design.sdf
quit
my original lib contains this information about let say the cell : OCMTR24
Code:
cell ( OCMTR24 ) {
area : 45158.66 ;
pad_cell : true ;
cell_leakage_power : 0.341737 ;
rail_connection ( RC_V33IO,V33IO ) ;
dont_touch : true ;
pin ( Z ) {
direction : output ;
max_transition : 2.49038 ;
max_capacitance : 114.033 ;
output_signal_level : V33IO ;
is_pad : true ;
function : "A" ;
three_state : "(!EN)" ;
drive_current : 42.8074 ;
timing ( ) {
related_pin : "A" ;
timing_label : A_Z ;
timing_sense : positive_unate ;
cell_rise ( delay_template_5x5 ) {
index_1 ( "0.018, 0.09, 0.45, 0.9, 1.8" ) ;
index_2 ( "6.03304, 14.033, 29.033, 59.033, 114.033" ) ;
values ( \
"1.16447, 1.3535, 1.65648, 2.22078, 3.23962", \
"1.20009, 1.38911, 1.6921, 2.2564, 3.27512", \
"1.40605, 1.59507, 1.89804, 2.46236, 3.4812", \
"1.64487, 1.83392, 2.13691, 2.70121, 3.71995", \
"2.07749, 2.26655, 2.56955, 3.13386, 4.1526") ;
}
rise_transition ( delay_template_5x5 ) {
index_1 ( "0.018, 0.09, 0.45, 0.9, 1.8" ) ;
index_2 ( "6.03304, 14.033, 29.033, 59.033, 114.033" ) ;
values ( \
"0.283422, 0.48476, 0.852905, 1.60991, 3.03141", \
"0.283422, 0.484755, 0.852905, 1.60992, 3.03124", \
"0.283423, 0.484761, 0.852881, 1.60992, 3.03143", \
"0.283431, 0.484768, 0.852908, 1.60992, 3.03133", \
"0.283441, 0.484788, 0.852916, 1.60992, 3.03133") ;
}
cell_fall ( delay_template_5x5 ) {
index_1 ( "0.018, 0.09, 0.45, 0.9, 1.8" ) ;
index_2 ( "6.30351, 14.3035, 29.3035, 59.3035, 114.304" ) ;
values ( \
"1.00137, 1.15109, 1.4047, 1.88725, 2.76269", \
"1.01533, 1.16501, 1.41866, 1.90118, 2.77664", \
"1.07909, 1.22876, 1.48239, 1.96493, 2.84035", \
"1.14651, 1.29616, 1.54978, 2.0323, 2.90758", \
"1.28138, 1.43102, 1.68462, 2.16716, 3.04247") ;
}
fall_transition ( delay_template_5x5 ) {
index_1 ( "0.018, 0.09, 0.45, 0.9, 1.8" ) ;
index_2 ( "6.30351, 14.3035, 29.3035, 59.3035, 114.304" ) ;
values ( \
"0.231683, 0.387892, 0.692751, 1.31821, 2.49056", \
"0.231689, 0.387894, 0.69275, 1.3182, 2.49055", \
"0.231708, 0.387897, 0.692747, 1.31821, 2.49057", \
"0.231725, 0.387897, 0.692743, 1.31821, 2.49037", \
"0.231737, 0.387885, 0.692738, 1.31821, 2.49038") ;
}
}
timing ( ) {
related_pin : "EN" ;
timing_sense : positive_unate ;
timing_type : three_state_enable ;
timing_label : enable_EN_Z ;
cell_rise ( delay_template_6x5 ) {
index_1 ( "0.06, 0.24, 0.48, 0.9, 1.2, 1.8" ) ;
index_2 ( "6.03304, 14.033, 29.033, 59.033, 114.033" ) ;
values ( \
"1.03211, 1.23657, 1.545, 2.1114, 3.13087", \
"1.05743, 1.26188, 1.57031, 2.13674, 3.15618", \
"1.06374, 1.26818, 1.57661, 2.143, 3.16248", \
"1.05035, 1.25481, 1.56324, 2.12962, 3.14914", \
"1.03095, 1.23541, 1.54383, 2.1102, 3.12971", \
"0.978165, 1.18262, 1.49104, 2.05744, 3.07695") ;
}
rise_transition ( delay_template_6x5 ) {
index_1 ( "0.06, 0.24, 0.48, 0.9, 1.2, 1.8" ) ;
index_2 ( "6.03304, 14.033, 29.033, 59.033, 114.033" ) ;
values ( \
"0.299454, 0.492926, 0.85563, 1.61051, 3.03101", \
"0.299453, 0.492927, 0.85563, 1.61051, 3.03103", \
"0.299452, 0.492931, 0.855636, 1.61043, 3.03108", \
"0.299454, 0.492929, 0.855635, 1.61051, 3.03104", \
"0.299448, 0.492917, 0.855626, 1.6105, 3.03098", \
"0.299453, 0.492924, 0.8556, 1.61044, 3.03095") ;
}
cell_fall ( delay_template_6x5 ) {
index_1 ( "0.06, 0.24, 0.48, 0.9, 1.2, 1.8" ) ;
index_2 ( "6.30351, 14.3035, 29.3035, 59.3035, 114.304" ) ;
values ( \
"0.682331, 0.85797, 1.12548, 1.61501, 2.49382", \
"0.705543, 0.8812, 1.14869, 1.63825, 2.51704", \
"0.711811, 0.887456, 1.15495, 1.64449, 2.52324", \
"0.702056, 0.877693, 1.14519, 1.63475, 2.51354", \
"0.686011, 0.861643, 1.12913, 1.6187, 2.4975", \
"0.639439, 0.815092, 1.08258, 1.5721, 2.45086") ;
}
fall_transition ( delay_template_6x5 ) {
index_1 ( "0.06, 0.24, 0.48, 0.9, 1.2, 1.8" ) ;
index_2 ( "6.30351, 14.3035, 29.3035, 59.3035, 114.304" ) ;
values ( \
"0.233199, 0.397203, 0.698273, 1.31976, 2.49047", \
"0.2332, 0.397206, 0.698272, 1.31977, 2.49047", \
"0.233194, 0.397205, 0.698254, 1.31976, 2.49049", \
"0.233167, 0.397183, 0.698284, 1.31977, 2.49053", \
"0.233191, 0.397203, 0.698245, 1.31976, 2.4905", \
"0.233201, 0.397206, 0.698275, 1.3197, 2.49047") ;
}
}
timing ( ) {
related_pin : "EN" ;
timing_sense : negative_unate ;
timing_type : three_state_disable ;
timing_label : disable_EN_Z ;
cell_rise ( delay_template_6x1 ) {
index_1 ( "0.06, 0.24, 0.48, 0.9, 1.2, 1.8" ) ;
values ( "1.34893, 1.43754, 1.5564, 1.75599, 1.89648, 2.17588" ) ;
}
rise_transition ( scalar ) {
values ( "0" ) ;
}
cell_fall ( delay_template_6x1 ) {
index_1 ( "0.06, 0.24, 0.48, 0.9, 1.2, 1.8" ) ;
values ( "1.11582, 1.20792, 1.32815, 1.52909, 1.67083, 1.95306" ) ;
}
fall_transition ( scalar ) {
values ( "0" ) ;
}
}
internal_power ( ) {
related_pin : "A" ;
power_level : V33IO ;
rise_power ( energy_template_5x5 ) {
index_1 ( "0.018, 0.09, 0.45, 0.9, 1.8" ) ;
index_2 ( "6.03304, 14.033, 29.033, 59.033, 114.033" ) ;
values ( \
"42.317, 40.019, 38.9222, 38.3564, 38.0812", \
"42.3723, 40.0745, 38.9776, 38.4116, 38.1393", \
"42.8963, 40.5987, 39.5029, 38.9367, 38.664", \
"43.5177, 41.2229, 40.1288, 39.5645, 39.294", \
"44.633, 42.3424, 41.2519, 40.6888, 40.4196") ;
}
fall_power ( energy_template_5x5 ) {
index_1 ( "0.018, 0.09, 0.45, 0.9, 1.8" ) ;
index_2 ( "6.30351, 14.3035, 29.3035, 59.3035, 114.304" ) ;
values ( \
"63.5102, 57.7072, 54.3766, 52.2722, 51.0592", \
"63.4383, 57.6335, 54.3006, 52.1947, 50.9801", \
"63.4161, 57.606, 54.2701, 52.1614, 50.9455", \
"63.4725, 57.6572, 54.3175, 52.2062, 50.9889", \
"63.7328, 57.9135, 54.5719, 52.4591, 51.2405") ;
}
}
internal_power ( ) {
related_pin : "EN" ;
power_level : V33IO ;
rise_power ( energy_template_6x5 ) {
index_1 ( "0.06, 0.24, 0.48, 0.9, 1.2, 1.8" ) ;
index_2 ( "6.03304, 14.033, 29.033, 59.033, 114.033" ) ;
values ( \
"33.5082, 33.5067, 33.5063, 33.5059, 33.5031", \
"33.7111, 33.71, 33.7075, 33.7085, 33.7063", \
"33.9475, 33.9464, 33.9459, 33.9445, 33.9422", \
"34.3161, 34.315, 34.3143, 34.3137, 34.3101", \
"34.5568, 34.5544, 34.5547, 34.5543, 34.5498", \
"35.0053, 35.0035, 35.0027, 35.0028, 34.9991") ;
}
fall_power ( energy_template_6x5 ) {
index_1 ( "0.06, 0.24, 0.48, 0.9, 1.2, 1.8" ) ;
index_2 ( "6.30351, 14.3035, 29.3035, 59.3035, 114.304" ) ;
values ( \
"41.2258, 41.224, 41.2207, 41.2174, 41.2129", \
"41.4314, 41.4299, 41.4262, 41.4238, 41.4195", \
"41.6911, 41.6896, 41.6859, 41.6834, 41.6786", \
"42.1101, 42.1091, 42.106, 42.1044, 42.0989", \
"42.3881, 42.3851, 42.3816, 42.3798, 42.3743", \
"42.8916, 42.8904, 42.8856, 42.8824, 42.8779") ;
}
}
}
pin ( A ) {
direction : input ;
input_signal_level : VDD ;
capacitance : 0.0365283 ;
rise_capacitance : 0.0334395 ;
fall_capacitance : 0.0365283 ;
internal_power ( ) {
power_level : V33IO ;
power ( scalar ) {
values ( "0" ) ;
}
}
}
pin ( EN ) {
direction : input ;
input_signal_level : V33IO ;
capacitance : 0.0362608 ;
rise_capacitance : 0.0362338 ;
fall_capacitance : 0.0362608 ;
internal_power ( ) {
when : !A ;
power_level : V33IO ;
power ( scalar ) {
values ( "0" ) ;
}
}
internal_power ( ) {
when : A ;
power_level : V33IO ;
power ( scalar ) {
values ( "0" ) ;
}
}
internal_power ( ) {
power_level : V33IO ;
power ( scalar ) {
values ( "0" ) ;
}
}
}
leakage_power ( ) {
when : "A&EN" ;
value : 0.40394 ;
}
leakage_power ( ) {
when : "!A&EN" ;
value : 0.401827 ;
}
leakage_power ( ) {
when : "A&!EN" ;
value : 0.322778 ;
}
leakage_power ( ) {
when : "!A&!EN" ;
value : 0.350099 ;
}
}
and what I got on the sdf file is
Code:
(CELL
(CELLTYPE "OCMTR24")
(INSTANCE i_OCMTR24)
(DELAY
(ABSOLUTE
(IOPATH A Z (1.013::1.013) (0.880::0.880))
(IOPATH EN Z () () (1.319::1.319) (0.869::0.869) (1.085::1.085) (0.536::0.536))
)
)
)
I got for instance 1.013 ns as rising delay for the IOPATH between A(in) and Z(out)
but I can't find nowhere this value in my original lib file ???
so my question is what does PT do exactly ??
is it possible to check that PT results are good
Many thanks