• 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. Can we draw mutlipath different width and spacing at the...

Stats

  • Locked Locked
  • Replies 13
  • Subscribers 144
  • Views 19613
  • 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

Can we draw mutlipath different width and spacing at the same time?

Manu81
Manu81 over 16 years ago
Can we draw mutlipath different width and spacing at the same time?
  • Cancel
Parents
  • rajput
    rajput over 11 years ago

    Hi Andrew,

       Following is the script which i write for coaxial multipath it is working fine in gpdk180. Actually i want to make it technology independent .How can i do that. Actually i am new to skill learning from last 2-3  weeks .Please help me how to approach to make it technology independent..

     

     
    /***********Form Creation*************/
    procedure(openform()


    metal_list = list("Metal1" "Metal2" "Metal3" "Metal4" "Metal5" "Metal6")

    Sig_lines= hiCreateIntField(
    ?name 'Sig_lines
    ?prompt "No of Signal lines"
    ?value 1
    )

    sig_metal_layer= hiCreateCyclicField(            
    ?name  'sig_metal_layer
    ?prompt "Signal Metal layer"
    ?choices  metal_list
    )

    spacing_lines= hiCreateFloatField(
    ?name 'spacing_lines
    ?prompt "Spacing b/w Signal lines"
    ?value 0.6
    )

    width_lines= hiCreateFloatField(
    ?name 'width_lines
    ?prompt "Width of Signal lines"
    ?value 0.8
    )

    spacing_gnd_lines= hiCreateFloatField(
    ?name 'spacing_gnd_lines
    ?prompt "Spacing from GND lines"
    ?value 1.0
    )


    width_gnd_lines= hiCreateFloatField(
    ?name 'width_gnd_lines
    ?prompt "width of GND lines"
    ?value 1.2
    )



    multipath= hiCreateAppForm(
    ?name 'multipath
    ?formTitle "coaxial_multipath"
    ?callback "enterpoints()"
    ?fields list(Sig_lines sig_metal_layer spacing_lines width_lines spacing_gnd_lines  
    width_gnd_lines )
    ?help "multipath" )

     hiDisplayForm(multipath)

    )




    /****************************************/

    procedure(enterpoints()
    enterPath(
       ?prompts list("Enter 1st point:" "Enter next point:")
       ?doneProc "Shield"
    ))
        

    ;; Create a shielded path
    procedure( Shield(win done pts)

      errset(
       (let (cv layer purpose list_draw_layer tech width1 tfId)

          unless( done printf("Finished!") )

          cv = geGetEditCellView()
                   
        
        
         separation = multipath->spacing_gnd_lines->value + 1/2*(multipath->width_gnd_lines->value) +
         1/2*(multipath->width_lines->value)
        
        
        
        
         sig_lines=multipath->Sig_lines->value                                 
        
         temp_list= list()
         i=1
         while(i<=sig_lines-1
        
         sepsiglines= i*(multipath->spacing_lines->value) + (i-1)*(multipath->width_lines->value)
        
        
                               lista=list(
                                      ?layer list(  "Metal2" "drawing" )
                                      ?justification "right"
                                     ?sep sepsiglines
                                      ?width multipath->width_lines->value
                               ) ;end of offset sublist2
        temp_list= append1(temp_list lista)
        i++
         )
        
        if( sig_lines > 1
        then
        delta = sepsiglines + multipath->spacing_gnd_lines->value + multipath->width_lines->value
        )
        if( sig_lines == 1
        then
        delta = separation
        )
        
        
        
          rodCreatePath(


            ?layer        list(  "Metal2" "drawing")
            ?pts         foreach(   mapcar point pts
                             geWindowToEditPoint(hiGetCurrentWindow() point)
                    )
                 ?width         multipath->width_lines->value
                 ?justification     "center"
                 ?cvId         cv
             ?offsetSubPath
                         append(temp_list list(
                               list(
                                      ?layer list( "Metal2" "drawing")
                                      ?justification "left"
                                      ?sep separation
                                      ?width  multipath->width_gnd_lines->value
                               ) ;end of offset sublist1
           
           
                               list(
                                      ?layer list(  "Metal2" "drawing" )
                                      ?justification "right"
                                     ?sep delta
                                      ?width multipath->width_gnd_lines->value
                               ) ;end of offset sublist2
                        
                        
                               list(
                                      ?layer list(  "Metal1" "drawing" )
                                      ?justification "right"
                            ?sep  -((multipath->width_gnd_lines->value)+(multipath->width_lines->value)+(multipath->spacing_gnd_lines->value))
                                      ?width delta +2*(multipath->width_gnd_lines->value)+(multipath->width_lines->value)+(multipath->spacing_gnd_lines->value)
                               ) ;end of offset sublist3    
                        
                               list(
                                      ?layer list(  "Metal3" "drawing" )
                                      ?justification "right"
                            ?sep  -((multipath->width_gnd_lines->value)+(multipath->width_lines->value)+(multipath->spacing_gnd_lines->value))
                                      ?width delta +2*(multipath->width_gnd_lines->value)+(multipath->width_lines->value)+(multipath->spacing_gnd_lines->value)
                               ) ;end of offset sublist4    
                        
                        
                        ) ;end of offset list of lists
                     )
        
        

             
              ?subRect
                         list(

           
                             list(
                            ?layer     list("Via1" "drawing")
                            ?length     nil
                            ?choppable     t
                            ?sep     ((0.5*(multipath->width_gnd_lines->value))+(0.5*(multipath->width_lines->value))+(multipath->spacing_gnd_lines->value))
                            ?justification     "center"
                            ?space     nil
                            ?beginOffset     -0.300000
                            ?endOffset     -0.300000
                            ?gap     "distribute"
                        );end of subRect list1a
                        
                        list(
                            ?layer     list("Via1" "drawing")
                            ?length     nil
                            ?choppable     t
                            ?sep     -(((sig_lines-1)*(multipath->spacing_lines->value))+(multipath->spacing_gnd_lines->value)+
                                                             (0.5*(multipath->width_gnd_lines->value))+((sig_lines-0.5)*(multipath->width_lines->value)))
                            
                            ?justification     "center"
                            ?space     nil
                            ?beginOffset     -0.300000
                            ?endOffset     -0.300000
                            ?gap     "distribute"
                        );end of subRect list1b
                        
                        
                             list(
                            ?layer     list("Via2" "drawing")
                            ?length     nil
                            ?choppable     t
                            ?sep     ((0.5*(multipath->width_gnd_lines->value))+ (0.5*(multipath->width_lines->value))+(multipath->spacing_gnd_lines->value))
                            ?justification     "center"
                            ?space     nil
                            ?beginOffset     -0.300000
                            ?endOffset     -0.300000
                            ?gap     "distribute"
                        );end of subRect list2a
                                 
                                        list(
                            ?layer     list("Via2" "drawing")
                            ?length     nil
                            ?choppable     t
                            ?sep    -(((sig_lines-1)*(multipath->spacing_lines->value))+(multipath->spacing_gnd_lines->value)+
                                                             (0.5*(multipath->width_gnd_lines->value))+((sig_lines-0.5)*(multipath->width_lines->value)))
                            ?justification     "center"
                            ?space     nil
                            ?beginOffset     -0.300000
                            ?endOffset     -0.300000
                            ?gap     "distribute"
                        );end of subRect list2b         

        
                         );end of subrect of lists


        
                  ) ;end of rodCreatePath
       ) ; end of let
     
      ) ; end of errset
    ); end of procedure


    hiSetBindKey("Layout" "Shift<key>2" "openform()")

     

     Regards

    pankaj

     

     

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • rajput
    rajput over 11 years ago

    Hi Andrew,

       Following is the script which i write for coaxial multipath it is working fine in gpdk180. Actually i want to make it technology independent .How can i do that. Actually i am new to skill learning from last 2-3  weeks .Please help me how to approach to make it technology independent..

     

     
    /***********Form Creation*************/
    procedure(openform()


    metal_list = list("Metal1" "Metal2" "Metal3" "Metal4" "Metal5" "Metal6")

    Sig_lines= hiCreateIntField(
    ?name 'Sig_lines
    ?prompt "No of Signal lines"
    ?value 1
    )

    sig_metal_layer= hiCreateCyclicField(            
    ?name  'sig_metal_layer
    ?prompt "Signal Metal layer"
    ?choices  metal_list
    )

    spacing_lines= hiCreateFloatField(
    ?name 'spacing_lines
    ?prompt "Spacing b/w Signal lines"
    ?value 0.6
    )

    width_lines= hiCreateFloatField(
    ?name 'width_lines
    ?prompt "Width of Signal lines"
    ?value 0.8
    )

    spacing_gnd_lines= hiCreateFloatField(
    ?name 'spacing_gnd_lines
    ?prompt "Spacing from GND lines"
    ?value 1.0
    )


    width_gnd_lines= hiCreateFloatField(
    ?name 'width_gnd_lines
    ?prompt "width of GND lines"
    ?value 1.2
    )



    multipath= hiCreateAppForm(
    ?name 'multipath
    ?formTitle "coaxial_multipath"
    ?callback "enterpoints()"
    ?fields list(Sig_lines sig_metal_layer spacing_lines width_lines spacing_gnd_lines  
    width_gnd_lines )
    ?help "multipath" )

     hiDisplayForm(multipath)

    )




    /****************************************/

    procedure(enterpoints()
    enterPath(
       ?prompts list("Enter 1st point:" "Enter next point:")
       ?doneProc "Shield"
    ))
        

    ;; Create a shielded path
    procedure( Shield(win done pts)

      errset(
       (let (cv layer purpose list_draw_layer tech width1 tfId)

          unless( done printf("Finished!") )

          cv = geGetEditCellView()
                   
        
        
         separation = multipath->spacing_gnd_lines->value + 1/2*(multipath->width_gnd_lines->value) +
         1/2*(multipath->width_lines->value)
        
        
        
        
         sig_lines=multipath->Sig_lines->value                                 
        
         temp_list= list()
         i=1
         while(i<=sig_lines-1
        
         sepsiglines= i*(multipath->spacing_lines->value) + (i-1)*(multipath->width_lines->value)
        
        
                               lista=list(
                                      ?layer list(  "Metal2" "drawing" )
                                      ?justification "right"
                                     ?sep sepsiglines
                                      ?width multipath->width_lines->value
                               ) ;end of offset sublist2
        temp_list= append1(temp_list lista)
        i++
         )
        
        if( sig_lines > 1
        then
        delta = sepsiglines + multipath->spacing_gnd_lines->value + multipath->width_lines->value
        )
        if( sig_lines == 1
        then
        delta = separation
        )
        
        
        
          rodCreatePath(


            ?layer        list(  "Metal2" "drawing")
            ?pts         foreach(   mapcar point pts
                             geWindowToEditPoint(hiGetCurrentWindow() point)
                    )
                 ?width         multipath->width_lines->value
                 ?justification     "center"
                 ?cvId         cv
             ?offsetSubPath
                         append(temp_list list(
                               list(
                                      ?layer list( "Metal2" "drawing")
                                      ?justification "left"
                                      ?sep separation
                                      ?width  multipath->width_gnd_lines->value
                               ) ;end of offset sublist1
           
           
                               list(
                                      ?layer list(  "Metal2" "drawing" )
                                      ?justification "right"
                                     ?sep delta
                                      ?width multipath->width_gnd_lines->value
                               ) ;end of offset sublist2
                        
                        
                               list(
                                      ?layer list(  "Metal1" "drawing" )
                                      ?justification "right"
                            ?sep  -((multipath->width_gnd_lines->value)+(multipath->width_lines->value)+(multipath->spacing_gnd_lines->value))
                                      ?width delta +2*(multipath->width_gnd_lines->value)+(multipath->width_lines->value)+(multipath->spacing_gnd_lines->value)
                               ) ;end of offset sublist3    
                        
                               list(
                                      ?layer list(  "Metal3" "drawing" )
                                      ?justification "right"
                            ?sep  -((multipath->width_gnd_lines->value)+(multipath->width_lines->value)+(multipath->spacing_gnd_lines->value))
                                      ?width delta +2*(multipath->width_gnd_lines->value)+(multipath->width_lines->value)+(multipath->spacing_gnd_lines->value)
                               ) ;end of offset sublist4    
                        
                        
                        ) ;end of offset list of lists
                     )
        
        

             
              ?subRect
                         list(

           
                             list(
                            ?layer     list("Via1" "drawing")
                            ?length     nil
                            ?choppable     t
                            ?sep     ((0.5*(multipath->width_gnd_lines->value))+(0.5*(multipath->width_lines->value))+(multipath->spacing_gnd_lines->value))
                            ?justification     "center"
                            ?space     nil
                            ?beginOffset     -0.300000
                            ?endOffset     -0.300000
                            ?gap     "distribute"
                        );end of subRect list1a
                        
                        list(
                            ?layer     list("Via1" "drawing")
                            ?length     nil
                            ?choppable     t
                            ?sep     -(((sig_lines-1)*(multipath->spacing_lines->value))+(multipath->spacing_gnd_lines->value)+
                                                             (0.5*(multipath->width_gnd_lines->value))+((sig_lines-0.5)*(multipath->width_lines->value)))
                            
                            ?justification     "center"
                            ?space     nil
                            ?beginOffset     -0.300000
                            ?endOffset     -0.300000
                            ?gap     "distribute"
                        );end of subRect list1b
                        
                        
                             list(
                            ?layer     list("Via2" "drawing")
                            ?length     nil
                            ?choppable     t
                            ?sep     ((0.5*(multipath->width_gnd_lines->value))+ (0.5*(multipath->width_lines->value))+(multipath->spacing_gnd_lines->value))
                            ?justification     "center"
                            ?space     nil
                            ?beginOffset     -0.300000
                            ?endOffset     -0.300000
                            ?gap     "distribute"
                        );end of subRect list2a
                                 
                                        list(
                            ?layer     list("Via2" "drawing")
                            ?length     nil
                            ?choppable     t
                            ?sep    -(((sig_lines-1)*(multipath->spacing_lines->value))+(multipath->spacing_gnd_lines->value)+
                                                             (0.5*(multipath->width_gnd_lines->value))+((sig_lines-0.5)*(multipath->width_lines->value)))
                            ?justification     "center"
                            ?space     nil
                            ?beginOffset     -0.300000
                            ?endOffset     -0.300000
                            ?gap     "distribute"
                        );end of subRect list2b         

        
                         );end of subrect of lists


        
                  ) ;end of rodCreatePath
       ) ; end of let
     
      ) ; end of errset
    ); end of procedure


    hiSetBindKey("Layout" "Shift<key>2" "openform()")

     

     Regards

    pankaj

     

     

     

    • 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