• 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. pCell skill for beginners

Stats

  • Locked Locked
  • Replies 21
  • Subscribers 148
  • Views 31839
  • 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

pCell skill for beginners

stuso
stuso over 16 years ago

Hi,

i'd like some advice for creating my first simple pCell from skill. I have no skill experience so i'm looking for a good place to start.

My ultimate aim (for now) is to create a rectangular via array with X and Y stretch handles. For example you have M1->M4(the top & bottom layers would be parameters) that you can stretch in X or Y and it fills with the max vias allowed by spacing rules. However to begin with i'd be happy to create a parameterised rectangle of M1 that i can stretch in one direction & take it from there.

Pointers to on-line tutorials and very simple examples would be great, right now i am blindly searching around source-link.

Thanks

Stu

  • Cancel
Parents
  • satishbabub
    satishbabub over 12 years ago

    Hello Lawrence ,

    I would really appreciate if you could take a look at the following code and the errors im getting .

    ; ------------------------------------------------------------------------------

    ; -- Init

    ; ------------------------------------------------------------------------------

    (define (jfet_fno_SKILL p_libname p_cellname) ; (pcDefinePCell

        (list

          (ddGetObj (eval p_libname) (eval p_cellname)) "layout"

        )

       

    ; ------------------------------------------------------------------------------

    ; -- Params

    ; ------------------------------------------------------------------------------

        (

          (W         float       10.0)

          (L          float       10.0)

          (PWpb       float  -0.20)

          (PDNpb            float   0.0)

          (PDPtop           boolean t)

          (PDPext           boolean t)

          (PDNcover   boolean t)

          (CELLHtop   boolean t)

         

        )

     

    ; ------------------------------------------------------------------------------

    ; -- Main

    ; ------------------------------------------------------------------------------

        (let

          (pcMember pcStretchGroup

              stretchOffsetX stretchOffsetY pcLib pcMaster pcInst

              pcTerm pcPin pcPinName pcNet pcTermNet

              pcNetName pcTermNetName pcMosaicInst tpcParameters pcParamProp

              pcStep pcStepX pcStepY pcRepeat pcRepeatX

              pcRepeatY pcIndexX pcIndexY pcLayer pcPurpose

              pcLabelText pcLabelHeight pcPropText pcParamText pcCoords

              pcPathWidth pcPolygonMargin

          )

          (setq pcLib

              (getSGq pcCellView lib)

          )

          (setq pcParameters

              (getSGq

                (getSGq pcCellView parameters) value

              )

          )

         

          (dbReplaceProp pcCellView "viewSubType" "string" "maskLayoutParamCell")

     

    ; -- Init layer names ----------------------------------------------------------

     

          lay_DIFF    = techGetLP(pcLib `("diff"   "drawing"))~>number

          lay_HV            = techGetLP(pcLib `("diff"   "hv"     ))~>number

          lay_POLY    = techGetLP(pcLib `("poly"   "drawing"))~>number

          lay_PWELL   = techGetLP(pcLib `("pwell"  "drawing"))~>number

          lay_NWELL   = techGetLP(pcLib `("nwell"  "drawing"))~>number

          lay_PDN           = techGetLP(pcLib `("nps"    "drawing"))~>number

          lay_PDP           = techGetLP(pcLib `("pps"    "drawing"))~>number

          lay_NSDM    = techGetLP(pcLib `("nsdm"   "drawing"))~>number

          lay_CELLM   = techGetLP(pcLib `("cellm"  "drawing"))~>number

          lay_CELLTX  = techGetLP(pcLib `("celltx" "drawing"))~>number

          lay_CELLH   = techGetLP(pcLib `("cellh"  "drawing"))~>number

          lay_CELLRS  = techGetLP(pcLib `("cellrs" "drawing"))~>number

          lay_CIRPO   = techGetLP(pcLib `("cirpo"  "drawing"))~>number

     

          lay_PIXID   = techGetLP(pcLib `("areaid" "pixel"))    ~>number

     

          lay_M1            = techGetLP(pcLib `("met1"   "drawing"))~>number

          lay_TEXT    = techGetLP(pcLib `("text"   "drawing"))~>number

     

    ; -- Defaults ------------------------------------------------------------------

     

          tech_lib          = "ts018c0702tc_dv"

          Wmax              = 20.0

          Lmax              = 20.0

          cor_size          = 0.15

         

          ref_x             =  0.0

          ref_y             = -L/2

     

    ; -- Init suncells -------------------------------------------------------------

     

          (setq pcMaster_DFM1 (dbOpenCellViewByType tech_lib "DFM1" "symbolic" "maskLayout"))

          (setq pcMaster_TPM1 (dbOpenCellViewByType tech_lib "TPM1" "symbolic" "maskLayout"))

         

         

    ; -- Metal 1 connection --------------------------------------------------------

         

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_M1 "drawing")

                (list

                    (range  ref_x+1.0                           ref_y+2.4+L)

                    (range  ref_x-1.0                           ref_y+2.4+L)

                    (range  ref_x-1.0                           10)

                    (range  ref_x+1.0                           10)

                )

              )

          )

     

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_M1 "drawing")

                (list

                    (range  ref_x+1.0                           ref_y-2.4)

                    (range  ref_x-1.0                           ref_y-2.4)

                    (range  ref_x-1.0                           -10)

                    (range  ref_x+1.0                           -10)

                )

              )

          )

         

    ; -- Contacts ------------------------------------------------------------------

         

          (numb_of_cont   = (round (Wmax/0.47))-1)

         

          (cell_coord     = (range ref_x-numb_of_cont/2.0*0.47 ref_y-2.5))

          (dbCreateParamInst pcCellView pcMaster_DFM1 nil cell_coord "R0" 1  list(

                      list( "column" "integer" numb_of_cont)

          )) 

     

          (cell_coord     = (range ref_x-numb_of_cont/2.0*0.47 ref_y+2.5+L))

          (dbCreateParamInst pcCellView pcMaster_DFM1 nil cell_coord "MX" 1  list(

                      list( "column" "integer" numb_of_cont)

          )) 

     

    ; -- Tap -----------------------------------------------------------------------

         

          (numb_of_cont   = (round ((Lmax+5)/0.47))-1)

         

          (cell_coord     = (range ref_x-(Wmax/2.0+4.0) -Lmax/2-2.5))

          (dbCreateParamInst pcCellView pcMaster_TPM1 nil cell_coord "R0" 1  list(

                      list( "row" "integer" numb_of_cont)

          )) 

     

          (cell_coord     = (range ref_x+(Wmax/2.0+34.0) -Lmax/2-2.5))

          (dbCreateParamInst pcCellView pcMaster_TPM1 nil cell_coord "R0" 1  list(

                      list( "row" "integer" numb_of_cont)

          )) 

     

         

    ; -- Diff ----------------------------------------------------------------------

     

          if((equal PDPext nil)

          then

          ; -- Do not ADD PDP extentions

                PDPext_diff = 0.0

          else

          ; -- ADD PDP extentions

                PDPext_diff = 1.3

          )

     

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_DIFF "drawing")

                (list

                    (range  ref_x+W/2.0                         ref_y+cor_size)

                    (range  ref_x+W/2.0+cor_size                ref_y+0.0)

                    (range  ref_x+Wmax/2.0+PDPext_diff          ref_y+0.0)

                    (range  ref_x+Wmax/2.0+PDPext_diff          ref_y-1.0)

                    (range  ref_x+Wmax/2.0                      ref_y-1.0)

                    (range  ref_x+Wmax/2.0                      ref_y-2.5)

     

                    (range  ref_x-Wmax/2.0                      ref_y-2.5)

                    (range  ref_x-Wmax/2.0                      ref_y-1.0)

                    (range  ref_x-Wmax/2.0-PDPext_diff          ref_y-1.0)

                    (range  ref_x-Wmax/2.0-PDPext_diff          ref_y+0.0)

                    (range  ref_x-W/2.0-cor_size                ref_y+0.0)

                    (range  ref_x-W/2.0                         ref_y+cor_size)

                   

                    (range  ref_x-W/2.0                         ref_y+0.0+L-cor_size)

                    (range  ref_x-W/2.0-cor_size                ref_y+0.0+L)

                    (range  ref_x-Wmax/2.0-PDPext_diff          ref_y+0.0+L)

                    (range  ref_x-Wmax/2.0-PDPext_diff          ref_y+1.0+L)

                    (range  ref_x-Wmax/2.0                      ref_y+1.0+L)

                    (range  ref_x-Wmax/2.0                      ref_y+2.5+L)

     

                    (range  ref_x+Wmax/2.0                      ref_y+2.5+L)

                    (range  ref_x+Wmax/2.0               ref_y+1.0+L)

                    (range  ref_x+Wmax/2.0+PDPext_diff          ref_y+1.0+L)

                    (range  ref_x+Wmax/2.0+PDPext_diff          ref_y+0.0+L)

                    (range  ref_x+W/2.0+cor_size                ref_y+0.0+L)

                    (range  ref_x+W/2.0                         ref_y+0.0+L-cor_size)

                   

                )

              )

          )

         

         

    ; -- PWELL ----------------------------------------------------------------------

      

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_PWELL "drawing")

                (list

     

                    (range  ref_x+PWpb+W/2.0              ref_y+PWpb+cor_size)

                    (range  40.0                                ref_y+PWpb+cor_size)

                    (range  40.0                                0.0-40.0)

                    (range  40.0                          0.0+40.0)

                    (range  -40.0                               0.0+40.0)

                    (range  -40.0                               0.0-40.0)

                    (range  40.0                                0.0-40.0)

                    (range  40.0                                ref_y+PWpb+cor_size)

     

                    (range  ref_x+PWpb+W/2.0                    ref_y+PWpb+cor_size)

                    (range  ref_x+PWpb+W/2.0+cor_size           ref_y+PWpb+0.0)

                    (range  ref_x+PWpb+Wmax/2.0           ref_y+PWpb+0.0)

                    (range  ref_x+PWpb+Wmax/2.0                       ref_y-PWpb-2.5)

     

                    (range  ref_x-PWpb-Wmax/2.0                 ref_y-PWpb-2.5)

                    (range  ref_x-PWpb-Wmax/2.0                 ref_y+PWpb+0.0)

                    (range  ref_x-PWpb-W/2.0-cor_size           ref_y+PWpb+0.0)

                    (range  ref_x-PWpb-W/2.0                  ref_y+PWpb+cor_size)

                   

                    (range  ref_x-PWpb-W/2.0                    ref_y-PWpb+0.0+L-cor_size)

                    (range  ref_x-PWpb-W/2.0-cor_size           ref_y-PWpb+0.0+L)

                    (range  ref_x-PWpb-Wmax/2.0          ref_y-PWpb+0.0+L)

                    (range  ref_x-PWpb-Wmax/2.0                 ref_y+PWpb+2.5+L)

     

                    (range  ref_x+PWpb+Wmax/2.0                 ref_y+PWpb+2.5+L)

                    (range  ref_x+PWpb+Wmax/2.0                       ref_y-PWpb+0.0+L)

                    (range  ref_x+PWpb+W/2.0+cor_size           ref_y-PWpb+0.0+L)

                    (range  ref_x+PWpb+W/2.0                    ref_y-PWpb+0.0+L-cor_size)

                   

                )

              )

          )

     

    ; -- PDN ----------------------------------------------------------------------

         

          if((equal PDNcover t)

          then

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_PDN "drawing")

                (list

                    (range  ref_x+Wmax/2.0+0.3                  ref_y-2.5-0.3)

                    (range  ref_x-Wmax/2.0-0.3                  ref_y-2.5-0.3)

                    (range  ref_x-Wmax/2.0-0.3                  ref_y+2.5+0.3+L)

                    (range  ref_x+Wmax/2.0+0.3                  ref_y+2.5+0.3+L)

                )

              )

          )

          else

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_PDN "drawing")

                (list

     

                    (range  ref_x+PDNpb+W/2.0                   ref_y+PDNpb+cor_size)

                    (range  ref_x+PDNpb+W/2.0+cor_size          ref_y+PDNpb+0.0)

                    (range  ref_x+PDNpb+Wmax/2.0          ref_y+PDNpb+0.0)

                    (range  ref_x+PDNpb+Wmax/2.0          ref_y-PDNpb-2.5)

     

                    (range  ref_x-PDNpb-Wmax/2.0                ref_y-PDNpb-2.5)

                    (range  ref_x-PDNpb-Wmax/2.0                ref_y+PDNpb+0.0)

                    (range  ref_x-PDNpb-W/2.0-cor_size          ref_y+PDNpb+0.0)

                    (range  ref_x-PDNpb-W/2.0                 ref_y+PDNpb+cor_size)

                   

                    (range  ref_x-PDNpb-W/2.0                   ref_y-PDNpb+0.0+L-cor_size)

                    (range  ref_x-PDNpb-W/2.0-cor_size          ref_y-PDNpb+0.0+L)

                    (range  ref_x-PDNpb-Wmax/2.0                ref_y-PDNpb+0.0+L)

                    (range  ref_x-PDNpb-Wmax/2.0                ref_y+PDNpb+2.5+L)

     

                    (range  ref_x+PDNpb+Wmax/2.0          ref_y+PDNpb+2.5+L)

                    (range  ref_x+PDNpb+Wmax/2.0          ref_y-PDNpb+0.0+L)

                    (range  ref_x+PDNpb+W/2.0+cor_size          ref_y-PDNpb+0.0+L)

                    (range  ref_x+PDNpb+W/2.0                   ref_y-PDNpb+0.0+L-cor_size)

                   

                )

              )

          )

          )

     

         

    ; -- PDP ----------------------------------------------------------------------

      

          if((equal PDPtop t)

          then

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_PDP "drawing")

                (list

                    (range  ref_x+Wmax/2.0+0.3+PDPext_diff      ref_y-1.0-0.3)

                    (range  ref_x-Wmax/2.0-0.3-PDPext_diff      ref_y-1.0-0.3)

                    (range  ref_x-Wmax/2.0-0.3-PDPext_diff      ref_y+1.0+0.3+L)

                    (range  ref_x+Wmax/2.0+0.3+PDPext_diff      ref_y+1.0+0.3+L)

                )

              )

          )

          )

     

    ; -- CELLH ----------------------------------------------------------------------

      

          if((equal CELLHtop t)

          then

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_CELLH "drawing")

                (list

                    (range  ref_x+Wmax/2.0+0.3+PDPext_diff+0.15 ref_y-1.0-0.3-0.15)

                    (range  ref_x-Wmax/2.0-0.3-PDPext_diff-0.15 ref_y-1.0-0.3-0.15)

                    (range  ref_x-Wmax/2.0-0.3-PDPext_diff-0.15 ref_y+1.0+0.3+L+0.15)

                    (range  ref_x+Wmax/2.0+0.3+PDPext_diff+0.15 ref_y+1.0+0.3+L+0.15)

                )

              )

          )

          )

     

    ; -- DIFF HV ----------------------------------------------------------------------

      

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_DIFF "hv")

                (list

     

                    (range  40.0                                -40.0)

                    (range  40.0                           40.0)

                    (range  -40.0                                40.0)

                    (range  -40.0                               -40.0)

     

                )

              )

          )    

     

    ; -- CELLM ----------------------------------------------------------------------

      

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_CELLM "drawing")

                (list

     

                    (range  40.0                                -40.0)

                    (range  40.0                           40.0)

                    (range  -40.0                                40.0)

                    (range  -40.0                               -40.0)

     

                )

              )

          )

     

    ; -- CIRPO ----------------------------------------------------------------------

      

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_CIRPO "drawing")

                (list

     

                    (range   40.3                               -40.3)

                    (range   40.3                                40.3)

                    (range  -40.3                                40.3)

                    (range  -40.3                               -40.3)

     

                )

              )

          )

     

    ; -- AREAID PIX ----------------------------------------------------------------------

      

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_PIXID "pixel")

                (list

     

                    (range  40.0                                -40.0)

                    (range  40.0                           40.0)

                    (range  -40.0                                40.0)

                    (range  -40.0                               -40.0)

     

                )

              )

          )

      

    ; -- label ----------------------------------------------------------------------

     

          (cell_coord     = (range ref_x ref_y))

          (dbCreateLabel pcCellView lay_TEXT cell_coord

                (sprintf nil "W=%.3f\nL=%.3f\nPWpb=%.3f\nPDNpb=%.3f\nPDPtop=%L\nPDPext=%L\nPDNcover=%L\nCELLHtop=%L"

                W L PWpb PDNpb PDPtop PDPext PDNcover CELLHtop  )

                "lowerLeft" "R0" "stick" 1)

         

    ; ------------------------------------------------------------------------------

    )

    )

    )

    I tried to load the skill code using

    load("/home/fg3z7q/Desktop/jfet_fno_SKILL.il")

    function jfet_fno_SKILL redefined

    t

    and when i call the function

    jfet_fno_SKILL "fno_ts018_etest" "jfet_fno_SKILL"

    it gives a waring stating that

    *WARNING* Invalid libId - dd:0x19a9bad4

    *WARNING* Invalid view name - nil

    nil

    Here I created a library named fno_ts018_etest and cell view named jfet_fno_SKILL before loading the skill.

    Im a beginer and I appreciate any sort of help regarding this

    Thanks,

    Satish

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • satishbabub
    satishbabub over 12 years ago

    Hello Lawrence ,

    I would really appreciate if you could take a look at the following code and the errors im getting .

    ; ------------------------------------------------------------------------------

    ; -- Init

    ; ------------------------------------------------------------------------------

    (define (jfet_fno_SKILL p_libname p_cellname) ; (pcDefinePCell

        (list

          (ddGetObj (eval p_libname) (eval p_cellname)) "layout"

        )

       

    ; ------------------------------------------------------------------------------

    ; -- Params

    ; ------------------------------------------------------------------------------

        (

          (W         float       10.0)

          (L          float       10.0)

          (PWpb       float  -0.20)

          (PDNpb            float   0.0)

          (PDPtop           boolean t)

          (PDPext           boolean t)

          (PDNcover   boolean t)

          (CELLHtop   boolean t)

         

        )

     

    ; ------------------------------------------------------------------------------

    ; -- Main

    ; ------------------------------------------------------------------------------

        (let

          (pcMember pcStretchGroup

              stretchOffsetX stretchOffsetY pcLib pcMaster pcInst

              pcTerm pcPin pcPinName pcNet pcTermNet

              pcNetName pcTermNetName pcMosaicInst tpcParameters pcParamProp

              pcStep pcStepX pcStepY pcRepeat pcRepeatX

              pcRepeatY pcIndexX pcIndexY pcLayer pcPurpose

              pcLabelText pcLabelHeight pcPropText pcParamText pcCoords

              pcPathWidth pcPolygonMargin

          )

          (setq pcLib

              (getSGq pcCellView lib)

          )

          (setq pcParameters

              (getSGq

                (getSGq pcCellView parameters) value

              )

          )

         

          (dbReplaceProp pcCellView "viewSubType" "string" "maskLayoutParamCell")

     

    ; -- Init layer names ----------------------------------------------------------

     

          lay_DIFF    = techGetLP(pcLib `("diff"   "drawing"))~>number

          lay_HV            = techGetLP(pcLib `("diff"   "hv"     ))~>number

          lay_POLY    = techGetLP(pcLib `("poly"   "drawing"))~>number

          lay_PWELL   = techGetLP(pcLib `("pwell"  "drawing"))~>number

          lay_NWELL   = techGetLP(pcLib `("nwell"  "drawing"))~>number

          lay_PDN           = techGetLP(pcLib `("nps"    "drawing"))~>number

          lay_PDP           = techGetLP(pcLib `("pps"    "drawing"))~>number

          lay_NSDM    = techGetLP(pcLib `("nsdm"   "drawing"))~>number

          lay_CELLM   = techGetLP(pcLib `("cellm"  "drawing"))~>number

          lay_CELLTX  = techGetLP(pcLib `("celltx" "drawing"))~>number

          lay_CELLH   = techGetLP(pcLib `("cellh"  "drawing"))~>number

          lay_CELLRS  = techGetLP(pcLib `("cellrs" "drawing"))~>number

          lay_CIRPO   = techGetLP(pcLib `("cirpo"  "drawing"))~>number

     

          lay_PIXID   = techGetLP(pcLib `("areaid" "pixel"))    ~>number

     

          lay_M1            = techGetLP(pcLib `("met1"   "drawing"))~>number

          lay_TEXT    = techGetLP(pcLib `("text"   "drawing"))~>number

     

    ; -- Defaults ------------------------------------------------------------------

     

          tech_lib          = "ts018c0702tc_dv"

          Wmax              = 20.0

          Lmax              = 20.0

          cor_size          = 0.15

         

          ref_x             =  0.0

          ref_y             = -L/2

     

    ; -- Init suncells -------------------------------------------------------------

     

          (setq pcMaster_DFM1 (dbOpenCellViewByType tech_lib "DFM1" "symbolic" "maskLayout"))

          (setq pcMaster_TPM1 (dbOpenCellViewByType tech_lib "TPM1" "symbolic" "maskLayout"))

         

         

    ; -- Metal 1 connection --------------------------------------------------------

         

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_M1 "drawing")

                (list

                    (range  ref_x+1.0                           ref_y+2.4+L)

                    (range  ref_x-1.0                           ref_y+2.4+L)

                    (range  ref_x-1.0                           10)

                    (range  ref_x+1.0                           10)

                )

              )

          )

     

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_M1 "drawing")

                (list

                    (range  ref_x+1.0                           ref_y-2.4)

                    (range  ref_x-1.0                           ref_y-2.4)

                    (range  ref_x-1.0                           -10)

                    (range  ref_x+1.0                           -10)

                )

              )

          )

         

    ; -- Contacts ------------------------------------------------------------------

         

          (numb_of_cont   = (round (Wmax/0.47))-1)

         

          (cell_coord     = (range ref_x-numb_of_cont/2.0*0.47 ref_y-2.5))

          (dbCreateParamInst pcCellView pcMaster_DFM1 nil cell_coord "R0" 1  list(

                      list( "column" "integer" numb_of_cont)

          )) 

     

          (cell_coord     = (range ref_x-numb_of_cont/2.0*0.47 ref_y+2.5+L))

          (dbCreateParamInst pcCellView pcMaster_DFM1 nil cell_coord "MX" 1  list(

                      list( "column" "integer" numb_of_cont)

          )) 

     

    ; -- Tap -----------------------------------------------------------------------

         

          (numb_of_cont   = (round ((Lmax+5)/0.47))-1)

         

          (cell_coord     = (range ref_x-(Wmax/2.0+4.0) -Lmax/2-2.5))

          (dbCreateParamInst pcCellView pcMaster_TPM1 nil cell_coord "R0" 1  list(

                      list( "row" "integer" numb_of_cont)

          )) 

     

          (cell_coord     = (range ref_x+(Wmax/2.0+34.0) -Lmax/2-2.5))

          (dbCreateParamInst pcCellView pcMaster_TPM1 nil cell_coord "R0" 1  list(

                      list( "row" "integer" numb_of_cont)

          )) 

     

         

    ; -- Diff ----------------------------------------------------------------------

     

          if((equal PDPext nil)

          then

          ; -- Do not ADD PDP extentions

                PDPext_diff = 0.0

          else

          ; -- ADD PDP extentions

                PDPext_diff = 1.3

          )

     

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_DIFF "drawing")

                (list

                    (range  ref_x+W/2.0                         ref_y+cor_size)

                    (range  ref_x+W/2.0+cor_size                ref_y+0.0)

                    (range  ref_x+Wmax/2.0+PDPext_diff          ref_y+0.0)

                    (range  ref_x+Wmax/2.0+PDPext_diff          ref_y-1.0)

                    (range  ref_x+Wmax/2.0                      ref_y-1.0)

                    (range  ref_x+Wmax/2.0                      ref_y-2.5)

     

                    (range  ref_x-Wmax/2.0                      ref_y-2.5)

                    (range  ref_x-Wmax/2.0                      ref_y-1.0)

                    (range  ref_x-Wmax/2.0-PDPext_diff          ref_y-1.0)

                    (range  ref_x-Wmax/2.0-PDPext_diff          ref_y+0.0)

                    (range  ref_x-W/2.0-cor_size                ref_y+0.0)

                    (range  ref_x-W/2.0                         ref_y+cor_size)

                   

                    (range  ref_x-W/2.0                         ref_y+0.0+L-cor_size)

                    (range  ref_x-W/2.0-cor_size                ref_y+0.0+L)

                    (range  ref_x-Wmax/2.0-PDPext_diff          ref_y+0.0+L)

                    (range  ref_x-Wmax/2.0-PDPext_diff          ref_y+1.0+L)

                    (range  ref_x-Wmax/2.0                      ref_y+1.0+L)

                    (range  ref_x-Wmax/2.0                      ref_y+2.5+L)

     

                    (range  ref_x+Wmax/2.0                      ref_y+2.5+L)

                    (range  ref_x+Wmax/2.0               ref_y+1.0+L)

                    (range  ref_x+Wmax/2.0+PDPext_diff          ref_y+1.0+L)

                    (range  ref_x+Wmax/2.0+PDPext_diff          ref_y+0.0+L)

                    (range  ref_x+W/2.0+cor_size                ref_y+0.0+L)

                    (range  ref_x+W/2.0                         ref_y+0.0+L-cor_size)

                   

                )

              )

          )

         

         

    ; -- PWELL ----------------------------------------------------------------------

      

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_PWELL "drawing")

                (list

     

                    (range  ref_x+PWpb+W/2.0              ref_y+PWpb+cor_size)

                    (range  40.0                                ref_y+PWpb+cor_size)

                    (range  40.0                                0.0-40.0)

                    (range  40.0                          0.0+40.0)

                    (range  -40.0                               0.0+40.0)

                    (range  -40.0                               0.0-40.0)

                    (range  40.0                                0.0-40.0)

                    (range  40.0                                ref_y+PWpb+cor_size)

     

                    (range  ref_x+PWpb+W/2.0                    ref_y+PWpb+cor_size)

                    (range  ref_x+PWpb+W/2.0+cor_size           ref_y+PWpb+0.0)

                    (range  ref_x+PWpb+Wmax/2.0           ref_y+PWpb+0.0)

                    (range  ref_x+PWpb+Wmax/2.0                       ref_y-PWpb-2.5)

     

                    (range  ref_x-PWpb-Wmax/2.0                 ref_y-PWpb-2.5)

                    (range  ref_x-PWpb-Wmax/2.0                 ref_y+PWpb+0.0)

                    (range  ref_x-PWpb-W/2.0-cor_size           ref_y+PWpb+0.0)

                    (range  ref_x-PWpb-W/2.0                  ref_y+PWpb+cor_size)

                   

                    (range  ref_x-PWpb-W/2.0                    ref_y-PWpb+0.0+L-cor_size)

                    (range  ref_x-PWpb-W/2.0-cor_size           ref_y-PWpb+0.0+L)

                    (range  ref_x-PWpb-Wmax/2.0          ref_y-PWpb+0.0+L)

                    (range  ref_x-PWpb-Wmax/2.0                 ref_y+PWpb+2.5+L)

     

                    (range  ref_x+PWpb+Wmax/2.0                 ref_y+PWpb+2.5+L)

                    (range  ref_x+PWpb+Wmax/2.0                       ref_y-PWpb+0.0+L)

                    (range  ref_x+PWpb+W/2.0+cor_size           ref_y-PWpb+0.0+L)

                    (range  ref_x+PWpb+W/2.0                    ref_y-PWpb+0.0+L-cor_size)

                   

                )

              )

          )

     

    ; -- PDN ----------------------------------------------------------------------

         

          if((equal PDNcover t)

          then

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_PDN "drawing")

                (list

                    (range  ref_x+Wmax/2.0+0.3                  ref_y-2.5-0.3)

                    (range  ref_x-Wmax/2.0-0.3                  ref_y-2.5-0.3)

                    (range  ref_x-Wmax/2.0-0.3                  ref_y+2.5+0.3+L)

                    (range  ref_x+Wmax/2.0+0.3                  ref_y+2.5+0.3+L)

                )

              )

          )

          else

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_PDN "drawing")

                (list

     

                    (range  ref_x+PDNpb+W/2.0                   ref_y+PDNpb+cor_size)

                    (range  ref_x+PDNpb+W/2.0+cor_size          ref_y+PDNpb+0.0)

                    (range  ref_x+PDNpb+Wmax/2.0          ref_y+PDNpb+0.0)

                    (range  ref_x+PDNpb+Wmax/2.0          ref_y-PDNpb-2.5)

     

                    (range  ref_x-PDNpb-Wmax/2.0                ref_y-PDNpb-2.5)

                    (range  ref_x-PDNpb-Wmax/2.0                ref_y+PDNpb+0.0)

                    (range  ref_x-PDNpb-W/2.0-cor_size          ref_y+PDNpb+0.0)

                    (range  ref_x-PDNpb-W/2.0                 ref_y+PDNpb+cor_size)

                   

                    (range  ref_x-PDNpb-W/2.0                   ref_y-PDNpb+0.0+L-cor_size)

                    (range  ref_x-PDNpb-W/2.0-cor_size          ref_y-PDNpb+0.0+L)

                    (range  ref_x-PDNpb-Wmax/2.0                ref_y-PDNpb+0.0+L)

                    (range  ref_x-PDNpb-Wmax/2.0                ref_y+PDNpb+2.5+L)

     

                    (range  ref_x+PDNpb+Wmax/2.0          ref_y+PDNpb+2.5+L)

                    (range  ref_x+PDNpb+Wmax/2.0          ref_y-PDNpb+0.0+L)

                    (range  ref_x+PDNpb+W/2.0+cor_size          ref_y-PDNpb+0.0+L)

                    (range  ref_x+PDNpb+W/2.0                   ref_y-PDNpb+0.0+L-cor_size)

                   

                )

              )

          )

          )

     

         

    ; -- PDP ----------------------------------------------------------------------

      

          if((equal PDPtop t)

          then

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_PDP "drawing")

                (list

                    (range  ref_x+Wmax/2.0+0.3+PDPext_diff      ref_y-1.0-0.3)

                    (range  ref_x-Wmax/2.0-0.3-PDPext_diff      ref_y-1.0-0.3)

                    (range  ref_x-Wmax/2.0-0.3-PDPext_diff      ref_y+1.0+0.3+L)

                    (range  ref_x+Wmax/2.0+0.3+PDPext_diff      ref_y+1.0+0.3+L)

                )

              )

          )

          )

     

    ; -- CELLH ----------------------------------------------------------------------

      

          if((equal CELLHtop t)

          then

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_CELLH "drawing")

                (list

                    (range  ref_x+Wmax/2.0+0.3+PDPext_diff+0.15 ref_y-1.0-0.3-0.15)

                    (range  ref_x-Wmax/2.0-0.3-PDPext_diff-0.15 ref_y-1.0-0.3-0.15)

                    (range  ref_x-Wmax/2.0-0.3-PDPext_diff-0.15 ref_y+1.0+0.3+L+0.15)

                    (range  ref_x+Wmax/2.0+0.3+PDPext_diff+0.15 ref_y+1.0+0.3+L+0.15)

                )

              )

          )

          )

     

    ; -- DIFF HV ----------------------------------------------------------------------

      

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_DIFF "hv")

                (list

     

                    (range  40.0                                -40.0)

                    (range  40.0                           40.0)

                    (range  -40.0                                40.0)

                    (range  -40.0                               -40.0)

     

                )

              )

          )    

     

    ; -- CELLM ----------------------------------------------------------------------

      

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_CELLM "drawing")

                (list

     

                    (range  40.0                                -40.0)

                    (range  40.0                           40.0)

                    (range  -40.0                                40.0)

                    (range  -40.0                               -40.0)

     

                )

              )

          )

     

    ; -- CIRPO ----------------------------------------------------------------------

      

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_CIRPO "drawing")

                (list

     

                    (range   40.3                               -40.3)

                    (range   40.3                                40.3)

                    (range  -40.3                                40.3)

                    (range  -40.3                               -40.3)

     

                )

              )

          )

     

    ; -- AREAID PIX ----------------------------------------------------------------------

      

          (setq pcInst

              (dbCreatePolygon pcCellView

                (list lay_PIXID "pixel")

                (list

     

                    (range  40.0                                -40.0)

                    (range  40.0                           40.0)

                    (range  -40.0                                40.0)

                    (range  -40.0                               -40.0)

     

                )

              )

          )

      

    ; -- label ----------------------------------------------------------------------

     

          (cell_coord     = (range ref_x ref_y))

          (dbCreateLabel pcCellView lay_TEXT cell_coord

                (sprintf nil "W=%.3f\nL=%.3f\nPWpb=%.3f\nPDNpb=%.3f\nPDPtop=%L\nPDPext=%L\nPDNcover=%L\nCELLHtop=%L"

                W L PWpb PDNpb PDPtop PDPext PDNcover CELLHtop  )

                "lowerLeft" "R0" "stick" 1)

         

    ; ------------------------------------------------------------------------------

    )

    )

    )

    I tried to load the skill code using

    load("/home/fg3z7q/Desktop/jfet_fno_SKILL.il")

    function jfet_fno_SKILL redefined

    t

    and when i call the function

    jfet_fno_SKILL "fno_ts018_etest" "jfet_fno_SKILL"

    it gives a waring stating that

    *WARNING* Invalid libId - dd:0x19a9bad4

    *WARNING* Invalid view name - nil

    nil

    Here I created a library named fno_ts018_etest and cell view named jfet_fno_SKILL before loading the skill.

    Im a beginer and I appreciate any sort of help regarding this

    Thanks,

    Satish

    • 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