• 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. draw a maker layer to cover multiple devices in layout using...

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 142
  • Views 13442
  • 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

draw a maker layer to cover multiple devices in layout using SKILL

mctang21
mctang21 over 4 years ago

Hi 

I click and select multiple devices in VXL compliant schematic. The corresponding devices are highlighted in layout by VXL engine. Do you have the SKILL code to draw a rectangle which covers those devices in layout using a temporary marker layer ? 

Thanks,

ManChak

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    I'm not entirely sure what you want here, because there are several options (I'm assuming that the instances are selected, which is what normally happens when you select the instances in the schematic; they get cross-selected in the layout):

    1. The instances could be probed - for example:
      foreach(inst geGetSelSet() when(inst~>objType=="inst" geAddInstProbe(hiGetCurrentWindow() '("y0" "drawing") inst~>name)))
    2. You could create a highlight set:
      hs=geCreateHilightSet(geGetEditCellView() '("y2" "drawing"))
      hs~>enable=t
      foreach(inst geGetSelSet() geAddHilightFig(hs inst))
    3. You really could create markers:
      foreach(inst geGetSelSet()
        when(inst~>objType=="inst"
          dbCreateMarker(geGetEditCellView() strcat("Inst: " inst~>name) "Forum"
            destructuringBind(((llx lly) (urx ury)) inst~>bBox list(llx:lly llx:ury urx:ury urx:lly llx:lly)))
            list(inst)))

    The first two of these don't modify the database - the last does (you may want other arguments for dbCreateMarker function to create the marker differently). The last will show up in the annotation browser though.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • mctang21
    mctang21 over 4 years ago in reply to Andrew Beckett

    HI Andrew,

    Thank you for your information. I clarify my question further. 

    I click on two devices on the right hand side, Virtuoso EXL would highlight two devices in layout on the left hand side. I want to create two rectangles (using same marker layer) to cover the highlighted two devices in layout  (1 rectangle per layout device).

    Q1. Two rectangles are drawn to cover both devices in the layout after  I click Ok/Apply on my GUI in schematic. How do I find the corresponding EXL layout window when my GUI is invoked from schematic. 

    cv=geGetEditCellView()  may return cellview of schematic window since my GUI is invoked from schematic.  

    Q2. I want to stream out the drawn rectangle. I guess marker layer would not be exported, so I may need to define a few temporary layers in techfile. Is it correct ?

    Thanks,

    ManChak

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to mctang21

    Hi ManChak,

    I don't think there's a simple API to retrieve the layout window from the schematic when using VXL (at least I didn't spot it). You can find the layout cellView by using bndGetBoundObjects() on an instance (eg. one of the selected schematic instances), and then in the resulting objects you can look at the ~>cellView to find the containing layout cellView. I guess you could iterate over hiGetWindowList(), and find geGetEditCellView(win) for each window, and find the window that matches that cellView.

    To find the overall bBox, I would simply compute the overall minimium x and y of all the bBoxes and the maximum x and y of the all the bBoxes and find the overall bBox. Quite easy to do.

    I'm not really able to spend the time to write the code for you (rather busy at the moment) and it's still not that clear what/why you want this - hopefully the above will give you an approach you could explore.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • mctang21
    mctang21 over 4 years ago in reply to Andrew Beckett

    Hi Andrew,

    Thank you for your info. Your suggestion is good enough for me. I just want to confirm API which retrieve corresponding layout view  is available or not.

    Thanks,

    ManChak

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

    Hi Andrew, ManChak,

    I haven't worked with EXL so I am not sure this will work but I believe the function you were looking for is the following one (which works well in XL):

    (lxGetLXInfo "dstView" (geGetEditCellView)) ; returns the layout view
    (lxGetLXInfo "srcView" (geGetEditCellView)) ; returns the schematic view

    Cheers,

    Aurélien

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

    Hi Aurélien,

    The lxGetLXInfo is now obsolete however, and the documentation simply says to use lxGetSource instead. Part of the reason is that it doesn't quite work properly, particularly if you have two layout views that use the same schematic source (the schematic itself doesn't store info on the destination layout).

    This approach can be used instead though:

    procedure(CCFgetDestination(@optional (srcCv geGetEditCellView()))
        let((wins)
            wins=setof(win hiGetWindowList() lxGetSource(win)==srcCv && 
                geGetEditCellView(win)!=srcCv)
            mapcar('geGetEditCellView wins)
        )
    )

    If called with the cellView id of the schematic, or with the schematic window open, it will return a list of layout ids using that schematic as their source, and uses only public, supported functions.

    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