• 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. how to make the variables and utilize the coordinates.

Stats

  • Replies 7
  • Subscribers 149
  • Views 785
  • Members are here 0

how to make the variables and utilize the coordinates.

Noobnoob
Noobnoob 1 month ago

Hello, i'm sorry for my english skill.

As a title, i wonder how to make variables and count those.

I'm making Layout Skill that count Channel of MOS by using skill language.

For example,

if two MOS that have w = 5um & l = 5um and two MOS that have w = 3um & l = 5um are placed in top level Layout Cellview.

I want to show that number of each MOS that include channel size in CIW.

CIW :

width = 5um & length = 5um, multi = 2ea

width = 3um & length = 5um, multi = 2ea

Presently, i got coordinate of each channel in top level.

But, i have trouble with utilzing coordinates...

How can i make variables by size and count those....?

below, i made a script by using skill language and wonder how to utilize coordinates.

  • Cancel
  • Sign in to reply
Parents
  • Noobnoob
    Noobnoob 1 month ago

    diff_overlaps = dbGetTrueOverlaps(wcv wcv~>bBox list("DIFF" "drawing") 32 t);you got db id of all diff layer.
    diff_point = foreach(mapcar diff_overlap diff_overlaps
    case( ExtractLayerDB(diff_overlap)~>objType
    ( "rect" TransBBoxToPoint(dbTransformBBox(ExtractLayerDB(diff_overlap)~>bBox dbGetInstTransform(diff_overlap))))
    ( "path" dbTransformPointList(dbConvertPathToPolygon(ExtractLayerDB(diff_overlap))~>points dbGetInstTransform(diff_overlap)))
    ( "polygon" dbTransformPointList(ExtractLayerDB(diff_overlap)~>points dbGetInstTransform(diff_overlap)))
    )
    )

    pimp_overlaps = dbGetTrueOverlaps(wcv wcv~>bBox list("PSD" "drawing") 32 t)
    pimp_point = foreach(mapcar pimp_overlap pimp_overlaps
    case( ExtractLayerDB(pimp_overlap)~>objType
    ( "rect" TransBBoxToPoint(dbTransformBBox(ExtractLayerDB(pimp_overlap)~>bBox dbGetInstTransform(pimp_overlap))))
    ( "path" dbTransformPointList(dbConvertPathToPolygon(ExtractLayerDB(pimp_overlap))~>points dbGetInstTransform(pimp_overlap)))
    ( "polygon" dbTransformPointList(ExtractLayerDB(pimp_overlap)~>points dbGetInstTransform(pimp_overlap)))
    )
    )

    nimp_overlaps = dbGetTrueOverlaps(wcv wcv~>bBox list("NSD" "drawing") 32 t)
    nimp_point = foreach(mapcar nimp_overlap nimp_overlaps
    case( ExtractLayerDB(nimp_overlap)~>objType
    ( "rect" TransBBoxToPoint(dbTransformBBox(ExtractLayerDB(nimp_overlap)~>bBox dbGetInstTransform(nimp_overlap))))
    ( "path" dbTransformPointList(dbConvertPathToPolygon(ExtractLayerDB(nimp_overlap))~>points dbGetInstTransform(nimp_overlap)))

    channel_point = dbPointArrayAnd(wcv poly_point diff_point)
    p_channel_point = dbPointArrayAnd(wcv channel_point pimp_point)
    n_channel_point = dbPointArrayAnd(wcv channel_point nimp_point)

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
Reply
  • Noobnoob
    Noobnoob 1 month ago

    diff_overlaps = dbGetTrueOverlaps(wcv wcv~>bBox list("DIFF" "drawing") 32 t);you got db id of all diff layer.
    diff_point = foreach(mapcar diff_overlap diff_overlaps
    case( ExtractLayerDB(diff_overlap)~>objType
    ( "rect" TransBBoxToPoint(dbTransformBBox(ExtractLayerDB(diff_overlap)~>bBox dbGetInstTransform(diff_overlap))))
    ( "path" dbTransformPointList(dbConvertPathToPolygon(ExtractLayerDB(diff_overlap))~>points dbGetInstTransform(diff_overlap)))
    ( "polygon" dbTransformPointList(ExtractLayerDB(diff_overlap)~>points dbGetInstTransform(diff_overlap)))
    )
    )

    pimp_overlaps = dbGetTrueOverlaps(wcv wcv~>bBox list("PSD" "drawing") 32 t)
    pimp_point = foreach(mapcar pimp_overlap pimp_overlaps
    case( ExtractLayerDB(pimp_overlap)~>objType
    ( "rect" TransBBoxToPoint(dbTransformBBox(ExtractLayerDB(pimp_overlap)~>bBox dbGetInstTransform(pimp_overlap))))
    ( "path" dbTransformPointList(dbConvertPathToPolygon(ExtractLayerDB(pimp_overlap))~>points dbGetInstTransform(pimp_overlap)))
    ( "polygon" dbTransformPointList(ExtractLayerDB(pimp_overlap)~>points dbGetInstTransform(pimp_overlap)))
    )
    )

    nimp_overlaps = dbGetTrueOverlaps(wcv wcv~>bBox list("NSD" "drawing") 32 t)
    nimp_point = foreach(mapcar nimp_overlap nimp_overlaps
    case( ExtractLayerDB(nimp_overlap)~>objType
    ( "rect" TransBBoxToPoint(dbTransformBBox(ExtractLayerDB(nimp_overlap)~>bBox dbGetInstTransform(nimp_overlap))))
    ( "path" dbTransformPointList(dbConvertPathToPolygon(ExtractLayerDB(nimp_overlap))~>points dbGetInstTransform(nimp_overlap)))

    channel_point = dbPointArrayAnd(wcv poly_point diff_point)
    p_channel_point = dbPointArrayAnd(wcv channel_point pimp_point)
    n_channel_point = dbPointArrayAnd(wcv channel_point nimp_point)

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • 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.

© 2026 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information