• 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. Generating .lib file for synthesis using Genus from transistor...

Stats

  • Locked Locked
  • Replies 28
  • Subscribers 125
  • Views 30423
  • 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

Generating .lib file for synthesis using Genus from transistor level cells using Virtuoso

iamKarthikBK
iamKarthikBK over 4 years ago

I am trying to create a standard cell library by drawing the transistor level schematics in Virtuoso.

I want to be able to use these cells for synthesis using Genus.

I understand that Genus requires a .lib file to be able to perform the synthesis (is there any other file that's required?)

I have read that I'll have to use Liberate to generate the .lib file and Liberate actually needs a spectre/spice netlist of each of the cells that are being drawn.

My progress till now:

1) Draw the schematics of all the cells that I want to include in the library

2) Generate the symbol view for each of these cells

3) Draw the layouts for each of these cells

I tried going into ADE L and Simulation->Netlist->Create as per the documentation I read using my COS account, this gives me a spectre netlist. But when I try to save this netlist to the spectre view created using Create->Cellview from Cellview it says there were errors parsing the spectre file, but the errors/warnings don't show up. An empty error window opens up.

Can someone point me to any relevant documentation? I want to be able to synthesize designs with Genus using cells I define in the transistor level using Virtuoso.

I am using IC618 GENUS191 LIBERATE192 (The versions correct to the best of my memory) on a Red Hat Enterprise Linux 6 distribution with the distro kernel (2.x)

Thank you so much in advance for your time!

  • Cancel
  • Guangjun Cao
    Guangjun Cao over 4 years ago in reply to iamKarthikBK

    check the sim.lis files in your tmpdir/altos*. if this is not local, use set_var tmpdir <full_path> define it.

    you may need to diasble ski (set_var ski_enable 0) and use char_library -extsim spectre 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • iamKarthikBK
    iamKarthikBK over 4 years ago in reply to Guangjun Cao

    The following solved the issue

    set_var ski_enable 0

    set_var extsim_exclusive 1
    set_var sim_estimate_duration 0
    set_var sim_duration 10

    But I think the delay values are incorrectly large. But that should be due to my index values which are probably wrong.

    Here's the datasheet: gist.githubusercontent.com/.../datasheet.txt


    This issue has been resolved!


    Thank you so much!

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Guangjun Cao
    Guangjun Cao over 4 years ago in reply to iamKarthikBK
    iamKarthikBK said:
    set_var extsim_exclusive 1

    The default is 1. and you were using -extsim spectre already. I do not believe this makes any impact, if you are still using what you have described before..

    iamKarthikBK said:
    set_var ski_enable 0

    This is only supposed to be used as debug option. If this solves the issue, then there might be a tool issue, which is very rare. one reason to use this for debug is it creates a deck with model included, which makes the standalone debug simulation easier. 

    iamKarthikBK said:
    set_var sim_estimate_duration 0

    I have told you clearly before that this should not be used as normal characterization. It may lead to unrealistically high power number, in some cases. Using it for debug only, and find the root cause for the failed characterization.

    iamKarthikBK said:
    set_var sim_duration 10

    This again is clearly unrealistically high. the root cause may be your netlist, or how your cell behaves, which needs to looked into.

    All the power numbers are zero in the datasheet. if you have not defined power templates or skipped power characterization, this is certainly wrong. 

    In terms of long timing and index table, as I have suggested, you can define_min/max_transion and min_output_cap variables (check pdf doc). you simple define the size of index 1/2, eg , you need to define size. one of the install/example has such a template. then, use char_library -auto_index. the tool will create all slew/load table for you to satisfy you defined max_transition.

    Just because you have a .lib generated, it does not mean your characterization is good or successful, or the issue is solved. You need to follow my suggestions to go through standard debug process. otherwise, you just keep on getting new issues. this will not go any where. This may also be the reason that a simple characterization has been made so complicated.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • iamKarthikBK
    iamKarthikBK over 4 years ago in reply to Guangjun Cao
    Guangjun Cao said:
    if you have not defined power templates or skipped power characterization, this is certainly wrong.

    I have defined all power, delay, and constraint templates. But the index values (that I calculated might be wrong).

    I calculated the the 3 values for index_1 as the "(riseTime + fallTime) / 2" for 1, 4 and 20 inverter loads.

    they turned out to be 61.75 ns, 158.9 ns, 794.1 ns respectively.

    I calculated the index_2 values as input capacitances for 1, 4, and 16 inverter loads.

    18.732 pF, 37.464 pF, 74.928 pF respectively.

    These are exactly what I used as index_1 and index_2.

    hence, index_1 = { 61.75 158.9 794.1 }

    and index_2 = {18.732 37.464 74.928 }

    I have used these values for all three (delay, power, constraint) templates.

    Guangjun Cao said:
    In terms of long timing and index table, as I have suggested, you can define_min/max_transion and min_output_cap variables (check pdf doc). you simple define the size of index 1/2, eg , you need to define size. one of the install/example has such a template. then, use char_library -auto_index. the tool will create all slew/load table for you to satisfy you defined max_transition.

    I did not understand this, can you please explain this a little more? I already did these as you'd suggested them earlier.

    I have already done this in template.tcl :

    set_var min_transition 6e-12
    set_var max_transition 1e-06
    set_var min_output_cap 1e-16

    Am I supposed to remove the power delay and constraint templates when I use -auto_index in char_library?

    If required, am I allowed to request you for a short call?
    Thanks

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Guangjun Cao
    Guangjun Cao over 4 years ago in reply to iamKarthikBK
    iamKarthikBK said:
    set_var min_transition 6e-12
    set_var max_transition 1e-06
    set_var min_output_cap 1e-16

    These will be used only if you have -auto_index in char_library command.

    If you use -auto_index option, the actual slew/load table will be,

    index_1 {value_of_min_transtion <other values> value_of_max_transition}

    index_2 {min_output_cap ..... }. the largest load will give you a rise/fall transition (see your .lib) that is close to max_transition. This ensures a good quality of the .lib.

    With auto_index flow, the actual values in your index_1/2 are not used. Only the size of the table matters. you may use {1 2 3 4 5} for a table with 5 indexes, which is NO different from {0.2 0.4 0.6 0.8 1} , or any table of 5 indexes.

    The three variables are determined by your design specification, ie. the operating speed. Will your design be operated at a speed equivalent to 1e-6s ? The auto-calculated maximum load basically tells you the maximum driving capability you cell can have, without exceeding the max_transition.

    As I have said, the installation directory has example of auto_index, or can be modified to do so. i suggest you play with the example to have better understanding.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • iamKarthikBK
    iamKarthikBK over 4 years ago in reply to Guangjun Cao
    Guangjun Cao said:
    With auto_index flow, the actual values in your index_1/2 are not used. Only the size of the table matters. you may use {1 2 3 4 5} for a table with 5 indexes, which is NO different from {0.2 0.4 0.6 0.8 1} , or any table of 5 indexes.

    Oh, okay!

    Guangjun Cao said:
    Will your design be operated at a speed equivalent to 1e-6s

    Yes I am targeting 1MHz operation, if that's what you mean to ask.

    Guangjun Cao said:
    As I have said, the installation directory has example of auto_index, or can be modified to do so. i suggest you play with the example to have better understanding.

    Well, yes I've been using that and the characterization just stops here:

    ---------- Entering compute template index ------------ May 22 19:25:28
    May 22 19:25:28 Determining template indices...
    (May 22 19:25:28) Begin of pre-driver matching trans.
    (May 22 19:25:28) End of pre-driver matching trans.

    Minimum transition index for the library: 6e-12 sec
    Maximum transition index for the library: 2e-07 sec
    Minimum output capacitance index for the library: 1e-16 F
    May 22 19:25:40 Autoindex finished.
    ---------- Exiting compute template index ------------ May 22 19:25:40
    MEM=487 MB
    MEM=487 MB
    (May 22 19:25:40) Generating vectors: AND2X1
    (May 22 19:25:40) Generating vectors: INVX1
    (May 22 19:25:40) Generating vectors: NAND2X1
    (May 22 19:25:40) Generating vectors: NOR2X1
    (May 22 19:25:40) Generating vectors: OR2X1
    MEM=488 MB
    (May 22 19:25:40) Begin of pre-driver matching trans.
    Generating CCST predriver for 1 unique input transition times .
    (May 22 19:25:40) End of pre-driver matching trans.

    May 22 19:25:40 Thread 3: Cell=OR2X1 (0%) Pin= Related= combinational leakage_power
    May 22 19:25:40 Thread 1: Cell=OR2X1 (0%) Pin= Related= combinational leakage_power
    May 22 19:25:50 Thread 0: Cell=OR2X1 (0%) Pin= Related= combinational leakage_power
    May 22 19:25:50 Thread 2: Cell=OR2X1 (0%) Pin= Related= combinational leakage_power

    I'll just try to play around with it a little more Slight smile

    thanks

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • iamKarthikBK
    iamKarthikBK over 4 years ago in reply to iamKarthikBK

    Hi again Guangjun Cao

    I tried modifying the files in install/example/liberate and I was able to characterize the cells I needed.
    The delay values seem right to me now (based on the max transition time I gave along with the auto_index option to char_library).

    highpower_tt_1.8_25.txt and lowpower_tt_0.3_25.txt are the datasheets.
    But I still see that the power values are 0, and area I do not know how to tell liberate.

    How do I tell the area to liberate and how do I fix the power values that are being shown as 0?

    I did this for highpower_tt_1.8_25

    set_var min_transition 6e-12
    set_var max_transition 50e-09
    set_var min_output_cap 1e-16

    I did this for lowpower_tt_0.3_25

    set_var min_transition 6e-12
    set_var max_transition 200e-09
    set_var min_output_cap 1e-16

    You might have already told this before, sorry I just couldn't catch along, if you already have, can you please mention it again?

    Thanks

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Guangjun Cao
    Guangjun Cao over 4 years ago in reply to iamKarthikBK

    area and other attributes that are NOT from simulation results can be set set using set_attribute command.

    The power for lowpower_tt_0.3_25 has more "0", seems to indicate this is precision-related. Try ldb_precision, write_library -precision, and search for "precision" in the PDF doc to find and tune related variables.

     For any power-related the debug, search for "power" in PDF DOC to find related tool variable. In any case, you may set power_info (check the PDF DOC for details) and check the standalone simulation results (you need extsim_save_passed and _failed set as deck). power is characterized using the same deck as delay/timing. check .meas statement in the deck and sim.measure file from the simulation. Power is calculated using integral of VDD/VSS current. going through power_info file and spectre simulation results, it is very easy to find out how the values are calcuted and put in the .lib.

    Note: datasheet does not show you the full picture. .lib should be the first file to look at.

    if the above suggestions do not help, contact customer support  team and provide a full test case.

    • 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