• 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. Virtuoso Spice In Device Map property is not honored

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 125
  • Views 19659
  • 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

Virtuoso Spice In Device Map property is not honored

Nader Fathy
Nader Fathy over 4 years ago

Hello,

I have a spice netlist with multiple different resistors and I want to import it into Virtuoso by Spice-In from CIW (File > Import >Spice). A sample of my netlist is shown below:

R1 2 VDDESD 1.93853e+06 L=0.00253009 W=4.2e-07 $[PR] $X=69635 $Y=50840 $D=47

R2 TAVDD AVDD 0.00138889 L=0.00003009 W=1.8e-07 $[M2] $X=65635 $Y=40840 $D=47

R3 TAVDD AVDD 0.00138889 L=0.00003009 W=1.8e-07 $[M1] $X=65635 $Y=30840 $D=47

I have created a map file to match my PDK devices as shown below:

devSelect := resistor rphpoly
propMatch := PR
termOrder := PLUS MINUS
propMap := w w l l
addProp := model rppo1rpo

devSelect := resistor rm1
propMatch := M1
termOrder := PLUS MINUS
propMap := w w l l
addProp := model rm1

devSelect := resistor rm2
propMatch := M2
termOrder := PLUS MINUS
propMap := w w l l
addProp := model rm2

After I imported the netlist, I found that all resistors are mapped to "M2" metal resistor which is incorrect.

Did I do a mistake here in the settings? Is there a setting that I should be aware of to honor the device property?

Any help is much appreciated.

OS: Redhat 7

Virtuoso Version: IC6.1.8-64b.500.15

Kindest Regards,

Nader Fathy

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    Nader,

    That's actually a CDL netlist (not SPICE). CDL is based on SPICE and has some info embedded in SPICE comments (so the $[M1] is what is called the subtype). So you should import it as CDL, and then have your propMatch like this:

    propMatch := subtype PR

    propMatch := subtype M1

    propMatch := subtype M2

    That should then map the devices appropriately (I tested it).

    Andrew.

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    Nader,

    That's actually a CDL netlist (not SPICE). CDL is based on SPICE and has some info embedded in SPICE comments (so the $[M1] is what is called the subtype). So you should import it as CDL, and then have your propMatch like this:

    propMatch := subtype PR

    propMatch := subtype M1

    propMatch := subtype M2

    That should then map the devices appropriately (I tested it).

    Andrew.

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
Children
  • Nader Fathy
    Nader Fathy over 4 years ago in reply to Andrew Beckett

    Hi Andrew,

    Thank you for trying this out. I tried your approach and it worked indeed (Using subtype + CDL). However, the properties of the device (W,L) are ignored and not passed to the schematic view; all devices have the PDK default values (resistors and MOSFET devices). Please note that I am enabling "Trigger CDF Parameter Callback" option.

    This is an example of my resistor and MOSFET map:

    devSelect := resistor rm2
    propMatch := subtype M2
    termOrder := PLUS MINUS
    propMap := w w l l
    addProp := model rm2

    devSelect := N nmos2v_mac
    propMatch := subtype N
    termOrder := D G S B
    propMap := w w l l
    addProp := model nch_mac

    And these are examples of the netlist passed to 

    M47 VSSESD 1 VDDESD VSSESD N L=0.18U W=34.5U AD=1.656e-11 AS=1.6215e-11 PD=6.996e-05 PS=3.544e-05 NRD=0.013913 NRS=0.0136232 sa=4.392e-05 sb=4.8e-07 sca=0.122669 scb=8.20968e-08 scc=9.08179e-13 $X=3330 $Y=49630 $D=0

    R2 TAVDD AVDD 0.00138889 L=0.00003009 W=1.8e-07 $[M2] $X=65635 $Y=40840 $D=47

    Your help is greatly appreciated.

    Nader Sh.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to Nader Fathy

    Hi Nader,

    The parameters with CDL import will be in upper case, so your propMap need some attention - you can see the unmapped parameters show up as user-defined properties on the instances. So (depending on the destination PDK), something like:

    propMap := W segW L segL R r

    propMap := W w L l

    are likely to be needed.

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • Nader Fathy
    Nader Fathy over 4 years ago in reply to Andrew Beckett

    Hi Andrew,

    Again thank you very much, indeed this was the problem and now it works fine. There is, however, one final problem I am facing when importing the netlist: I am getting the following errors in the CIW:

    *Error* w is below minimum - setting to min

    *Error* l is greater than max - setting to max

    After debugging, I found out that the resistors are limited to a specific W & L in the PDK because the switch "Hard_constrain" is checked by default. When "Trigger CDF Parameters Callback" is checked, the numbers set are limited to the PDK maximum. According to the PDK manuals: to allow the values of W,L in the netlist "Hard_constrain" switch must be turned off. Is there a way I can use Virtuoso Spice-In and configure this?

    This is my resistor causing the problem in the netlist: 

    R1 2 VDDESD 1.93853e+06 L=0.00253009 W=4.2e-07 $[PR] $X=69635 $Y=50840 $D=47

    Many thanks for your help.

    Kindest Regards,

    Nader Sh.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to Nader Fathy

    Hi Nader,

    I suggest you contact customer support. In the TSMC PDK I looked at, that property is called HardCons and if I do:

    addProp: HardCons nil

    then it adds it as a string, not a boolean. You then get warnings in the CIW. I found CCR 753150 asking for the ability to set properties of different types, but it's not been implemented.

    I think the only workaround right now is probably to write some SKILL code which post-processes the imported schematic, sets HardCons=nil on each instance and then calls the CDF callbacks - e.g. using How to call CDF callbacks procedurally from SKILL to update CDF parameters? (this is how you had to do it before the ability to trigger the CDF callbacks was added for SPICE IN).

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • Nader Fathy
    Nader Fathy over 4 years ago in reply to Andrew Beckett

    Hi Andrew,

    I followed your guidelines with SKILL scripts and it worked!

    Thank you very much for everything. Have a nice weekend.

    Kindest Regards,

    Nader Fathy

    • 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