• 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. Sense gate metal1 in pcell(lowest hierarchy) and draw metal1...

Stats

  • Locked Locked
  • Replies 10
  • Subscribers 144
  • Views 2576
  • 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

Sense gate metal1 in pcell(lowest hierarchy) and draw metal1 path to connect all gates in a row of 10 pcells in current hierarchy(1 hierarchy above than the lowest hierarchy).

SkillGakusei
SkillGakusei over 7 years ago

Hello all,

I have instantiated ten units of basic nfet instance P-cells, arranged in 1 single row, all are aligned in y-axis, all are abbuting each other. I want to write a skill code that if i select all ten nfet instances, it should sense the metal1 over gate of the nfet instances and make a M1 metal path to connect all the gates of the ten nfets in my layout level, with a press of some key. Also, i cant desend into p-cell since access is denied. How can i do this?

Thanks

SkillGakusei


  • Cancel
  • tweeksii
    tweeksii over 7 years ago

    Often pcells have the ability to create structures like this themselves, by putting all the gates in a single nfet instance and turning on some parameter to connect the gates together.  Consult your pcell documentation to see what features are available!

    Failing that, I think VCR or Virtuoso-GXL has some kind of fancy auto-routing feature that can do this....

    Otherwise, you could code this up yourself with dbShapeQuery, dbGetHierPathTransform, dbTransformPoint/dbTranformBBox, and dbCreatePath.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • skillUser
    skillUser over 7 years ago

    In addition to what Tom said you might try looking at the rod* SKILL functions - each instance has a rod ID and you may be able to query shapes (like pins) inside of the PCell.  By the way, if you couldn't descend or see into the PCell you wouldn't be able to use it, so I assume you are talking about edit access. But you don't need edit access to be able to 'see' the shapes inside the PCell.  Using ROD would make things much easier because then you can use a function like rodCreatePath() to create a path from one handle (a point on the pin shape you identified from one instance) to another handle (ditto).

    Hopefully this additional hint may help you.

    Best regards,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • SkillGakusei
    SkillGakusei over 7 years ago in reply to skillUser

    How to know get the coordinates(coordinates according to my cellview) of gate M1 in my nfet p-cell, i am not able to do that. Is there any way of doing that?  Otherwise i have to take ROD's's handle's coordinates and add some calculated distance to gate's M1 in um and add to the ROD's handle coordinates. Can i do that? But then that wont be a general code for every which would work for every nfet because of different number of fins.   I am sorry to ask you questions, its only been 3 days i have started with SKILL.  

    Also, i tried this code for some other purpose: I selected 2 instances,

    a=geGetSelSet()~>xy                    ; Output is something like this: ((0.635 0.506) (2.1665 0.5975)), The list's each element is in pairs for 2 selected instances, i want to add .038 to them in next line.
    b=mapcar('plus 'a '((0.038 0.038) (0.038 0.038)))
    dbCreatePath(geGetEditCellView() "M2" b 0.024)

    Bold line throws me this error : *Error* mapcar: argument #2 should be a list (type template = "ul") - a

    Note that each element in this is in pairs. In this i want to increase the current xy coordinates of two instances with 0.038um. 

    Please thrill me with your acumen. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • SkillGakusei
    SkillGakusei over 7 years ago in reply to tweeksii

    dbTransformPoint/dbTranformBBox: i could'nt find these in Cadence SKILL API Finder. 

    I know how to use dbCreatePath. About the rest, how to use them? What do you mean by query? 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • skillUser
    skillUser over 7 years ago in reply to SkillGakusei

    Hi,

    the "a" should not be quoted on that line, you want it to evaluate to the content of the variable 'a' so remove the single quote.

    However, back to the earlier question - the whole point of ROD is that it is Relative to the object(s) that you are working with. I don't have time to go through any examples right now but there are video and documentation and programming examples.

    Hopefully this will help?

    Best regards,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • tweeksii
    tweeksii over 7 years ago in reply to skillUser

    そう、そう、SKILL学生さん、そのRODリンクをよく勉強して、すぐわかりますよ。

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • SkillGakusei
    SkillGakusei over 7 years ago in reply to tweeksii

    Hello, i am not a Japanese and don't understand Japanese. :) 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • SkillGakusei
    SkillGakusei over 7 years ago in reply to SkillGakusei

    @skillUser This ain't working even if i put off the ' before a. : ( 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to SkillGakusei

    Not surprising that it doesn't work, because it would be attempting to add two lists. You have two lists of lists that need to be added - for that you'd have to do:

    b=mapcar(lambda((p1 p2) mapcar('plus p1 p2)) a '((0.038 0.038) (0.038 0.038)))

    Or simpler (since it's the same offset):

    b=foreach(mapcar p1 a foreach(mapcar n1 p1 n1+0.038))

    This form will work for a list of any number of points, and is probably a bit more transparent.

    BTW, I did think about deleting Tom's Japanese post for being a non-English post, but I supposed (from sticking it through Google Translate) that it was an attempt at humour...

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • tweeksii
    tweeksii over 7 years ago in reply to Andrew Beckett
    Andrew Beckett said:
    BTW, I did think about deleting Tom's Japanese post for being a non-English post, but I supposed (from sticking it through Google Translate) that it was an attempt at humour...

    You know me so well... ^_^

    SkillGakusei said:
    Hello, i am not a Japanese and don't understand Japanese. :) 

    So "gakusei" is actually Dutch or something?

    • 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