• 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. CDL import with SpiceIn: W + L wrong!

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 126
  • Views 19990
  • 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

CDL import with SpiceIn: W + L wrong!

bdjones1
bdjones1 over 10 years ago

Hello,

I'm attempting to import a TSMC 65nm standard cell CDL netist using IC616 StreamIn.  I've created a device_map that imports devices, but their sizes are off by 1000x.

For example, the first device call in the cdl file is this:

mXI0_MXNA1 nin A XI0_n1 VPW nch L=6e-08 W=3.3e-07

When imported, the device ends up with l=60m and 330m, instead of 60n and 330n.  Here's the chunk of the log file showing that happening:

Created instance 'mXI0_MXNA1'.
Instance Terminal: Created net nin
Created connection between net 'nin' and term 'D'
Instance Terminal: Found net A
Created connection between net 'A' and term 'G'
Instance Terminal: Created net XI0_n1
Created connection between net 'XI0_n1' and term 'S'
Instance Terminal: Found net VPW
Created connection between net 'VPW' and term 'B'
CDF parameter not found for 'subtype'. User property will be cretated
Created propName='subtype'; propType='string'; propVal='nch'.
In CDF... Created propName='model'; propType='string'; propVal='nch'.
Created propName='model'; propType='string'; propVal='nch'.
CDF Type is 'string' and the value given in netlist is 'float' - hence converting to 'string'
In CDF... Created propName='l'; propType='string'; propVal='0.06'.
CDF Type is 'string' and the value given in netlist is 'float' - hence converting to 'string'
In CDF... Created propName='w'; propType='string'; propVal='0.33'.

Clearly the Device Mapping is not handling the units on the conversion from the CDL float to the CDF string correclty:  

L=6e-8 -> 0.06u -> 60m (!)
W=3.3e-7 -> 0.33u -> 330m (!)

For reference, here's what I have in the device_map file:

devSelect := nfet nch
propMap := W w L l

devSelect := pfet pch
propMap := W w L l

devSelect := diode ndio
propMap := AREA area PJ pj

I've looked through the transferOA.pdf help file but don't see anything addressing this.
Anyone have any ideas how to get this to run smoothly?

Brian

  • Cancel
Parents
  • bdjones1
    bdjones1 over 10 years ago

    Thanks Marc!

    I gave that a shot, and now the netlist fails to parse.  When I have the ".SCALE METER" line commented it out, it imports fine, but with the wrong size.  When I uncomment that line, I get the error in the log file below.  Am I missing something?

    ===================
    Spice In Log File
    ===================
    Parameter file: /tmp/spiceInPuje188
    Import Parameters:
    Netlist file name: /.........../sc9_cln65lp_base_rvt.cdl
    Output library name: sc9_cln65lp_base_rvt
    Output View Type: schematic
    Schematic view name: schematic
    Netlist view name: netlist_tmp
    Reference Library List: tsmcN65 sc9_cln65lp_base_rvt_bdj
    Device-mapping file name: /............../device_map
    Master Cell for Ground: gnd
    Cells to be Overwritten: <all>
    Schematic Generation parameter file: /tmp/schOpts_spiceInPuje188
    Simulator: spectre
    Output Simulator: spectre
    paramCaseValue: default
    Parser: ASSURA
    Language: CDL
    WARNING (SPICEIN-99): 'Import Subcircuit List' is not found in the specification, hence setting it to
    default empty value and importing all sub-circuits in the netlist.
    ERROR (SPICEIN-102): SpiceIn failed to parse the cdl netlist file '/............./sc9_cln65lp_base_rvt.cdl'. You may read logfile 'lvsrpt.wrn'
    for details.

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

    3 years after posting this question, I found myself asking it again and finding my original post.  After some fumbling around, I was able to fix a CDL import scale issue with this syntax:

    .OPTION SCALE 1e-6

    The syntax of ".SCALE METER" or ".SCALE 1e-6" caused import errors.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to bdjones1

    I just did some testing with a netlist that looked like this:

    *
    .GLOBAL VDD VSS

    .SUBCKT myCdlInv Y A
    M1 Y A VDD VDD P L=6e-08 W=6.6e-07
    M2 Y A VSS VSS N L=6e-08 W=3.3e-07
    .ENDS myCdlInv

    This imports with the dimensions as specified untouched (apologies for the typo in the messages!):

    CDF parameter not found for 'L'. User property will be cretated
    Created propName='L'; propType='float'; propVal='6e-08'.
    CDF parameter not found for 'W'. User property will be cretated
    Created propName='W'; propType='float'; propVal='3.3e-07'

    If the netlist has the CDL directive *.SCALE (note that it has a * before it because it is not SPICE - CDL often uses a single star for such "pragma"):

    *
    .GLOBAL VDD VSS
    *.SCALE METER

    .SUBCKT myCdlInv Y A
    M1 Y A VDD VDD P L=6e-08 W=6.6e-07
    M2 Y A VSS VSS N L=6e-08 W=3.3e-07
    .ENDS myCdlInv

    Then they are indeed scaled:

    CDF parameter not found for 'L'. User property will be cretated
    Created propName='L'; propType='float'; propVal='0.06'.
    CDF parameter not found for 'W'. User property will be cretated
    Created propName='W'; propType='float'; propVal='0.33'

    If you then add:

    *
    .GLOBAL VDD VSS
    *.SCALE METER
    .OPTION SCALE 1e-6

    .SUBCKT myCdlInv Y A
    M1 Y A VDD VDD P L=6e-08 W=6.6e-07
    M2 Y A VSS VSS N L=6e-08 W=3.3e-07
    .ENDS myCdlInv

    then that undoes the effects of the *.SCALE METER. Obviously just removing the *.SCALE METER or putting an additional * in front (so **.SCALE METER) does the same thing.

    Note that .SCALE METER will not work because that's not a valid CDL command - it is *.SCALE METER.

    So overall, my guess is that your netlist (somewhere) has a *.SCALE METER in it, and that's what was causing the original problem. Adding the .OPTION SCALE 1e-6 just reverses the effect of that.

    Regards,

    Andrew.

    • Cancel
    • Vote Up -1 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to bdjones1

    I just did some testing with a netlist that looked like this:

    *
    .GLOBAL VDD VSS

    .SUBCKT myCdlInv Y A
    M1 Y A VDD VDD P L=6e-08 W=6.6e-07
    M2 Y A VSS VSS N L=6e-08 W=3.3e-07
    .ENDS myCdlInv

    This imports with the dimensions as specified untouched (apologies for the typo in the messages!):

    CDF parameter not found for 'L'. User property will be cretated
    Created propName='L'; propType='float'; propVal='6e-08'.
    CDF parameter not found for 'W'. User property will be cretated
    Created propName='W'; propType='float'; propVal='3.3e-07'

    If the netlist has the CDL directive *.SCALE (note that it has a * before it because it is not SPICE - CDL often uses a single star for such "pragma"):

    *
    .GLOBAL VDD VSS
    *.SCALE METER

    .SUBCKT myCdlInv Y A
    M1 Y A VDD VDD P L=6e-08 W=6.6e-07
    M2 Y A VSS VSS N L=6e-08 W=3.3e-07
    .ENDS myCdlInv

    Then they are indeed scaled:

    CDF parameter not found for 'L'. User property will be cretated
    Created propName='L'; propType='float'; propVal='0.06'.
    CDF parameter not found for 'W'. User property will be cretated
    Created propName='W'; propType='float'; propVal='0.33'

    If you then add:

    *
    .GLOBAL VDD VSS
    *.SCALE METER
    .OPTION SCALE 1e-6

    .SUBCKT myCdlInv Y A
    M1 Y A VDD VDD P L=6e-08 W=6.6e-07
    M2 Y A VSS VSS N L=6e-08 W=3.3e-07
    .ENDS myCdlInv

    then that undoes the effects of the *.SCALE METER. Obviously just removing the *.SCALE METER or putting an additional * in front (so **.SCALE METER) does the same thing.

    Note that .SCALE METER will not work because that's not a valid CDL command - it is *.SCALE METER.

    So overall, my guess is that your netlist (somewhere) has a *.SCALE METER in it, and that's what was causing the original problem. Adding the .OPTION SCALE 1e-6 just reverses the effect of that.

    Regards,

    Andrew.

    • Cancel
    • Vote Up -1 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