• 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. Cadence Liberate Characterization Help

Stats

  • Locked Locked
  • Replies 48
  • Subscribers 126
  • Views 32300
  • 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

Cadence Liberate Characterization Help

anurans
anurans over 7 years ago

Hi All,

For the characterization of a standard cell library, I am using LIBERATE_15.14.070 version. The cell spice model was generated using IC6.1.5, and I am using Spectre as the external simulator for the characterization. I have a question specifically on the leakage_power nodes of the .lib file generated by Liberate. For an example, for a simple inverter, I ended up having leakage_power values as follows (in the link):

https://pastebin.com/grfasa1s

However the resulting leakage values do not follow the circuit simulation values in IC6-Spectre.

> Can anybody explain why the leakage value related to VSS pin is always 0 ? 

> How does the Liberate calculate these values ? Is there a way to evaluate the accuracy of Liberate-Spectre simulation ?

Thanks in advance

Anuradha

  • Cancel
Parents
  • sazjad
    sazjad over 7 years ago

    Hi Anuradha,

    I am also trying to generate .lib files using the Liberate tool. Since you have already gone through the process, can you please help me with one issue?
    I have created a netlist from my circuit and used it in liberate to generate .lib file. However, it seems like the generated netlist is not compatible with the liberate or maybe be I am missing something. Have you had a this kind of issue?

    Thanks in advance.

    Best regards.
    Hossain

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • anurans
    anurans over 7 years ago in reply to sazjad

    Hi, can you be more specific about the issue you have ? Does Liberate give errors when reading the netlist ? 

    Anuradha

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

    Mmm..... another interesting thing I noticed was, the templates generated from fairly newer (commercial) cell libraries do not have define_arc definitions.

    Btw could you please kindly check the new post (which is more relevant to this thread) I made in this forum:
    community.cadence.com/.../re-characterizing-a-tap-less-cell-library-cadence-liberate

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

    Is this a question.

    I can not comment without seeing the library and template. If write_template -verbose does not give you a template with define_arc command, then either the tool has a bug, or the reference library does not have a arc.

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

    Dear Guangjun,

    Hi, for a double edge triggered sequential cell, how do we indicate that behavior to Liberate ? When I did the characterization as usual, Liberate treats the double edge triggered cell as a single edge trigger one. i.e. when I ran a simulation over a synthesized design using the characterized library, I can see that the data being only captured at negative-edge of the clock. Not at both edges (which is the behavior of the cell as per spice simulation). I also do not see any setup/hold violations in the simulation.

    Any explanation for that, or am I missing a certain Liberate command ??

    Thanks in advance

    Anuradha

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

    Hi Anuradha,

    You may have to use the define_arc command for each arc you want to characterise, in such a case. 

    Regards,

    Guangjun

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

    Dear Guangjun,

    I defined the timing arcs for given conditions as follows (setup/hold and clk->Q delays for both clock rise/fals) : 

    https://pastebin.com/jXcsqMjW

    According to the manual, define_arc only overwrite the automatically determined arcs, so I presume no extra commands. Even with these settings, I still have only data captured at falling edge of the clock. Am I still missing something here ?

    Thanks and Regards

    Anuradha

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

    have you tried using define_arc?

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

    for ease of debug, you can,

    1. only include two define_arc commands for setup, rise/fall;

    2. use set_var debug_flow 1x1, or 2x2 to reduce runtime;

    3. save the decks for faill as well as pass

    4. disable SKI mode, if you enabled it;

    5. do not let the tool flatten the netlist---set_var extsim_flatten_netlist=0

    6. use -user_arcs_only option in char_library command.

    If you any arcs can not be characterized, you should see an warning or error in logfile.

    After the run, check the saved deck to verify,

    1. are all side pins are biased as expected/required?

    2. does the simulated waveform show an expected behavior for both pass/fail? 

    3. play with the saved deck, eg. move the input and clock waveform towards and away from each other, to see if the output waveform does change.

    Regards,

    Guangjun

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

    one important question.

    With dual-edge triggering clock, the output transition can be either rise/fall for the same input/clock transitions. this means, the actual transition of Q also depends on previous clock transition as well as input. you may also have to use -prevector to prepare the Q state.  

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

    Thanks for pointing this out. Yes as you said, the current output depends on the previous clock edge (neg or pos) and the corresponding captured data. So that we should have different prevectors for different define_arc states, am I right ?

    i.e. for the rising edge of the define_arc, the prevector should have states corresponding to the falling edge....

    Next, in prevectors how can we define the type of clock and data transition. According to the manual we can only assign '0' and '1' for the prevector values. In the case we prepare Q for the rising edge (where the prevector should have states for the previous falling edge), can we write the prevector as shown below :

    define_arc \
        -prevector_pinlist {D CK RB} \
        -prevector "001 001 101" \
        -vector "1R1" \
        -related_pin CK \
        -pin Q \

    Anuradha

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

    Hi,

    The syntax of prevectors looks fine, as long as the states/sequence is correct/expected behavior.

    vector has have R/F for pin/related_pin. The order must be same as pinlist in define_cell. But you can overwrite this but local -pinlist in define_arc

    You might also need to add "when" attribute, if the arc is dependent on side pins. eg when "D" or when "!D" for both rise/fall of CK, if the Q transition is different under these conditions.

    Regards,

    Guangjun

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

    Hi,

    The syntax of prevectors looks fine, as long as the states/sequence is correct/expected behavior.

    vector has have R/F for pin/related_pin. The order must be same as pinlist in define_cell. But you can overwrite this but local -pinlist in define_arc

    You might also need to add "when" attribute, if the arc is dependent on side pins. eg when "D" or when "!D" for both rise/fall of CK, if the Q transition is different under these conditions.

    Regards,

    Guangjun

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

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