[Inst1]方形电感INDS

;------------------------------------------------------------------;
;- Code Purpose     : Inductor pCell Example 
;- Type             : Square inductor
;- Default Segments : 12 
;------------------------------------------------------------------;

;- Test Parameters
LIBRARY = "master"
CELL    = "myInductor"
LAYER   = "metal2"

pcDefinePCell(
	list( ddGetObj(LIBRARY) CELL "layout" )
	
;- Define Formal Parameters:
  (
	(indLayer	LAYER   ) 
  	(indLengthX	130.0   )
   	(indLengthY	120.0   )
  	(indWidth	8.0     )
   	(indGap	        7.0     )
   	(indSeg	        12      )
  )

;- Define local variables of this cellview:	
let(
     (
     indPath indPoints i j tmpPt pt 
     indSpacing 
     totalLength
     pt1 pt2 pt3 pt4 pt5 
     )
  
   indSpacing	= indWidth + indGap 

   ;- First five points for four outer loop segments.
   pt1	= list( 0 -(indWidth/2) )
   pt2	= list( 0 indLengthY )
   pt3	= list( indLengthX indLengthY )
   pt4	= list( indLengthX 0 )
   pt5	= list( rodPointX(pt1)+indSpacing 0 )
   indPoints = list( pt1 pt2 pt3 pt4 pt5 )

   ;- Rest of the points just follow the conditions.
   ;- It could've been written the same way for all the points.
   ;- But, that will make following equations look more complex.

   ;- For inner loop segments.
   for( i 5 indSeg

     j=mod(i 4)                   ;- Modulus of Segment Number and 4
     pt    = nth( i-4 indPoints ) ;- Dependency point.  

     case( j
       (0 
          tmpPt = list( 
                  rodPointX( pt ) + indSpacing 
		  rodPointY( pt ) + indSpacing
	        )
       )
       (1 
          tmpPt = list( 
                  rodPointX( pt ) + indSpacing 
		  rodPointY( pt ) - indSpacing 
	        )
       )
       (2 
          tmpPt = list( 
                  rodPointX( pt ) - indSpacing 
		  rodPointY( pt ) - indSpacing 
	        )
       )
       (3 
          tmpPt = list( 
                  rodPointX( pt ) - indSpacing 
		  rodPointY( pt ) + indSpacing 
	        )
       )
     )
     ;- Append new point (tmpPt) to point list ( indPoints ).
     indPoints = append1( indPoints tmpPt )
        
   ) 

;- Define inductor:     	

   indPath = rodCreatePath(
	?cvId	pcCellView
	?layer	list( indLayer "drawing" )
	?width	indWidth
	?pts	indPoints
	?endType "variable"
	?endExt	indWidth / 2
	)


 

;- Create reference labels (length, width, cap value):
  dbCreateLabel(
	pcCellView
	list( "text" "drawing" )
	( indPath~>centerCenter )
	sprintf(nil "\nX = %L \nY = %L"		 /* \nL = %L */
	indLengthX indLengthY)			 /* totalLength */
	"centerCenter"
	"R0"
	"stick"
	4.0
	)
	
	
 ); let
); pcDefinePcell

你可能感兴趣的:(Cadence,PDK编程,linux,cadence,pdk,virtuoso)