• 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. Big Schematic Automation

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 143
  • Views 12419
  • 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

Big Schematic Automation

Yasso
Yasso over 3 years ago

Hello! I'm having some trouble trying to figure out how to create a huge schematic using SKILL IDE. What I'm trying is the following.

Example2x2

Here I have a small design that has 4 cells, 2x2. I need to make one that has 1024x1024 cells, and it's impossible to do by hand so I decided to jump into SKILL. I'm a newby, no experience in using the commands and I have been looking for examples that could help me in making such a code. I saw a code made by @Andrew Beckett, in this topic https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/36821/schematic-creation-using-skill, which I modified a little so it places my cells in a array. The code is 100% made by him, I just tried to adapt it to my problem.

(defun abCreateBigSchematic (@key (cv (geGetEditCellView)) (numInsts 4) (numParallel 2)
(lib "Trabajo_Pixel") (cell "Pixel_Block") (view "symbol")
(stepX 3) (stepY 2) (stubLength 0.125) (textHeight 0.0625)
verbose)
(let (master (x 0) (y 0) pinLocations pinMaster pinVa_arriba pinVa_abajo wire numRows wireId instId Poti)
;Poti=list Pot1 Pot2 Pot3 Pot4
(setq master (dbOpenCellViewByType lib cell view))
(setq pinMaster (dbOpenCellViewByType "basic" "iopin" "symbol"))
(foreach mapcar terminal (dbGetq master terminals)
(centerBox (dbGetq (dbGetq (car (dbGetq terminal pins)) fig) bBox))
))
(setq numRows (quotient numInsts numParallel))
(for row 1 numRows
(when (and verbose (zerop (mod row 100))) (printf "Row %d\n" row))
(setq x 0)
(for col 1 numParallel
(dbCreateInst cv master "" (list x y) "R0")
;instId=(dbCreateInst cv master "" (list x y) "R0")
;instId~>Poti=Pot
pinVa_arriba=centerBox(car(dbFindTermByName(master "Va_arriba")->pins)->fig->bBox)
pinVa_abajo=centerBox(car(dbFindTermByName(master "Va_abajo")->pins)->fig->bBox)
/*wireId=dbCreateLine(cv '("wire" "drawing") list(pinVa_arriba pinVa_abajo))*/
(foreach (pinLoc netName) pinLocations (list pinVa_arriba pinVa_abajo)
(setq pinLoc (dbTransformPoint pinLoc (list (list x y) "R0" 1)))
(setq wire (schCreateWire cv "route" "full"
(list pinLoc (list (plus (xCoord pinLoc) stubLength) (yCoord pinLoc)))
0.01 0.01 0))
)
(setq x (plus x stepX))
)
(setq x (plus x stepX))
(setq y (plus y stepY))
(setq pinVa_arriba pinVa_abajo)
)
(schCheck cv)
(dbSave cv)
t
)

Managed to place the cells, but when I tried to add the wire connections as the image shows it shows me an error, I needed to add the power lines (Vdd1, Vdd2), the RST and the conections. Tried first with the easy Va_arriba to Va_abajo but it doesnt do it properly, adds a wire far away.

Adding a property to each cell gave me an error too. I marked both sentences that I tried to use inside the loop in bold. Since it's 2 properties, the area which will be the same everytime (1.2u) and the power. I was thinking in putting a loop for that too because I need to name that variable Pot<i>, for i:length(array)

Not sure if it is possible to do that, I didnt see anything like that when I was searching. One last thing, I know in the properties you can choose the Id of the cell that you are placing (symbolToString). In the image example I tried to have the Id in order.

I'm sorry for asking so many questions in one thread, I'm not really good at coding in SKILL. Thanks for reading, any kind of hint in how to implement these things would be a life saving thing.

Yass

  • Cancel
Parents
  • AurelBuche
    AurelBuche over 3 years ago

    Hi,

    I guess what you want is doable in SKILL even though I'm not sure I have fully understood your needs

    Are you sure you cannot achieve your objective using hierarchy coupled with parallel and serial instances, pins etc. ?

    You can do many things in Schematics using just the right instances/pins/nets names and buses suffixes

    Cheers

    Aurel

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to AurelBuche

    I was thinking the same thing as Aurelien. For example, here's a schematic for a 1024 element row - and you could then produce a similar schematic instantiating an iterated instance of PixelRow to connect the rows up. It doesn't really need SKILL...

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • Yasso
    Yasso over 3 years ago in reply to Andrew Beckett

     They told me that it was possible with busses (a college from work told me about it but I couldnt really replicate it) but my biggest fear was setting the parameters "Pot". They have to be in order for different purpouses. Is it possible to do that using ocean for example? Like

    desVar("cot0/Pot"    x )

    desVar("cot1/Pot"    x )

    desVar("cot2/Pot"    x )

    Wouldnt it repeat when trying to do it row by row with the new instance? or it would continue to cot1024,cot1025,cot1026.. . Sorry about my english, it's clunky.

    Thanks for the help!

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Yasso
    Yasso over 3 years ago in reply to Andrew Beckett

     They told me that it was possible with busses (a college from work told me about it but I couldnt really replicate it) but my biggest fear was setting the parameters "Pot". They have to be in order for different purpouses. Is it possible to do that using ocean for example? Like

    desVar("cot0/Pot"    x )

    desVar("cot1/Pot"    x )

    desVar("cot2/Pot"    x )

    Wouldnt it repeat when trying to do it row by row with the new instance? or it would continue to cot1024,cot1025,cot1026.. . Sorry about my english, it's clunky.

    Thanks for the help!

    • 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