Quantcast
Channel: Cadence Custom IC Skill Forum
Viewing all articles
Browse latest Browse all 5067

Creating a Polygon with a Hole

$
0
0

Hi,

    I'm currently drawing an octagonal pad using the rodCreatePolygon() function. The resulting polygon drawn is shown on the right below. In SKILL, after drawing the polygon, I'd like to chop off a rectangular section defined on another layer as shown on the left below. I've been thinking of different ways of doing it but I'm curious if you have any recommendations on how to go about this. The pad is a pCell, so I know that I can't use any functions from the "le" family. The code is also included below with what I'd like to do commented. 

Regards,

Nishant. 

strLibName = "MIM_Test"
strCellName = "bump_pad"

pcDefinePCell(list(ddGetObj(strLibName), strCellName, "layout"),

	;Define default pcell parameter values
	(
	(Width "string" "85u")
	(Length "string" "85u")	
	(Mesh "string" "0")
	);end of default values
	let((scale 
		 MTOP OPENING SLOT
		 w l 
		 x y cv radius D mfgGrid d side 
		 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 sil_inset
		 poly1 poly2
		 mesh_w mesh_l r_tmp hole_x hole_y bar_w
		 cvId shp ovShpList	ov 
		)
		cvId = pcCellView
		scale = 1.0e6
		; Define the layers
		MTOP     = list("metal4" "drawing")
		OPENING  = list("silox"  "drawing")
		SLOT	 = list("metal4" "slot")
		MTOP1    = list("metal2" "drawing")
		w = evalstring(Width)*scale
		l = evalstring(Length)*scale
		; radius of the pad is half the width	
		; origin is the bottom center of the octagon
		x = 0
		y = 0
		sil_inset = 2.1
		bar_w = 2.5
		hole_x = 3.0
		hole_y = 3.0
		mesh_w = 15
		mesh_l = 15
		radius = 0.5*w
		D = radius/sqrt(2)
		d = 2*D - radius
		; start from the center of the octagonal pad
		p1 = list(x+radius y+d)
		p2 = list(x+d y+radius)
		p3 = list(x-d y+radius)
		p4 = list(x-radius y+d)
		p5 = list(x-radius y-d)
		p6 = list(x-d y-radius)
		p7 = list(x+d y-radius)
		p8 = list(x+radius y-d)
		p9 = list(x-0.5*mesh_w y-0.5*mesh_l)
		p10 = list(x+0.5*mesh_w y-0.5*mesh_l)
		p11 = list(x+0.5*mesh_w y+0.5*mesh_l)
		p12 = list(x-0.5*mesh_w y+0.5*mesh_l)
		;want to maintain the polygon below as is
		poly1 = rodCreatePolygon(
			?layer MTOP
			?pts   list( p1 p2 p3 p4 p5 p6 p7 p8)		
		)
		; want to chop the polygon defined below
		poly2 = rodCreatePolygon(
			?layer SLOT
			?pts   list( p9 p10 p11 p12)		
		)
		radius = 0.5*w - sil_inset
		D = radius/sqrt(2)
		d = 2*D - radius 
		p1 = list(x+radius y+d)
		p2 = list(x+d y+radius)
		p3 = list(x-d y+radius)
		p4 = list(x-radius y+d)
		p5 = list(x-radius y-d)
		p6 = list(x-d y-radius)
		p7 = list(x+d y-radius)
		p8 = list(x+radius y-d)
		rodCreatePolygon(
			?layer OPENING
			?pts   list( p1 p2 p3 p4 p5 p6 p7 p8)		
		)	
	); end of let
); end of pCell definition

Viewing all articles
Browse latest Browse all 5067

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>