• 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. SKILL code to generate lower routes with same path properties...

Stats

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

SKILL code to generate lower routes with same path properties of the selected path

Neeraj Vardhan
Neeraj Vardhan over 13 years ago

Hi,

I am trying to generate lower routes with same path properties as of the selected path. Can any one assist me how can i do it using SKILL.

Thanks  

 

  • Cancel
  • Neeraj Vardhan
    Neeraj Vardhan over 13 years ago
    Thanks Andrew. Sorry to bother you back.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Neeraj Vardhan
    Neeraj Vardhan over 13 years ago
    Hi shashi, i was trying to create a ROD in which i tried to put via's as subRect but i couldnt get a result. Can you help me out in this..
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • shashikumar22
    shashikumar22 over 13 years ago

    can you please elabroate what you want exactly ??

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Neeraj Vardhan
    Neeraj Vardhan over 13 years ago

    I am trying to create a rod path. Which should create a stack of top and its bottom layer with vias. for ex M2 Via1 M1. So that the vias should get automatically streached when i streach the path. 

     

    Thanks

    Neeraj 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Neeraj Vardhan
    Neeraj Vardhan over 13 years ago

    Hi Andrew,

     

    I was trying to implement this rodCreatepath function. In that i am facing problem in subrect lsit. When i tried to implement 

    width >=0.28   in subRect list . its only drawing the list 2 elements not the list1 elements. Can i do this in some other possible way.

         (w >=0.28  

       list(

            ?layer   list("VIA1" "drawing")

                 ?width     0.05

               ?length     0.05

                 ?beginOffset  -0.05

                             ?endOffset    -0.05

     ?beginSegOffset 0

     ?endSegOffset 0

     ;?space 0.08

     ?sep 0.075

     ?choppable t

     ?justification "center"

     ?gap "distribute"

    )

           list(

        ?layer   list("VIA1" "drawing")

                 ?width     0.05

               ?length     0.05

                 ?beginOffset  -0.05

                             ?endOffset    -0.05

     ?beginSegOffset 0

     ?endSegOffset 0

     ?space 0.08

     ?sep -0.065

     ?choppable t

     ?justification "center"

     ?gap "distribute"

      ) 

    )

    Thanks

    Neeraj 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 13 years ago
    Neeraj,

    Please post the entire call to rodCreatePath, not just part of it - that will make it much easier to see what you're doing in your code. It's surprising how often problems lay somewhere different to where people think... (In general, not just with this function).

    Regards,

    Andrew=
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Neeraj Vardhan
    Neeraj Vardhan over 13 years ago
    procedure(metalStackUP() cv = geGetEditCellView() x=css() MBL=x~>layerName w=x~>width pnts=x~>points println(w) This is the full code part of Createpath rodCreatePath( ?cvId cv ?layer MBL ?width w ?pts pnts ?choppable nil ?beginExt 0 ?endExt 0 ?encSubPath list( list( ?layer list("M2" "drawing") ?beginOffset 0.0 ?endOffset 0.0 ?enclosure 0.0 ?choppable t ) ) ?subRect list( cond( (w =0.28 list( list( ?layer list("VIA1" "drawing") ?width 0.05 ?length 0.05 ?beginOffset -0.05 ?endOffset -0.05 ?beginSegOffset 0 ?endSegOffset 0 ?space 0.08 ?sep 0.075 ?choppable t ?justification "center" ?gap "distribute" ) list( ?layer list("VIA1" "drawing") ?width 0.05 ?length 0.05 ?beginOffset -0.05 ?endOffset -0.05 ?beginSegOffset 0 ?endSegOffset 0 ?space 0.08 ?sep -0.065 ?choppable t ?justification "center" ?gap "distribute" ) ) ) ) );rodCreatePath cv=geDeleteSelSet() ) hiSetBindKey("Layout" "Ctrl8" "metalStackUP()")
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Neeraj Vardhan
    Neeraj Vardhan over 13 years ago
    procedure(metalStackUP()

    cv = geGetEditCellView()


    x=css()

    MBL=x~>layerName
    w=x~>width
    pnts=x~>points

    println(w)

     
    rodCreatePath(
                                        
                                                ?cvId cv
                                                ?layer MBL
                                                ?width w          
                                                ?pts pnts
                                                ?choppable nil
                                                ?beginExt 0
                                                ?endExt 0
                                                ?encSubPath list(
       
                                                list(
                                                      ?layer list("M2" "drawing") 
                                                      ?beginOffset 0.0
                                                      ?endOffset 0.0
                                                      ?enclosure 0.0
                                                      ?choppable t
                                                    )
                                                              
                                                    )       
       ?subRect list(
        
             cond(
       
       (w <=0.27
               
       list(
            
                ?layer   list("VIA1" "drawing")
                  ?width     0.05
              ?length     0.05
                ?beginOffset  -0.05
                              ?endOffset    -0.05
      ?beginSegOffset 0
      ?endSegOffset 0
      ;?space 0
    ?sep 0
    ?choppable t
    ?justification "center"
    ;?gap 0.08
    ;?connectivity "none" 
        
            )      
                                   )
         
         
         (w >=0.28 list(  
       
       list(
        
                 ?layer   list("VIA1" "drawing")
                 ?width     0.05
               ?length     0.05
                 ?beginOffset  -0.05
                             ?endOffset    -0.05
     ?beginSegOffset 0
     ?endSegOffset 0
     ?space 0.08
     ?sep 0.075
     ?choppable t
     ?justification "center"
     ?gap "distribute"
                                
                            )
     
                     list(
         
                 ?layer   list("VIA1" "drawing")
                 ?width     0.05
               ?length     0.05
                 ?beginOffset  -0.05
                             ?endOffset    -0.05
     ?beginSegOffset 0
     ?endSegOffset 0
     ?space 0.08
     ?sep -0.065
     ?choppable t
     ?justification "center"
     ?gap "distribute"
     
                                
                              )
                  )
       )  
         ) 
     
    );rodCreatePath
     
    cv=geDeleteSelSet()
       
      )

    hiSetBindKey("Layout" "Ctrl<key>8" "metalStackUP()")
     
     
    when i am trying to create 2 rows of via for increased width its just laying out only one row of via.  
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 13 years ago

    Neeraj,

    I was right - the problem is outside the code you originally posted...

    Most functions in SKILL return the last thing executed. The cond() function is the same - it is of this form:

    cond(
      (condExpr1 expr11 expr12 expr13)
      (condExpr2 expr21 expr22 expr23)
      ...
    )

    It tries each conditional expression (e.g. condExpr1) and if non-nil, the rest of that branch is executed. It will successively evaluate exprN1, exprN2, exprN3 and so on, and the return value will be the last expression on that branch (e.g. expr13 or expr23). In your case, the condition branch for w>=0.28  has two expressions, the two list() calls - and the return value will be the second of these.

    Since you want it to be a list of lists, the answer is to alter the code have the cond() one level up, so for example:

     

       ?subRect
        
             cond(
       
       (w <=0.27
               
       list(
                                                         list(
            
                ?layer   list("VIA1" "drawing")
                  ?width     0.05
              ?length     0.05
                ?beginOffset  -0.05
                              ?endOffset    -0.05
      ?beginSegOffset 0
      ?endSegOffset 0
      ;?space 0
    ?sep 0
    ?choppable t
    ?justification "center"
    ;?gap 0.08
    ;?connectivity "none" 
        
            )     
                                                           )
                                   )
         
         
         (w >=0.28 list(  
       
       list(
        
                 ?layer   list("VIA1" "drawing")
                 ?width     0.05
               ?length     0.05
                 ?beginOffset  -0.05
                             ?endOffset    -0.05
     ?beginSegOffset 0
     ?endSegOffset 0
     ?space 0.08
     ?sep 0.075
     ?choppable t
     ?justification "center"
     ?gap "distribute"
                                
                            )
     
                     list(
         
                 ?layer   list("VIA1" "drawing")
                 ?width     0.05
               ?length     0.05
                 ?beginOffset  -0.05
                             ?endOffset    -0.05
     ?beginSegOffset 0
     ?endSegOffset 0
     ?space 0.08
     ?sep -0.065
     ?choppable t
     ?justification "center"
     ?gap "distribute"
     
                                
                              )
                  )
       )  
         ) 
     
     
    Your brackets didn't match properly in your code, and it looked as if you'd tried to get the second branch to return a list of lists, but since you had a list() around the cond, that wouldn't have been correct either.
     
    BTW, you shouldn't use css() in your code. This is a private SKILL function and not documented. It might get changed or removed at some point in the future. So use car(geGetSelSet()) instead.
     
    Regards,
     
    Andrew
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Neeraj Vardhan
    Neeraj Vardhan over 13 years ago
    Thanks a log Andrew. The explanation cleared lot of my doubts. :-)
    • 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