• 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. Descending into a specific instance using Virtuoso Edit...

Stats

  • Locked Locked
  • Replies 11
  • Subscribers 143
  • Views 21204
  • 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

Descending into a specific instance using Virtuoso Edit-In-Place

DannyRitt
DannyRitt over 9 years ago

Hello,


At a TOP level layout block there are many instances that overlaps each other. Sometimes it can get tricky to select a specific cell and Edit In Place into it. I am looking for a SKILL script to click anywhere on the TOP level, it will pop a window with the instances names underneath. Upon selecting the instance, it will Edit-In-Place into it.

Any directions or tips are greatly appreciated.

Thanks,

Danny

  • Cancel
Parents
  • DannyRitt
    DannyRitt over 9 years ago

    And another approach. This version loads instances under the mouse Click into a form. Upon selecting an instance an EIP operation should be performed, into the selected instance. The issue is with the: leEditInPlace() command.

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    procedure(findInstances()
            enterPoints(?addPointProc "inst_Add" ?cmdName "FindInstance")
    )

    procedure(inst_Add(win points)
            let((point obj instList n listLegth )
                    cv = win->cellView
                    instancesList=()
                    when(and(windowp(win) dbobjectp(cv))
                            if(or(cv->cellViewType == "maskLayout" cv->cellViewType == "maskLayoutXL")
                            then
                                    when(point = car(last(points))
                                            when(deGetEIP(win)
                                                    point = geWindowToEditPoint(win point)
                                            )
                                            if(point=hiGetPoint(hiGetCurrentWindow())
                                            then
                                                    let((wbox sz loc inStr div)

                                                         instList=leSearchHierarchy(cv list(point point) 32 "inst" nil)

                                                         ; Remove Duplication  
                                                         instList=myUniqueList(instList)

                                                         if(instList
                                                             then
                                                         listLegth = length( instList )

                                                          for( n 1 listLegth
                                                            instancesList=append1(instancesList nthelem( n instList~>cellName ))
                                                             )
                                                             else printf("Nothing found under the cursor/at given point!\n")
                                                             )
                                                             ; Remove Duplications
                                                             instancesList=myUniqueList(instancesList)
                                                             printf("Detected Instances: %N\n" instancesList)

                                                             ; For first time window opening
                                                             unless(boundp('selectiveEIPForm)
                                                               createSelectiveEIPForm()
                                                              selectiveEIPForm~>viewInsts~>choices=instancesList
                                                              )
                                                              selectiveEIPForm~>viewInsts~>choices=instancesList

                                                             ; Show the Form
                                                             selectiveEIPApp()

                                                           ) ; let
                                            else
                                                    printf("*INFO* No valid instance at point.")
                                            )
                                    )
                            else
                                    printf("*INFO* CellView is not a layout - %s : %s" cv->cellName cv->cellViewType)
                            )
                    )
            )
    )

    ;---------------------------
    ; Remove List's Duplications
    ;---------------------------
    procedure(myUniqueList(aList)
        let((uTable newList)
            uTable = makeTable("uTable" nil)
            foreach(element aList
                unless(uTable[element]
                    newList = cons(element newList)
                    uTable[element] = t
                )
            )
            reverse(newList)
        )
    )


    ;--------------------
    ; Creating the form
    ;--------------------
    procedure( createSelectiveEIPForm()
       let( (viewInsts viewNameR selectEIP)

         viewNameR=hiCreateStringField(
                    ?name 'viewNameR
                    ?prompt "CellView Name"
                    ?value ""
                    ?callback ""
                    )

         selectEIP = hiCreateButton(
            ?name           'selectEIP
            ?buttonText     "EIP"
            ?callback       "leEditInPlace( hiGetCurrentWindow() list(list(cv~>geGetWindowCellView() 0 0 0) list(selectiveEIPForm->viewInsts->value 0 1 2) ) )"
                    )


         viewInsts = hiCreateListBoxField(
              ?name    'viewInsts
              ?choices instancesList
              ?multipleSelect nil
                            )

          hiCreateAppForm(
             ?name 'selectiveEIPForm
             ?formTitle "Selective EIP"
             ?fields list(
                        list(viewNameR 0:5 400:30 200)
                        list(viewInsts 0:35 400:120 200)
                        list(selectEIP 20:120 100:30 200)
                         )
             ?callback ""
             ?initialSize list(450 450)
          ) ;hiCreateAppForm

          hiDisplayForm('selectiveEIPForm)

       ) ;let
    ) ;procedure

    ;-------------
    ; Entry point
    ;-------------
    procedure(selectiveEIPApp()
        unless(boundp('selectiveEIPForm)
            createSelectiveEIPForm()
            )
        hiDisplayForm(selectiveEIPForm)
        )


    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • DannyRitt
    DannyRitt over 9 years ago

    And another approach. This version loads instances under the mouse Click into a form. Upon selecting an instance an EIP operation should be performed, into the selected instance. The issue is with the: leEditInPlace() command.

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    procedure(findInstances()
            enterPoints(?addPointProc "inst_Add" ?cmdName "FindInstance")
    )

    procedure(inst_Add(win points)
            let((point obj instList n listLegth )
                    cv = win->cellView
                    instancesList=()
                    when(and(windowp(win) dbobjectp(cv))
                            if(or(cv->cellViewType == "maskLayout" cv->cellViewType == "maskLayoutXL")
                            then
                                    when(point = car(last(points))
                                            when(deGetEIP(win)
                                                    point = geWindowToEditPoint(win point)
                                            )
                                            if(point=hiGetPoint(hiGetCurrentWindow())
                                            then
                                                    let((wbox sz loc inStr div)

                                                         instList=leSearchHierarchy(cv list(point point) 32 "inst" nil)

                                                         ; Remove Duplication  
                                                         instList=myUniqueList(instList)

                                                         if(instList
                                                             then
                                                         listLegth = length( instList )

                                                          for( n 1 listLegth
                                                            instancesList=append1(instancesList nthelem( n instList~>cellName ))
                                                             )
                                                             else printf("Nothing found under the cursor/at given point!\n")
                                                             )
                                                             ; Remove Duplications
                                                             instancesList=myUniqueList(instancesList)
                                                             printf("Detected Instances: %N\n" instancesList)

                                                             ; For first time window opening
                                                             unless(boundp('selectiveEIPForm)
                                                               createSelectiveEIPForm()
                                                              selectiveEIPForm~>viewInsts~>choices=instancesList
                                                              )
                                                              selectiveEIPForm~>viewInsts~>choices=instancesList

                                                             ; Show the Form
                                                             selectiveEIPApp()

                                                           ) ; let
                                            else
                                                    printf("*INFO* No valid instance at point.")
                                            )
                                    )
                            else
                                    printf("*INFO* CellView is not a layout - %s : %s" cv->cellName cv->cellViewType)
                            )
                    )
            )
    )

    ;---------------------------
    ; Remove List's Duplications
    ;---------------------------
    procedure(myUniqueList(aList)
        let((uTable newList)
            uTable = makeTable("uTable" nil)
            foreach(element aList
                unless(uTable[element]
                    newList = cons(element newList)
                    uTable[element] = t
                )
            )
            reverse(newList)
        )
    )


    ;--------------------
    ; Creating the form
    ;--------------------
    procedure( createSelectiveEIPForm()
       let( (viewInsts viewNameR selectEIP)

         viewNameR=hiCreateStringField(
                    ?name 'viewNameR
                    ?prompt "CellView Name"
                    ?value ""
                    ?callback ""
                    )

         selectEIP = hiCreateButton(
            ?name           'selectEIP
            ?buttonText     "EIP"
            ?callback       "leEditInPlace( hiGetCurrentWindow() list(list(cv~>geGetWindowCellView() 0 0 0) list(selectiveEIPForm->viewInsts->value 0 1 2) ) )"
                    )


         viewInsts = hiCreateListBoxField(
              ?name    'viewInsts
              ?choices instancesList
              ?multipleSelect nil
                            )

          hiCreateAppForm(
             ?name 'selectiveEIPForm
             ?formTitle "Selective EIP"
             ?fields list(
                        list(viewNameR 0:5 400:30 200)
                        list(viewInsts 0:35 400:120 200)
                        list(selectEIP 20:120 100:30 200)
                         )
             ?callback ""
             ?initialSize list(450 450)
          ) ;hiCreateAppForm

          hiDisplayForm('selectiveEIPForm)

       ) ;let
    ) ;procedure

    ;-------------
    ; Entry point
    ;-------------
    procedure(selectiveEIPApp()
        unless(boundp('selectiveEIPForm)
            createSelectiveEIPForm()
            )
        hiDisplayForm(selectiveEIPForm)
        )


    • 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