• 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. Need help in Creating via at overlap of two metal layer...

Stats

  • Locked Locked
  • Replies 1
  • Subscribers 144
  • Views 16109
  • 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

Need help in Creating via at overlap of two metal layers

Bhawna1
Bhawna1 over 10 years ago

Hi, 

I wanted to place via in overlap area of two metal layers. For that, I created a layer at overlap by using leLayerAnd function.

Created VIA array by calculating width length of the layer. I Need to do that for all the overlap layers present in the cell.

lFrom eLayerAnd function, I got a list of bBox of all overlap layers.

Now I want to repeat the function for all overlap layers. But dont know how to access that list of bBox.

Code I used is :

 

cv=geGetEditCellView()
OVERLAP_LIST=leLayerAnd(cv list("M1" "drawing") list("M2" "drawing") list("marker" "warning"))
OVERLAP_BBOX=OVERLAP_LIST~>bBox

BoxWidth=caadr(car(OVERLAP_BBOX))-caaar(OVERLAP_BBOX)
BoxHeight=car(cdadar(OVERLAP_BBOX))-cadaar(OVERLAP_BBOX)
COLUMNS=int(BoxWidth/0.142)
ROWS=int(BoxHeight/0.142)
dbCreateViaShapeArray(cv "V1" nil caaar(OVERLAP_BBOX)+0.017 cadaar(OVERLAP_BBOX)+0.017 0.142 0.142 0.05 0.05 ROWS COLUMNS)

This code is working for only one overlap layer. 

Can anybody help to repeat this for all metals.

Thanks

Bhawna

  • Cancel
Parents
  • theopaone
    theopaone over 10 years ago

    You need to get a little loopy to do this {8^)

    Code is not guaranteed to work.

    ;; Set up a list of layer pairs and via.

    layerList = list( list( list("M1" "drawing") list("M2"  "drawing") "V1") list(list("M2" "drawing") list("M3" "drawing" "V2) ... )

    cvId = geGetEditCellView()

    ;; Now loop through that list

    foreach( layerSet layerList
        overlapList = layerAnd( cv car(layerSet) cadr(layerSet) list("marker" "warning") )

    ;; Loop through the overlapList

        foreach( shape overlapList
            box = shape~>bBox

    BoxWidth= abs(xCoord(car(box)) - xCoord(cadr(box)))
    BoxHeight= abs(xCoord(car(box)) - xCoord(cadr(box)))
    COLUMNS=int(BoxWidth/0.142)
    ROWS=int(BoxHeight/0.142)
    dbCreateViaShapeArray(cv caddr(layerList) nil rodAddPoints( car(bBox) list(0.017 0.017) 0.142 0.142 0.05 0.05 ROWS COLUMNS)

        ) ;foreach shape

        geDeleteAllMarker(cvId)

    ) ; foreach layerSet

    You can put the overlaps and via size and spacing into the list as well if they are different for each via.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • theopaone
    theopaone over 10 years ago

    You need to get a little loopy to do this {8^)

    Code is not guaranteed to work.

    ;; Set up a list of layer pairs and via.

    layerList = list( list( list("M1" "drawing") list("M2"  "drawing") "V1") list(list("M2" "drawing") list("M3" "drawing" "V2) ... )

    cvId = geGetEditCellView()

    ;; Now loop through that list

    foreach( layerSet layerList
        overlapList = layerAnd( cv car(layerSet) cadr(layerSet) list("marker" "warning") )

    ;; Loop through the overlapList

        foreach( shape overlapList
            box = shape~>bBox

    BoxWidth= abs(xCoord(car(box)) - xCoord(cadr(box)))
    BoxHeight= abs(xCoord(car(box)) - xCoord(cadr(box)))
    COLUMNS=int(BoxWidth/0.142)
    ROWS=int(BoxHeight/0.142)
    dbCreateViaShapeArray(cv caddr(layerList) nil rodAddPoints( car(bBox) list(0.017 0.017) 0.142 0.142 0.05 0.05 ROWS COLUMNS)

        ) ;foreach shape

        geDeleteAllMarker(cvId)

    ) ; foreach layerSet

    You can put the overlaps and via size and spacing into the list as well if they are different for each via.

    • 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