Hi Prasad, OK, so you don't have a PCell for the schematic (it's best not to use this terminology for a schematic where you are passing variables using pPar, as that is not what is normally referred to as a "PCell"). A PCell is something where you specify parameters on the instance, and a variant layout, schematic or symbol is built by calling some code (when you use the layout pcell editor, this is a primitive tool for building SKILL PCells). There is a more advanced capability called "Cadence PCell Designer" but I doubt whether you have that product. For schematic PCells, search in this forum for "pcDefinePCell schematic" and you'll find a few examples (albeit with issues, but with explanations on how to fix the issues). Here's an example of a series connected resistor schematic pcell: /* respcell.il Author A.D.Beckett Group Custom IC (UK), Cadence Design Systems Ltd. Language SKILL Date Apr 07, 2014 Modified By Example of a series resistor pcell. Original version only contained connectivity - this one contains "graphics" too so that if you descend into the schematic you can probe nets. *************************************************** SCCS Info: @(#) respcell.il 04/07/14.11:02:22 1.2 */ procedure (abCreateResPcell(libName cellName) let ( (pcellId) unless ( ddGetObj(libName) error ( "Couldn't open library %L" libName) ) pcellId = pcDefinePCell( list ( ddGetObj(libName) cellName "schematic" "schematic" ) ;------------------------------------------------------------------ ; Default Parameters ;------------------------------------------------------------------ ( (ns "1" ) ) let (( pcCV masterCv instName instId netP netM numInsts y (resHeight 0.375) (wireLen 0.125) pinMaster pinFig wire lastCoord) pcCV = pcCellView ;------------------------------------------------------------------ ; open master cellviews ;------------------------------------------------------------------ masterCv = dbOpenCellViewByType( "analogLib" "res" "symbol" nil "r" ) pinMaster= dbOpenCellViewByType("basic" "iopin" "symbol" ) numInsts=atoi(ns) when (numInsts<1 numInsts=1) ;---------------------------------------------------------------- ; Create nets and terminals ;---------------------------------------------------------------- netP= dbMakeNet(pcCV "PLUS" ) netM= dbMakeNet(pcCV "MINUS" ) dbCreateTerm(netP "PLUS" "inputOutput" ) dbCreateTerm(netM "MINUS" "inputOutput" ) y=0 pinFig= dbCreateInst(pcCV pinMaster "" 0:y "R0" ) dbCreatePin(netP pinFig) lastCoord=0:y for (inst 1 numInsts ;-------------------------------------------------------------- ; Create the nets connected to either side ;-------------------------------------------------------------- if (inst==1 then netP= dbMakeNet(pcCV "PLUS" ) else netP= dbMakeNet(pcCV sprintf ( nil "net%d" inst-1)) ) ; if if (inst==numInsts then netM= dbMakeNet(pcCV "MINUS" ) else netM= dbMakeNet(pcCV sprintf ( nil "net%d" inst)) ) sprintf (instName "R%d" inst) y=y-wireLen instId = dbCreateInst( pcCV masterCv instName (0:y) "R0" ) dbCreateProp(instId "r" "string" "pPar(\"r\")/pPar(\"ns\")" ) ;-------------------------------------------------------------- ; Connect up the instance ;-------------------------------------------------------------- dbCreateInstTerm(netP instId dbFindTermByName(masterCv "PLUS" )) dbCreateInstTerm(netM instId dbFindTermByName(masterCv "MINUS" )) wire= dbCreateLine(pcCV list ( "wire" "drawing" ) list (lastCoord 0:y)) dbAddFigToNet(wire netP) y=y-resHeight lastCoord=0:y ) y=y-wireLen pinFig= dbCreateInst(pcCV pinMaster "" 0:y "R0" ) dbCreatePin(netM pinFig) wire= dbCreateLine(pcCV list ( "wire" "drawing" ) list (lastCoord 0:y)) dbAddFigToNet(wire netM) dbSetConnCurrent(pcCV) dbClose( masterCv ) ;; Always return true t ) ; ** let ** ) ; not sure if below is really necessary dbSave(pcellId) dbClose( pcellId ) ) ; ** let ** ) Regards, Andrew.
↧