• 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 SKILL
  3. skill code for layout area estimates

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 144
  • Views 15142
  • 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

skill code for layout area estimates

TeeBro
TeeBro over 7 years ago

Hello All,

I'm generating some skill code to create layouts from a schematic.  Basically, the code is called with a schematic and library as arguments. The code searches the schematic and creates layouts from the cells in the schematic through VXL.  I'm having two issues with this code.   When I generate the layout I call VXL with the full list of arguments as some change depending on different variables ( sometimes I change the utilization if there is a certain cell present/etc ) There is a fluid guardring pcell that surrounds all the other devices in the layout. After VXL placement I search all devices for this pcell.  If I find one I delete this instance and run the analog placer.  When the analog placer is finished I preform an update components and nets which brings in the pcell again.  This is done so that the placer doesn't place this pcell and enclose it within the prBoundary with the other devices.  Once the pcell is replaced I get the height and width of the prBoundary.  The pcell has a height and width parameter which changes its size.  Actually this pcell is a fluid guard ring.  I change the size of the guard ring and move it to surround the other devices.  This code works for the most part with a couple of exceptions.  If I start with a fresh virtuoso session and run the code directly I get a "Unbound variable - cdfgForm" which crashes the code.  I search all instances until I find the guardring pcell and then use vfoGetParam to get the current value of the height and width and vfoSetParam to set the new values.  The set param command uses the instance ID, the name of the parameter and the new value.  I have the code writing all values to a log file and all values are valid since I write the values prior to the set param command which then crashes the script.  If I run the code again without restarting the virtuoso session the script works perfectly. I tried to put the set param command within an if statement thinking that if it fails it will just not update the pcell but the unbound variable error stops the script.  I even wrote the new height and width values separately but it still errors on the first write of the parameter.  Oddly enough if the layout is opened after the crash the first parameter is written to the fluid guard ring and the fluid guard ring has updated its size. The problem might be the pcell itself but I'm hoping someone has something else I can try.  The second issue is that sometimes I loose connection to my license server so the script gets the license to use VXL but then looses the connection when the analog placer is called.  This causes *Error* eval: undefined function - nclAnalogPlaceCB which stops the script as well.  Is there a way to place the analog place command in an if or check the license server connection prior to issuing the command so that the script continues?  I apologize for being so long winded.

Thanks,

Thomas

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago

    Thomas,

    Unfortunately it's going to be rather hard to answer wearing a blindfold so that we can't a) see your code and b) see the instances it is trying to replace and precisely what goes wrong. This is probably something that is better dealt with via customer support because of that - hopefully the application engineer would then be able to see what you're doing.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DanielDing
    DanielDing over 7 years ago

    Sounds like a pretty complex layout automation you are building there. We had one built in a prior job, pcells can be tricky.

    if you search for cdfgForm in Virtuoso->Help->Virtuoso Documentation, there's a couple chapters detailing how your code should handle a nil cdfgForm and how to emulate cdfgForm. maybe that can answer some of your questions.

    you can always check licenses you currently checked out by:

    lbuiGetCheckedOutLicenses()

    or

    lbuiPrintLicenseUseReport(?products "95310" ?filename my_file_to_parse) -> where 95310 is layout VXL

    check if a function is defined already:

    fboundp('printf) -> lambda:printf

    fboundp('nclAnalogPlaceCB) -> nil

    Good luck!

    • 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