• 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. Get 'enabled' state of cellview counter

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 142
  • Views 2448
  • 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

Get 'enabled' state of cellview counter

FormerMember
FormerMember over 3 years ago

Hello,

I have a few procedures, which use Virtuoso functions (eg. dbLayerHoles) to create temporary shapes in a layout. This also seems to work, if the cellview is read-only. The shapes are deleted afterwards, but the cellview is then still marked as 'modified'. I tried to temporarily disabled/enable the cellview counter with 'dbDisable/EnableCellViewCounter',  but I did not find a way to get the initial state, in case the counter was already disabled by another function.

Ideally, I would use a temporary editable cellview, but there also seems no way to create one without write-access to the library.

Is it possible to check, if the cellview counter is already disabled or is there a way to create a cellview just in virtual memory?

Best regards
Paul

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

    Paul,

    There no SKILL function to determine the current status of the cellView counter. In general though disabling it is not something that any code should do for an extended portion of code - it should disable it just for the specific modifications you need.

    There's also no public way to create an in-memory only scratch cellView. There have been some requests for this, but there's no SKILL support for doing this.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AurelBuche
    AurelBuche over 3 years ago in reply to Andrew Beckett

    Hi Andrew,

    I am very interested about the in-memory scratch cellview and the way to disable the cellview counter during a modification

    For a specific function I am currently developing, I need to tile shapes into rectangles
    I know abe can do it using a tile iterator but I haven't figured how to tile my shapes horizontally instead of vertically...

    For now I am using the following solution:
    How can I do horizontal slicing using leSlice and horizontal tiling using dbLayerTile SKILL function

    But this implies to create the tiles and then delete them afterwards which marks the view as edited Disappointed

    How could I do it without affecting the edited status of the view and the 'undo / redo' history?

    Cheers,

    Aurélien

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to AurelBuche

    Hi Aurélien,

    First of all, you could use the abeLayerMergeTiles(layer "horizontal") function to do horizontal slicing - I think that's what you want.

    Anyway, other than that, you could simply use:

    unwindProtect(
      {
        dbDisableCellViewCounter(cv)
        ; here is where you would make your changes to the cellView that result in changes and presumably delete the temporary shapes afterwards
      }
      dbEnableCellViewCounter(cv)
    )

    That's the only public way of doing this right now. Given that any code should take care itself of enabling/disabling the counter, and this should be used with caution, the above is a pretty safe way of doing this.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AurelBuche
    AurelBuche over 3 years ago in reply to Andrew Beckett

    Ok, thanks for the "public" way of doing

    I actually created a wrap macro to write unwindProtect expressions in a more pythonic way

    (my_wrap_macro (dbDisableCellViewCounter cv) (dbEnableCellViewCounter cv)
      ;; Safely executed expressions
      ...)

    > expandMacro '(my_wrap_macro in out body)
    (progn in (unwindProtect (progn body) out))


    This is just syntactic sugar but I find it more readable to have the start expression right next to the close one
    Using this I rarely forget to close open ports, cellviews etc.

    I was not aware of the existence of abeLayerMergeTiles but I have tested it and it solve all my issues

    It's another discussion but the last thing ABE lacks is the possibility to fetch hierarchical shapes of provided instances (or selection) for a given layer

    I wrote a code browsing recursively the instances and concatening the transforms while adding the shapes to an ABE layer using abeLayerOrPtArray but I am not sure how robust and fast this will be in bigger hierarchies

    Anyway, thanks a lot for your help, it is always accurate and consise which is much appreciated

    Have a nice day,

    Aurélien

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to AurelBuche
    AurelBuche said:
    It's another discussion but the last thing ABE lacks is the possibility to fetch hierarchical shapes of provided instances (or selection) for a given layer

    There is abeLayerFromShapes, but that's only useful for level-0 shapes, so not really what you want. Probably worth contacting support to request an enhancement to get flat shapes from the hierarchy given a list of instances, instances+shapes, and a layer name.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to AurelBuche
    AurelBuche said:
    It's another discussion but the last thing ABE lacks is the possibility to fetch hierarchical shapes of provided instances (or selection) for a given layer

    There is abeLayerFromShapes, but that's only useful for level-0 shapes, so not really what you want. Probably worth contacting support to request an enhancement to get flat shapes from the hierarchy given a list of instances, instances+shapes, and a layer name.

    Andrew

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