• 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. replacing flatten contacts/vias with mosaic

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 145
  • Views 1930
  • 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

replacing flatten contacts/vias with mosaic

avinash1skill
avinash1skill over 15 years ago

My layout design is completely flatten, now to align with new Dk contact spacing rules i have to search for the cluster of contacts in the design and want to replace it with array so that i can resize them. I have written code to create/resize mosaic but struggling to get the bBox cordinates of the cluster of flatten contact/vias.

 I want to find similar pattern (like finding near by vias/contact) of layers within given area/distance.

PLZ help....

Thanks

  • Cancel
  • Quek
    Quek over 15 years ago

    Hi avinash

    I have not tried this out but perhaps it would work:
    a. Use leLayerAnd to find all interconnect overlaps (e.g. M1 and M2)
    b. Using the bbox of the shapes returned by leLayerAnd, use dbGetOverlaps for via layer
    c. Now that you have the IDs of all the individual vias, use dbDeleteObject to remove them
    d. Use a "case" switching to place a via array based on bbox of the shapes obtained in step "a"
    e. Delete all the shapes obtained in step "a"

    Hope that I have understood your question correctly. : )

    Best regards
    Quek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • avinash1skill
    avinash1skill over 15 years ago
    Hi Quek, thanks for ur reply. You have understood my question very well. But i am still not clear with the solution, can you give me an example?? Thanks, Avinash
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • babji
    babji over 15 years ago

    Something like this would do. 

     

     

          m2m3And_l = leLayerAnd( deGetCellView( )

                                                  list( "METAL2" "drawing" )

                                                  list( "METAL3" "drawing" )

                                                  list( "y3" "drawing" )

                                );;
       via23_spacing = 0.36
    v23met_enclose = 0.09
            vi23_width = 0.36
    ;;; sized_m2m3And_l = dbLayerSize( deGetCellView() list( "y4" "drawing" ) m2m3And_l via23_spacing )

    foreach( y3box m2m3And_l~>bBox
        when( via23_l = dbGetOverlaps( deGetCellView() y3box list( "VIA23" "drawing" )  )
            mapcar( 'dbDeleteObject via23_l )
            urx = xCoord( upperRight( y3box ))
            ury = yCoord( upperRight( y3box ))
            llx = xCoord(  lowerLeft( y3box ))
            lly = yCoord(  lowerLeft( y3box ))
            rows = round( ( ( urx - llx ) - ( 2 * v23met_enclose ) ) / ( vi23_width + via23_spacing ) )
            cols = round( ( ( ury - lly ) - ( 2 * v23met_enclose ) ) / ( vi23_width + via23_spacing ) )
            dbCreateSimpleMosaicByMasterName(
                                            deGetCellView()
                                             "someViaLibrary"
                                             "via2"
                                             "symbolic"
                                            nil
                                            list( llx+v23met_enclose lly+v23met_enclose ) ;adjust this depending on via origin.
                                            "R0"
                                            rows
                                            cols
                                            via23_spacing+vi23_width
                                            via23_spacing+vi23_width
            )                                
        );when
    )

    mapcar( 'dbDeleteObject m2m3And_l )

    • 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