• 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. bindkeys in IC1.6.5

Stats

  • Locked Locked
  • Replies 13
  • Subscribers 129
  • Views 19332
  • 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

bindkeys in IC1.6.5

AlexGolberg
AlexGolberg over 14 years ago

I want to create set of bindkeys for managing work with layers.

For example, select layer, make layer visible/unvisible, make all layers visible/unvisible etc.,

that is to work with layers using bindkeys instead of Palette.

The  bindkeys i used in previous versions don't work with IC1.6.5

So, how to set bindkeys for layers in IC1.6.5?
  • Cancel
  • Andrew Beckett
    Andrew Beckett over 14 years ago

    I assume you meant IC6.1.5 (not 1.6.5). I don't see why bindkeys to alter visibility etc shouldn't work still - perhaps you can post what  you have that doesn't work?

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AlexGolberg
    AlexGolberg over 14 years ago

    You are right. The version is IC6.1.5
    Actually i have found the way to solve the problem with bindkeys. The problem is not related to a version i guess. The thing is that the numbers of the layers in Layers Palette (former LSW) are given not according to technology file, but according to order of the layers in the Palette.
    I use a function that shows Present Layers Only in the Layers Palette. So, when i used commands like leiMouseSetEntryLayer(12) in different cells different layers were selected. I would be very happy to know how could i make the layers in the Palette to have numbers according to  technology file, but not  according to the order in the Palette.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 14 years ago

    If you used the functions leSetLayerVisible or leSetAllLayerVisible, you could do this by referring to the layer/purpose name rather than a number.That would then be portable in all versions and would not be dependent upon LSW/palette ordering. There's also leSetLayerSelectable and leSetAllLayerSelectable. You can find out whether a layer is visible or selectable by using leIsLayerVisible or leIsLayerSelectable.

    Regards.

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AlexGolberg
    AlexGolberg over 14 years ago

    Thank you Andrew.

    For example i want to use leiMouseSetEntryLayer()  function

    and M1 drawing layer.

    Can you write  me the exact function.

    I tried different ways to insert  M1 drawing into brackets, but i probably used wrong syntacs.

    Thank you in advance,

    Alex

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 14 years ago

     Alex,

    For that you'd use leSetEntryLayer. This (and the functions I mention before) are documented in cdnshelp, with examples which show the syntax. It would be:

    leSetEntryLayer(list("M1" "drawing"))

    or

    leSetEntryLayer('("M1" "drawing"))

    For visibility, you'd use:

    leSetLayerVisible(list("M1" "drawing") nil)  ; for invisible

    leSetLayerVisible(list("M1" "drawing") t) ; for visible

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AlexGolberg
    AlexGolberg over 14 years ago

     Thank you. I'll check it.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • IClayoutEng
    IClayoutEng over 13 years ago
    Andrew, I have banging my head trying to get my bind keys working again and I'm having a heck of a time! Our last project we used IC6.1.4. with the LSW and I created bindkeys to turn everything off and turn on a specific layers. i.e. CO, M1, M1 pin, Via1. Doing this would also turn off the schematic layers, so I added them as well. The format I used was: hiSetBindKeys( "Layout" list( list("Shift1" " leSetAllLayerVisible(nil) leiMouseSetEntryLayer(313) leiMouseSetEntryLayer(315) leiMouseSetEntryLayer(318) leiMouseSetEntryLayer(33) leiMouseSetEntryLayer(35) leiMouseSetEntryLayer(203) hiRedraw()") I didn't put all the entry's in, this is just a portion. Actually, I was hitting the 511 character limit. BUT, this would turn on M1, M1pin, Via1 and all the schematic layers ONLY and etc for Shft 2, 3, 4... I also had 1 turn on just M1, M1pin, Via1 etc for key 2,3,4. So if we had just M2 showing, we could also turn on M1 or M3. Our New project is now on IC6.1.5. and we have elected to go with the using the palette. Now using the same PDK 65nm process, the bindkeys work fine until we switch from "All Valid layers" to "All Used Layers" then things break and we can't get back unless we restart the tool. The bindkeys essentially turn other layers on and not the ones intended. So, I have been talking with other cadence employees and they gave me the ideas of the commands you listed above, but the tool just doesn't seem to except them. When I read in the bindkey.il file it gives my SYNTAX errors. I have tried exactly what you have stated above with no success. What I want use to be simple, not sure what the heck is going on by very frustrating. What we want is: shift 1 -> Turn everything off except CO, M1, M1pin, Via1 as well as leaving the schematic layers on and text. shift 2 -> Turn everything off except Via1, M2, M2pin, Via2 as well as leaving the schematic layers on and text. etc for 3,4,5,6,7,8,9,0 As well as have: 1 = Turn CO, M1, M1pin, Via1 on 2 = Turn Via1, M2, M2pin, Via2 on I hope this isn't to much to digest, but I have triied allot of different things and not getting no where. I'm not the savy on writing code and we have a very small CAD team. Thanks for any advice and info in advance..
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • IClayoutEng
    IClayoutEng over 13 years ago
    This sure didn't come out the way I typed it???? It Posted in one big messy paragraph.... UGH!!
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • dmay
    dmay over 13 years ago

    Here is some code that will help you setup bindkeys to do this. I had to find some help on Source Link so that I could programmatically turn off the "Used Layers Only" on the layer palette. When this is on, if a layer like M2 is not used, we can't make it valid. So the pte commands below I pulled from Sourcelink.

    You'll setup bindkeys like this:
    hiSetBindKey("Layout" "<Key>1" "adjustLayers(1)")
    hiSetBindKey("Layout" "<Key>2" "adjustLayers(2)")

    You'll need to put together the list of layers you want for each setting.

    procedure(adjustLayers(key)
      let((tfId layers lp)
        tfId = techGetTechFile(geGetEditCellView()~>lib)
        case(key
            (1   layers = list("con" "metal1" "via1"))
            (2   layers = list("via1" "metal2" "via2"))
            (3   layers = list("via2" "metal3"))
        )
        ;Turn off the "used layers" so that unused layers can appear in the list
        pteShowUsedLayers(nil)
        ;Set the metal layer valid and as the entry layer
        leSetLayerValid(list(cadr(layers) "drawing") t)
        leSetEntryLayer(list(cadr(layers) "drawing"))
        ;Make all other layers invisible
        leSetAllLayerVisible(nil)
        foreach(layer layers
            lp = techFindLayer(tfId "metal1")
            ;ensure the layer is valid
            foreach(purpose lp~>lps~>purpose
                leSetLayerValid(list(layer purpose) t)
                leSetLayerVisible(list(layer purpose) t)
            )
        )
        ;Turn on System layers for schematics (this includes text drawing)
        foreach(l setof(lyr tfId~>lps lyr~>number >= 207) 
            l~>visible = t
        )
        t
      ) ;let
    ) ;proc

    procedure(pteShowUsedLayers(show @optional (swin hiGetSessionWindow(hiGetCurrentWindow())))
        _pteHiLayerShowUsedLPP(pteGetLayersWindow() nil)
    ) ;proc

    ;The following code was found on Sourcelink
    ;http://support.cadence.com/wps/mypoc/cos?uri=deeplinkmin:ViewSolution;solutionNumber=11711618;searchHash=94940eb4f4671f56ac55a49dba5988d8
    procedure(pteGetWindowList(@optional (name "") (swin hiGetSessionWindow(hiGetCurrentWindow())))
      let(((handle strcat("pte" name)) lst )
        foreach(dwin reverse(hiGetWindowList('dockable))
            when(((hiGetSessionWindow(dwin) == swin) && eqv(0
                        strncmp(sprintf(nil "%L"
                                (dwin->hiHandle)
                            ) handle
                            strlen(handle)
                        )
                    ))
                lst = cons(dwin lst)
            )
        )
        lst
      )
    )

    procedure(pteGetLayersWindow(@optional (swin hiGetSessionWindow(hiGetCurrentWindow())))
      let(((dwins pteGetWindowList("Layer" swin)))
            if(dwins car(dwins) nil)
      )
    )

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 13 years ago

    Derek,

    You don't need to turn the Used Layers Only off to adjust the layer validity etc (from my experiments, at least). Of course, it won't appear in the palette if that filter is on, so maybe that's what you're really wanting - you won't be able to pick it in the palette.

    Andrew.

    • 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