• 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. Recall previous layout layer visibility sets

Stats

  • Locked Locked
  • Replies 8
  • Subscribers 143
  • Views 7085
  • 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

Recall previous layout layer visibility sets

blankman
blankman over 1 year ago

Hi All,

I'm trying to implement with skill a program that will allow for the previous set of layers that are visible in layout to be recalled. ie so when I add/remove the visibility of any layer in the current set of layers that are visible (by say, turning on the visibility of metal 1), then using this procedure I can recall the original set of layers that were visible (wherein metal 1 would not have been visible). I’m just wondering if such a function is possible to implement using skill, and if so could anyone help/ share advice as to how such a function could be implemented?

Also, I’m hoping to implement the function to step back through more than 1 previous layer visibility set, ie 2 or more.

Thanks in advance,

Kr,

B.

  • Cancel
Parents
  • AurelBuche
    AurelBuche over 1 year ago

    Hi Brian



    The simplest solution (which does not answer exactly what you ask for) is to create sets of layers : 

    For instance :

    '(CO POLY M1 V1 M2)

    '(CO M1 V1)

    '(M1 V1 M2)

    etc.

    And to write a function that cycle through the defined presets to make them visible while hiding the other layers.

    You could also make a function to toggle all the layers from a preset visible or hidden

    If you are not satisfied with this solution (which I can understand) I can provide you with one closer to what you expect.

    But it is quite tricky and I would advise to avoid using it.

    Cheers

    Aurélien 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • blankman
    blankman over 1 year ago in reply to AurelBuche

    Thanks Aurélien, it would be much appreciated if you could share a workable solution when time permits. I have not yet formally trained on skill, something which I intend to soon do. Could I ask why would you not recommend using such a function? I am interested, as code robustness and reliability are a priority regarding my use case.

    Thank you, kind regards, B

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AurelBuche
    AurelBuche over 1 year ago in reply to blankman

    Hi,

    Something like that should do the job

    You will just have to replace the list of predefined layers sets by valid names in your techno

    (inScheme
    (let ((sets '( ("poly"   "contact" "metal1")
                   ("metal1" "v1"      "metal2")
                   ("metal2" "v2"      "metal3")
                   ;; All metals
                   ("metal1" "v1" "metal2" "v2" "metal3")
                 ))
          )
    
      ;; Build an infinite loop of sets
      (nconc sets sets)
    
      (defglobalfun cycle_through_layer_sets ( @key  (cv (geGetEditCellView))
                                                     (tf (techGetTechFile cv))
                                               @rest _args )
        "Cycle through defined sets and display only one predefined group of layer"
        (let ((layer_names (pop sets)))
          ;; Set first set layer as entry one
          (leSetEntryLayer (list (car layer_names) "drawing") tf)
          ;; Disable all other layers
          (foreach lp tf->lps
            (let ((lpp (list lp->name lp->purpose)))
            (unless (equal lpp (list (car layer_names) "drawing"))
              (leSetLayerVisible lpp nil)
              )))
          ;; Enable only sets layers
          (foreach layer_name layer_names
            (leSetLayerVisible (list layer_name "drawing") t)
            )
          ));let ;def
    
      ));closure

    Cheers,

    Aurélien

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • blankman
    blankman over 1 year ago in reply to AurelBuche

    Thanks Aurélien, I have been OOO the past few weeks. Appreciate the help here. Yes this is very helpful, however I think it would be something more along the lines of actually saving previously viewed sets of layers, and then recalling them, is what I would be looking for. 

    Just thinking out loud, would there be the possibility in Skill, of coding a solution that would automatically and continuously monitor the layers that are set visible, and store in a variable/table, and anytime there was a change to any layer visibility, that change would automatically get stored into that variable/table as a new layer set? So that essentially, each change in layer visibility would be captured as a new layer set in the variable/table, up to a certain pre-set number of sets.

    And then a procedure that recalls each layer set incrementally from that variable/table?

    Thanks and kind regards,

    Brian.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AurelBuche
    AurelBuche over 1 year ago in reply to blankman
    blankman said:
    I think it would be something more along the lines of actually saving previously viewed sets of layers, and then recalling them

    Ok, so this is the tricky solution I was talking about before

    You can achieve this with namespaces and overload pteSetVisible but it is clearly not stable and advised not to be used 

    In the following discussion Cadence Community - Custom IC SKILL - SKILL namespaces, Andrew said namespaces were not ready at the time and I don't believe it changed during those 9 years...

    I managed to completely crash a few sessions with my recent trials (using 6.18.xx - 23.10.xx)

    Another solution which is quite dirty and inefficient would be to have a child process triggering regular recordings of the layer set every x seconds

    Anyway, I don't really get how recalling every change done to the layer set is convenient (at least how it is more convenient than re-selecting or re-deselecting the layers you want)

    I believe you will spend more time recalling previous sets than selecting directly the layers you need.

    But you might have a completely different usage than mine. If you can explain to me the use case and why you think it would be user-friendly, I would be very glad to understand.

    Cheers

    Aurélien

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • blankman
    blankman over 1 year ago in reply to AurelBuche

    Aurélien, thank you, the main use case (along side it being a handy additional feature for the smaller geometry processes by being able to recall complex layer vis combos that are frequently required) is to be able to visually compare certain layers within a layout. For instance, using 9 or so metals, being able to visually compare the corresponding 9 DMEXCL layers for those metals using one button is extremely handy. ie by loading each layer into the “history” of layers that were visible, and then recalling those layers sequentially with the button added to a form, to cycle back sequentially through the visibility of those layers. However, by the sounds of it, this is not really possible, and the effort would not be worthwhile, as the above-described function can of course can be accomplished by other means. Thanks again, with kind regards, B

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • blankman
    blankman over 1 year ago in reply to AurelBuche

    Aurélien, thank you, the main use case (along side it being a handy additional feature for the smaller geometry processes by being able to recall complex layer vis combos that are frequently required) is to be able to visually compare certain layers within a layout. For instance, using 9 or so metals, being able to visually compare the corresponding 9 DMEXCL layers for those metals using one button is extremely handy. ie by loading each layer into the “history” of layers that were visible, and then recalling those layers sequentially with the button added to a form, to cycle back sequentially through the visibility of those layers. However, by the sounds of it, this is not really possible, and the effort would not be worthwhile, as the above-described function can of course can be accomplished by other means. Thanks again, with kind regards, B

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • AurelBuche
    AurelBuche over 1 year ago in reply to blankman

    Ok I see,

    I believe working with a full history is hard to achieve

    But we can imagine different solutions :

    You could have a bindkey to save the current layer set and another to pop and apply lastly saved layer set

    You could have several bindkeys (one per metal for instance) to display only the associated layer sets.

    You could also use modifiers (shift/ctrl) to toggle on or off the associated set instead of displaying only it.

    Cheers

    Aurélien

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • blankman
    blankman over 1 year ago in reply to AurelBuche

    Hi Aurélien, very helpful, yes I am using some of these functions existingly, which have indeed been extremely useful. I will consider implementing the above function using one of these approaches I think. I appreciate your support here with this, thanks, kind regards, B

    • 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