Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[SOLVED] Question about Prime TIME

Status
Not open for further replies.
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

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
 

primetime set_input_transition

PT is mainly check the static timing analysis, SDF is a output file after analysis.
Your result should be OK, this is only calculated with table and load.
You can calculate it by manual if you want.
 

how primetime calculates the timing

The 1.013ns delay is calculated from the first table in your .lib file for pin Z, related pin A, cell rise. Check your design for the input transition and output capacitace and you can use these to manually estimate the value based on the table.

Also, you can try the report_delay_calculation command to get more info on how the cell delay was calcualted
 

leakage_power ()

Thank you Guys,
That really helped me, I thought that what PT did was just parsing an ASCII file, actually threr are some calculations done.
I will check the results by hand

Thanks a lot
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top