• 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 : generate lib file for a level shift cell

Stats

  • Locked Locked
  • Replies 19
  • Subscribers 125
  • Views 21568
  • 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 : generate lib file for a level shift cell

fengye
fengye over 6 years ago

Hi,

    Did anyone generate the lib file for a level shift with liberate? I don't know how to make some settings.

(1) For the following netlist, 

.SUBCKT ls_cell IN OUT VDDH VDDL VSS
*.PININFO IN:I OUT:O VDDH:B VDDL:B VSS:B
MPM0 A net10 VDDH VDDH P_12_LLRVT W=100e-9 L=200n M=1
MPM1 net10 net10 VDDH VDDH P_12_LLRVT W=100e-9 L=60n M=1
MPM12 net069 net50 VDDH VDDH P_12_LLHVT W=100e-9 L=500n M=1
MPM11 net058 net50 net069 VDDH P_12_LLHVT W=100e-9 L=500n M=1
MPM8 net071 OUT net046 VDDH P_12_LLHVT W=100e-9 L=500n M=1
MPM7 net50 OUT net071 VDDH P_12_LLHVT W=100e-9 L=500n M=1
MPM6 net046 OUT net072 VDDH P_12_LLHVT W=100e-9 L=500n M=1
MPM10 OUT net50 net070 VDDH P_12_LLHVT W=100e-9 L=500n M=1
MPM5 B A net10 VDDH P_12_LLHVT W=100e-9 L=60n M=1
MPM4 net072 OUT VDDH VDDH P_12_LLHVT W=100e-9 L=500n M=1
MPM9 net070 net50 net058 VDDH P_12_LLHVT W=100e-9 L=500n M=1
MNM6 A In_not VSS VSS N_12_LLLVT W=2e-6 L=60n M=1
MNM8 net50 A VSS VSS N_12_LLLVT W=150e-9 L=100n M=1
MNM7 OUT B VSS VSS N_12_LLLVT W=150e-9 L=100n M=1
MNM3 In_not IN VSS VSS N_12_LLLVT W=2e-6 L=60n M=1
MNM5 B IN VSS VSS N_12_LLLVT W=2e-6 L=60n M=1
MPM3 In_not IN VDDL VDDL P_12_LLLVT W=4e-6 L=60n M=1
.ENDS

(2) the template is 


define_template -type delay \
-index_1 {0.008 0.28 } \
-index_2 {0.01 0.3 } \
delay_template_2x2

define_template -type power \
-index_1 {0.008 0.28 } \
-index_2 {0.01 0.3 } \
power_template_2x2


define_cell \
-input { IN } \
-output { OUT } \
-pinlist { IN OUT } \
-delay delay_template_2x2 \
-power power_template_2x2 \
ls_cell

define_leakage -when "IN" ls_cell
define_leakage -when "!IN" ls_cell

# delay arcs from IN => OUT positive_unate combinational
define_arc \
-vector {XX} \
-related_pin IN \
-pin OUT \
ls_cell

# delay arcs from IN => Y positive_unate combinational
define_arc \
-vector {FF} \
-related_pin IN \
-pin OUT \
ls_cell

(3) the multi-voltage 

set VDD_VALUE 1.20
set VDDS_VALUE 0.30

set_vdd VDDH ${VDD_VALUE}
set_vdd VDDL ${VDDS_VALUE}

(4) the error reminding

ERROR (LIB-88): (define_arc): Ignoring arc for cell: 'ls_cell', pin: 'OUT' X, related_pin: 'IN' X, vector: 'XX', pinlist: 'IN OUT' because of one or more invalid values (for example: value 'X' for signal 'OUT'). The valid values for the pin and related_pin are 'R' and 'F'. All other signals can use: '0', '1', 'R', 'F' or 'X'. Correct the Tcl and rerun.

(5) the input_volttage_range, output_voltage_range,how to get these, I need to use userdate to add these attribute.

I hope someone can help me .

Thanks a lot!

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

    https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O0V0000091BSOUA2&pageName=ArticleContent

    I found this article in our database.

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

    define_arc \
    -vector {XX} \  ==>change to RR
    -related_pin IN \
    -pin OUT \
    ls_cell

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

    1. please read the article with the link I sent you. you need to define "input_signal_level" attribute for level shifter.

    2. please do spice simulation, and check the waveform/level.

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

    I read the article you send me  and I use the following setting from the article reference

    set_vdd -cells ls_cell -attribute (std_cell_main_rail true) VDDL 0.6
    set_vdd -cells ls_cell -attribute (related_bias_pin vdds direction inout} VDDL 0.6
    set_pin_vdd -leakage_add_to_supply VDDL -supply_name VDDL ls_cell A 0.6
    set_pin_vdd -supply_name VDDH ls_cell Y 1.2
    set_attribute -cells ls_cell -pins {A} input_signal_level VDDL
    set_attribute -cells ls_cell -pins {A} related_power_pin VDDL

    The error occurs agiain!

    *Warning* (set_gnd) : Gnd supply VSS has already been set, overriding previous value to 0
    bad value "VDDL" for parameter
    voltage float () Voltage value
    while executing
    "OptDoOne descriptions state arguments"
    (procedure "OptDoAll" line 30)
    invoked from within
    "OptDoAll desc arglist"
    (procedure "::tcl::OptKeyParse" line 10)
    invoked from within
    "::tcl::OptKeyParse set_vdd $args"
    (procedure "set_vdd" line 1)
    invoked from within
    "set_vdd -cells ls_cell -attribute (std_cell_main_rail true) VDDL 0.6"

    I will simulate the spice according to your suggestion.

    Thanks again!

    Regards,

    fengye

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

    these two lines have syntax error,

    set_vdd -cells ls_cell -attribute (std_cell_main_rail true) VDDL 0.6
    set_vdd -cells ls_cell -attribute (related_bias_pin vdds direction inout} VDDL 0.6

    please use {} .

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

    Hi, guangjun,

     Thanks for your reply! After I make simulation with your suggestion, for the error arc, 'ls_cell', r_pin:'IN' r, pin:'OUT' r., the out cannot rise to the voltage VDDH. So, the measurement is failed. Maybe the circuit have error.

    When I change the new level shifter netlist, there is no error. But in the output lib file, there is no input/output voltage range for the input/output pin. Can you tell the voltagerange should be added by userdate or by some other liberate commands settings?

    Regards,

    fengye

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

    Hi Fengye,

    1. please show me the attribute of input/output voltage range in your reference library.

    2.please show me your command for defining these attribute. also, check the logfile to see if the attributes are failed to be applied.

    Regards,

    guangjun

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

    Hi,Guangjun,

    1. In my reference library, the attribute are "      input_voltage_range (0.8, 1.4);" and "      output_voltage_range (0.8, 1.4);"

    2. I don't define these attribute ,and I just define the VDDL and VDDH in the char.tcl. I guess these attribution should be added by userdata. 

    Regards,

    fengye

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

    Hi Fengye,

    you can certainly put the input_voltage_range in the user data file. set_attribute command is an alternative way. In this case, there might be a syntax issue--you have to give it a try. if set_attribute -cell ls_cell -pin {add_pin_name_here} input_voltage_range (0.8, 1.4) does not work, try "(0.8, 1.4)" or "\(0.8, 1.4\)" or \(0.8, 1.4\).

    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! With your help, I have solved my problem. It's so kind of you. 

        Regards,

    fengye 

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

    I am very glad to hear that!

    Guangjun

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

    Hi, Guangjun 

        Recently, I find another question about the characterization of  level shifter. There is no leakage value in the generated lib file.  In the template,  I use "define_leakage -when "IN" ls_cell
    define_leakage -when "!IN" ls_cell" . Besides, in the char.tcl, "set_pin_vdd -leakage_add_to_supply VDDL -supply_name VDDL ls_cell IN ${VDDS_VALUE}" is added. 

    But, in the lib file, it exhibits "    cell_leakage_power : 0;" and there isn't any leakage power calculation in the record file. Then I simulate the netlist with hspice, and the cell has leakage power. Did you meet this question?

       Regards!

      fengye

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

    Hi, Guangjun 

        Recently, I find another question about the characterization of  level shifter. There is no leakage value in the generated lib file.  In the template,  I use "define_leakage -when "IN" ls_cell
    define_leakage -when "!IN" ls_cell" . Besides, in the char.tcl, "set_pin_vdd -leakage_add_to_supply VDDL -supply_name VDDL ls_cell IN ${VDDS_VALUE}" is added. 

    But, in the lib file, it exhibits "    cell_leakage_power : 0;" and there isn't any leakage power calculation in the record file. Then I simulate the netlist with hspice, and the cell has leakage power. Did you meet this question?

       Regards!

      fengye

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

    Fengye,

    I am on vacation now, so won't be able to answer your questions timely.

    You can try char_library -trial, without other options. Hopefully liberate can generate a linbrary with leakage arcs. Then, you can use read_library to read in this library and then write_template -verbose to generate a template. This template file should have define_leakage command.

    Generally, define_leakage commands have when conditions with both input and output, eg. For a cell with function as out=in, you will see two arcs with -when in * out, and -when !Out * !In.

    Hope this helps,

    Guangjun

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

    Hi, Guangjun,

        Thanks for your suggestion! I get the "define_leakage" for the level shifter.,

    define_leakage -when "IN*OUT" ls_cell
    define_leakage -when "!IN*!OUT" ls_cell

    or

    define_leakage -when "IN" ls_cell
    define_leakage -when "!IN" ls_cell

     However, there still isn't leakage information. For one anther level shifter, the same setting can get leakage value. For my used level shifter, I make the dc simulation, and can get the leakage value, but it cannot get from the liberate. I guess the commands for "define_leakage" is correct, but still don't know the reason.

     I will try again! Hope you have a good time on your vocation!

     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