• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. Liberate-max_transition

Stats

  • Locked Locked
  • Replies 22
  • Subscribers 126
  • Views 20403
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Liberate-max_transition

fengye
fengye over 6 years ago

Hi, everyone,

     When I use liberate to characterize some standard cells, like OAI21M0R at much lower voltage 0.3V. I set  such parameter with auto-index.

set_var max_transition 1.2e-7
set_var min_transition 1.0e-8
set_var min_output_cap 1e-17

However, I get the following error reminder

.........*Error* (char_library -auto_index) : the maximum load for OAI21M1R:Z is smaller than the specified min_output_cap (5.80844e-18F <= 1e-17F). This problem might be caused by insufficient drive strength or a max_transition value that is too small.

If I increase the max_transition value, the D-flipflop cannot meet the sequential timing. Did anyone meet this question?

  • Cancel
Parents
  • Guangjun Cao
    Guangjun Cao over 6 years ago

    Hi Fengye,

    The min_output-cap is already very small. Are you sure your cell/model works fine at the give voltage? Does the error occur at all slew or just the max_transition? If increasing the max_transition works for some cells bu causes issue with other cells, you may have to use define_index command to change the slew or load table for other cells. You can get a template following the steps below,

    1. use -auto-index -trial options in char_libarary command and generate a template library, with the max_transition that is the maximum of all the transitions.

    2. use write_template to generate a template file

    3. adding define_index commands to change the slew or load table on cell/pin basis.

    Regards,

    Guangjun

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 6 years ago in reply to Guangjun Cao


    Hi, Guangjun, thanks for your reply.My cell can normally work at the given voltage 0.3V. I have simulated with Hspice. The error occur with the cell OAI21M0R, OAI21M1R,... The error information mainly concern about maximum load for the cell pin and min_output_cap. According to the reminder,if I increase the max_transition, the sequential cell D-flipflop will meet error for removal time.
    I don't know how to set proper index value for the cell, so I choose the auto_index. I remember you said,"min_transition is the minimum transition of the cells in your library. max_transition can be defined based on the actual design the library is used for. "
    Now, for this question, do I need to use define_index? How I can properly set the proper index value?
    Hope to receive your reply in your free time.
    Regars,
    fengye

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Guangjun Cao
    Guangjun Cao over 6 years ago in reply to fengye

    Hi Fengye,

    If you remove define the index table manually without -auto_index, does the error still occur?

    Thanks,

    Guangjun

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 6 years ago in reply to Guangjun Cao

    Hi, Guangjun. If I remove the auto_index from char_library, and I add ""

    define_template -type delay \
    -index_1 {12 22 37 50 60 70 80 90 100 110 120 } \
    -index_2 {0.001 0.002 0.0035 0.005 0.0065 0.008 0.0095 0.011 0.0125 0.014 0.016 } \
    delay_template_11x11

    define_template -type power \
    -index_1 {12 22 37 50 60 70 80 90 100 110 120 } \
    -index_2 {0.001 0.002 0.0035 0.005 0.0065 0.008 0.0095 0.011 0.0125 0.014 0.016 } \
    power_template_11x11

    The new error occurs, like "ERROR (LIB-174): (char_library): The template 'delay_template_11x11' has an unreasonable '-index_1' slew value of: 100 nanoseconds which is greater than the sim_duration (1e-07 seconds). Update the 'define_template' and 'define_index' commands or the sim_duration in the Tcl script and rerun."

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Guangjun Cao
    Guangjun Cao over 6 years ago in reply to fengye

    Hi,

    with the slew index table, the max slew is 120ns, which is bigger than your sim_duration of 1e-7s. You may sue sim_duration to increase its value. you may also need to set sim_estimate_duration=0

    Regards,

    Guangjun

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 6 years ago in reply to Guangjun Cao

    Hi,

    After I set sim_duration =1e-5s, and  sim_estimate_duration=0, there is no error. But all the value of the table is casual, which may lead inaccurate library. I still don't know why it cannot work with auto_index, and max_transion=120n

    Regards,

    fengye

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 6 years ago in reply to Guangjun Cao

    Hi, Guangjun,

    The following are some warnings for the auto_index setting. 

    .WARNING (LIB-411): An estimated max load value of 3.17381e-16F will be used for slew: '3.80423e-07s' pin: 'Z' of cell: 'AOI21M0R' because the auto_index algorithm failed to determine the max load using bisection. This can occur when the inside-view algorithm cannot determine a valid vector. Add appropriate 'define_arc' commands specific to pin 'Z' and rerun.
    WARNING (LIB-411): An estimated max load value of 2.80317e-16F will be used for slew: '4.52601e-07s' pin: 'Z' of cell: 'AOI21M1R' because the auto_index algorithm failed to determine the max load using bisection. This can occur when the inside-view algorithm cannot determine a valid vector. Add appropriate 'define_arc' commands specific to pin 'Z' and rerun.

    How should I set the proper index value?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Guangjun Cao
    Guangjun Cao over 6 years ago in reply to fengye

    Hi Fengye,

    have you run Spectre simulation with the max slew and min/max load? do you see output transition within the range of slew index?

    Regards,

    guangjun

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 6 years ago in reply to Guangjun Cao

    Hi, Guangjun,

       Thanks for your reply! Happy mid-autumn day to you!  I run hspice simulation for OAI21M0R with input slew=120n, load= 1fF, the output rise transition=42.3ns, fall transition=30.5ns,(from 10% to 90%). If the load=16fF, the output rise transition=265ns, fall transition=91ns.

    The ouutput behaves the normal function. Is the maximum transition unreasonable? 

    Regards,

    fengye

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Guangjun Cao
    Guangjun Cao over 6 years ago in reply to fengye

    Hi Fengye,

    happy mid-fall day.

    I suggest you not to use auto_index in this case.

    Regards,

    guangjun

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 6 years ago in reply to Guangjun Cao

    Hi Guangjun,

      If I don't use the auto_index, I don't know how to properly set up the concrete index value for delay and power. The index value maybe liner or squard. I don't find any reference about how to get proper index value. This is important for define_template and define_index. Can you give me some suggestions?

    Regards,

    fengye 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Guangjun Cao
    Guangjun Cao over 6 years ago in reply to fengye

    This is no absolutely right or wrong, when it comes to index table. As a general guidance, you may use the scaling factor below. when using it with -auto_index flow, you can copy/paste the lines to your template. If you do not use auto_index flow, it can also be sued as a guidance for defining index table.

    #these three variables must be defined by users, depending on design/PVTs

     max_transition 9.587e-10
    set_var min_transition 2.4e-12
    set_var min_output_cap 1.4e-16

    #do not change these, for simplicity

    set_var scale_tran_by_template 1
    set_var scale_load_by_template 1

    #these scaling factor factor can be changed based on preference. a value of "1" instruct the tool to use the max_transition that is defined above. for constraint slews, if a smaller max_transition is preferred for either pin/related_pin, reduce the last digit to less than 1, and the rest accordingly. mpw slews usually have the same table with const_refn. If a pin requires different index table from the default one defined in define-cell command, use define_index to override the default.  

    set input_slews {0 0.007843 0.02363 0.05511 0.1181 0.2441 0.4961 1}              ;#for input slew
    set output_loads {0 0.007821 0.02346 0.05503 0.1182 0.2441 0.4961 1}            
    set const_data {0 0.06672 0.2 0.4667 1}
    set const_refn {0 0.06672 0.2 0.4667 1}
    set mpw_rslew {0 0.06672 0.2 0.4667 1}


    define_template -type delay \
    -index_1 $input_slews \
    -index_2 $output_loads \
    delay_template_8x8

    define_template -type power \
    -index_1 $input_slews \
    -index_2 $output_loads \
    power_template_8x8

    define_template -type constraint \
    -index_1 $const_data \
    -index_2 $const_refn \
    constraint_template_5x5

    I hope this helps.

    Guangjun

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Guangjun Cao
    Guangjun Cao over 6 years ago in reply to fengye

    This is no absolutely right or wrong, when it comes to index table. As a general guidance, you may use the scaling factor below. when using it with -auto_index flow, you can copy/paste the lines to your template. If you do not use auto_index flow, it can also be sued as a guidance for defining index table.

    #these three variables must be defined by users, depending on design/PVTs

     max_transition 9.587e-10
    set_var min_transition 2.4e-12
    set_var min_output_cap 1.4e-16

    #do not change these, for simplicity

    set_var scale_tran_by_template 1
    set_var scale_load_by_template 1

    #these scaling factor factor can be changed based on preference. a value of "1" instruct the tool to use the max_transition that is defined above. for constraint slews, if a smaller max_transition is preferred for either pin/related_pin, reduce the last digit to less than 1, and the rest accordingly. mpw slews usually have the same table with const_refn. If a pin requires different index table from the default one defined in define-cell command, use define_index to override the default.  

    set input_slews {0 0.007843 0.02363 0.05511 0.1181 0.2441 0.4961 1}              ;#for input slew
    set output_loads {0 0.007821 0.02346 0.05503 0.1182 0.2441 0.4961 1}            
    set const_data {0 0.06672 0.2 0.4667 1}
    set const_refn {0 0.06672 0.2 0.4667 1}
    set mpw_rslew {0 0.06672 0.2 0.4667 1}


    define_template -type delay \
    -index_1 $input_slews \
    -index_2 $output_loads \
    delay_template_8x8

    define_template -type power \
    -index_1 $input_slews \
    -index_2 $output_loads \
    power_template_8x8

    define_template -type constraint \
    -index_1 $const_data \
    -index_2 $const_refn \
    constraint_template_5x5

    I hope this helps.

    Guangjun

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • fengye
    fengye over 6 years ago in reply to Guangjun Cao

    Hi, Guangjun,

       I'm so grateful for your reply. I copy the setting value to my template file and remove auto_index from the char_library. But there are many system errors, like

    *Error* (char_library) Failed to run 'cd /tmp/altos.vlsi-02.T20190914091458598475S0156198.7; /eda/cadence/2016-17/RHELx86/MMSIM_15.10.627/bin/spectre +aps +spice -mt +liberate +rcopt=2 -vabsshort =log sim.lis +libtkn 000170DF5EB91CC41D8B41DB50E14DEB4DDB67C73FE609F74FDE73A937D417C30CC06C8A58BA47F509CF5BBA17DE078370B328E937DE22D2589906C00DB146E80A82779C24F925A20AD079D119DF75F437E965CB78E177A24E9D27885FE545A21AD943E01B8977A20DD879D11B8977A237E979D11B8977A237E924AD246A48416A9500003AA8 /tmp/altos.vlsi-02.T20190914091458598475S0156198.7/sim.sp >& /dev/null' on host vlsi-02.
    * Spectre exit code : 2(stop simulation because of Spectre error condition)

    LIBERATE - SYSTEM ERROR - could not execute command: cd /tmp/altos.vlsi-02.T20190914091458598475S0156198.3; /eda/cadence/2016-17/RHELx86/MMSIM_15.10.627/bin/spectre +aps +spice -mt +liberate +rcopt=2 -vabsshort =log sim.lis +libtkn 000170DF5EB91CC41D8B41DB50E14DEB4DDB67C73FE609F74FDE73A937D417C30CC06C8A58BA47F509CF5BBA17DE078370B328E937DE22D2589906C00DB146E80A82779C24F925A20AD079D119DF75F437E965CB78E177A24E9D27885FE545A21AD943E01B8977A20DD879D11B8977A237E979D11B8977A237E924AD246D48466A9500003AB0 /tmp/altos.vlsi-02.T20190914091458598475S0156198.3/sim.sp >& /dev/null
    *Info* Simulation failed to complete. Restart the simulation in 5 seconds on host vlsi-02.

       I don't change other content. I don't know why the error occurs.

      Thanks again.

    Regars,

    fengye

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 6 years ago in reply to Guangjun Cao

    Hi, Guangjun

        I guess the spectre doesn't have any problem. If I provide min/max_transition, min_cap, just like the old, there is no system error. I find some solutions on the support about the system error. But this cannot be solved.

       Regards,

       fengye

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 6 years ago in reply to Guangjun Cao

    Hi, Guangjun,

        I try again with  auto_index, and the following paramter

    set_var max_transition 1.0e-7
    set_var min_transition 8.0e-9
    set_var min_output_cap 1.0e-17

       For this time, there is no other error. Do you think this can be adopted?

      Regards,

       fengye

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Guangjun Cao
    Guangjun Cao over 6 years ago in reply to fengye

    Hi Fengye,

    The question is, are these expected with your design? 

    Regards,

    Guangjun

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 6 years ago in reply to Guangjun Cao

    Hi, Guangjun,

        In fact, I don't know whether it's proper for my design. I don't know how to evaluate that. I still can use that for synthesis, but I still have a doubt whether it's right or not?

        Regards,

    fengye

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • anurans
    anurans over 5 years ago in reply to fengye

    max_transition for a completely new standard cell library depends on the constraints imposed by the cells in the library. Different designers specify it in different ways. One known method is to connect two registers (FF) of your cell library (if your library is designed from scratch) back to back and run them in the same clock. 10% of the maximum clock frequency the arrangement can operate is considered as the max_trans.

    The slew/load index range assigned to your cell should never violate min and max_trans. In your case you have to determine these two for the specific corner (i.e. 0.3V, TT, 25C) and -auto_index can handle the characterization for you.

    Anuradha

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 5 years ago in reply to anurans

    Hi, Anuradha,
    Thanks for your suggestion! In your proposed method for max_transition, whether the test two registers means the minimum drive strength in my cell library. There are many kinds of cell types, why the flipflop is used for max_transition? I still don't have the better way to deal with this issue.Can you give me more details?
    Regards,
    fengye

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • anurans
    anurans over 5 years ago in reply to fengye

    "why the flipflop is used for max_transition?"

    If you refer to "set_var max_transition 1.2e-7", that's a unique value for your cell library per given corner. This definition does not depend on a particular cell of the library. However the slew/load values used for a unique cell (i.e. AOI22) should never lead that particular cell to violate the unique "min" / "max" transition values specified in the library. Sometimes the digital designer updates the max transition value based on the design.

    Another simpler method could be, to take the average of all maximum transitions for all the cells (when cells driving largest load). Indeed the values will change depending on the PVT corner.

    Anuradha

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fengye
    fengye over 5 years ago in reply to anurans

    Hi, anurans,

      Thanks for your reply. The Inappropriate max_transition may lead error for the timing constraints of  flipflop, like removal and recovery.

    ERROR (LIB-52): The constraint search failed to find a solution within the search range for arc of cell:'DFQRSXM1RA', r_pin:'CK', r_pin dir:'r', pin:'D', pin dir:'r', type:'hold_rising rise_constraint' when: (RB * SB), vector:'RRxxx'. This cell will be marked as failed and the constraint data will be set to: 1.0 (see constraint_failed_value). To debug, review the saved simulation results for deck: hold_19. Possible causes include: 'constraint_search_iteration_limit' too small; 'constraint_search_time_abstol' too small; estimated search range too large (see 'constraint_search_bound'). Modify the constraint parameters and rerun.

    However, if the max_transition is a bit small, the errror will occur like

     .........*Error* (char_library -auto_index) : the maximum load for OAI21M1R:Z is smaller than the specified min_output_cap (5.80844e-18F <= 1e-17F). This problem might be caused by insufficient drive strength or a max_transition value that is too small.

    So, if there is no an appropriate method to evaluate the max_transition, it will be very difficult. In your suggestion, I need to simulate the maximum transitions for all my cells, I will try that again.

    Besides, for this transition setting, another error occurs , what the low voltage library(0.3v) and the high voltage library(1.2v) are both used for the same circuit in different domain. Transition violation occurs in the connection point with level shifter.

    Can you give me more suggestions?

    Regards,

    fengye

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information