• 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. Selection Problem SKILL messing with rectangle placemen...

Stats

  • Locked Locked
  • Replies 12
  • Subscribers 144
  • Views 19130
  • 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

Selection Problem SKILL messing with rectangle placement

ARB9
ARB9 over 6 years ago

I am gonna start off by saying that I am pretty new to SKILL. My Code is at the Bottom if you want to look at that. I'm having on odd problem with my SKILL Code. When it first places an Instance, you can move everything around independently. But, after you double click on an instance and it goes from the view with the red outline to the one with the white, things start going funky. First off, the only Pcell I can move is the one I initalliy double clicked to change the view. Second, if I move that one, any instance that is the same PCell moves with it. See Image where I move a corner cell and the other 3 move along with it.

                

If this was all that happened, it would be annoying but I could get around it. But, if I try to place a rectangle into the layout with SKILL using

rect3 = rodCreateRect(
?name "rect3"
?cvId geGetEditCellView()
?layer "Met5"
?bBox list(466:387 496:600)
)

it places 4 rectangles, each tied to one of the corners. I'm pretty sure this is based on the last thing I placed using the code since, when I tested it using PANALOG_S as the last thing I place, I ended with many rectangles. How can I make it only place one rectangle?

One last thing, if y'all are willing to help me with this as well. When I'm in the view with the red outline, the one where an instance if first placed, I am having trouble placing rectangles in any layer other than background. Can you do that with SKILL? I know that if the layout is in the other view, the one with white outlines, that I can make the rectangles place using that bit of code above. How can you change the view using SKILL? Thank Y'all again. And before you say anything about which pads I have where, I know that it is nonsensical. I am just trying to figure out the code so this is a test run.

procedure(placePadFrame1( @optional no_pads )

(setq no_pads 6.0)

(if (null no_pads) then

(setq no_pads (enterNumber ?prompts '("Please enter the number of pads on a side"))))

(setq xpointh 593)

(setq ypointh 300)

(setq xpointv 503)

(setq ypointv 849)

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PBREAK_T" "layout") nil (list xpointv+(40*-1) ypointh-223) "R0")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv+(40*0) ypointh-223) "R0")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PAVDD_S" "layout") nil (list xpointv+(40*1) ypointh-223) "R0")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PAVDD_T" "layout") nil (list xpointv+(40*2) ypointh-223) "R0")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv+(40*3) ypointh-223) "R0")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PAVDD_T" "layout") nil (list xpointv+(40*4) ypointh-223) "R0")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv+no_pads*40+346 ypointv+(40*0)-386) "R90")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PAVDD_T" "layout") nil (list xpointv+no_pads*40+346 ypointv+(40*1)-386) "R90")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PBREAK_T" "layout") nil (list xpointv+no_pads*40+346 ypointv+(40*2)-386) "R90")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv+no_pads*40+346 ypointv+(40*3)-386) "R90")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PAVDD_T" "layout") nil (list xpointv+no_pads*40+346 ypointv+(40*4)-386) "R90")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv+no_pads*40+346 ypointv+(40*5)-386) "R90")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv+(40*0) ypointv+no_pads*40) "R180")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PAVDD_T" "layout") nil (list xpointv+(40*1) ypointv+no_pads*40) "R180")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv+(40*2) ypointv+no_pads*40) "R180")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PAVDD_T" "layout") nil (list xpointv+(40*3) ypointv+no_pads*40) "R180")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv+(40*4) ypointv+no_pads*40) "R180")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PAVDD_T" "layout") nil (list xpointv+(40*5) ypointv+no_pads*40) "R180")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv-426 ypointh-70+(40*1)+233) "R270")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PBREAK_T" "layout") nil (list xpointv-426 ypointh-70+(40*2)+233) "R270")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv-426 ypointh-70+(40*3)+233) "R270")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PAVDD_T" "layout") nil (list xpointv-426 ypointh-70+(40*4)+233) "R270")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PANALOG_S" "layout") nil (list xpointv-426 ypointh-70+(40*5)+233) "R270")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PAVDD_T" "layout") nil (list xpointv-426 ypointh-70+(40*6)+233) "R270")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PCORNER_T" "layout") nil (list xpointv-426 ypointh+no_pads*40+549) "R270")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PCORNER_T" "layout") nil (list xpointv+no_pads*40+346 ypointh+no_pads*40+549) "R180")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PCORNER_T" "layout") nil (list xpointv+no_pads*40+346 ypointh-223) "R90")

(dbCreateInst (getEditRep) (dbOpenCellViewByType "Pad_Library" "PCORNER_T" "layout") nil (list xpointv-426 ypointh-223) "R0")

)

  • Cancel
Parents
  • MalcolmWhite
    MalcolmWhite over 6 years ago

    I'm just curious why you used the ROD function, you *can* use dbCreateRect() to make your rectangles and they are not inter-related to each other - it just becomes object "rect"  ,then you have to increment your placement coordinates and create the next rectangle.  

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • ARB9
    ARB9 over 6 years ago in reply to MalcolmWhite

    Gotcha, when I made this code, I was researching ways to do it and the way I saw to use dbCreateRect() was not working for me. Then I found the ROD function which worked a bit better but had this problem. Yesterday, I was able to figure out/find how you use dbCreateRect() and it's working much better. Thank you! I am still wondering about why the corners move together so if you could help me figure that out, I would really appreciate it!

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago in reply to ARB9

    I have no idea why you are seeing the symptoms you are (or were) seeing. I see no reason why this would be related to using rodCreateRect rather than dbCreateRect, since all that does is use a higher level function. Yes, you can set up persistent alignments between objects using rod functions, but you're not doing this here. I also don't see why your code would (or even could) cause everything to move together - to be honest, your description didn't make sense to me.

    There's an awful lot of information missing in the original question - the code doesn't even use rodCreateRect, so I've no idea what you're actually doing here...

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 6 years ago in reply to ARB9

    I have no idea why you are seeing the symptoms you are (or were) seeing. I see no reason why this would be related to using rodCreateRect rather than dbCreateRect, since all that does is use a higher level function. Yes, you can set up persistent alignments between objects using rod functions, but you're not doing this here. I also don't see why your code would (or even could) cause everything to move together - to be honest, your description didn't make sense to me.

    There's an awful lot of information missing in the original question - the code doesn't even use rodCreateRect, so I've no idea what you're actually doing here...

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • ARB9
    ARB9 over 6 years ago in reply to Andrew Beckett

    Ok, let me start from the beginning. I am making this code to make pad frames. My jumping off point was this site I found:

    https://sites.google.com/a/mst.edu/eech106-eda/2013spring_cpe411/45nm-lab-1--pad-frames

    I just expanded the amount of pads per side while using much of this code at first. Even at this point, everything was moving together so this has been a question to me for a while now.

    It was after this that I went onto creating rectangles. I did end up using dbCreateRect which works much better then using the ROD function did so now I am just trying to figure out that original problem with the Pads moving together. I am 100% certain that the rectangles, whether they are added or not, have no effect on this weird symptom. If you have no idea what causes it, I can try to work around it. And if you have any more questions, I would be happy to answer them

    Thanks for you help!

    Adam

    • 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