CRect

构造函数

CRect( ) ;
CRect( int l, int t, int r, int b ) ;
CRect( const RECT& srcRect ) ;
CRect( LPCRECT lpSrcRect );
CRect( POINT point, SIZE size );
CRect( POINT topLeft, POINT bottomRight );

成员函数

这里写图片描述

运算符重载

参看帮助文档

# -*- coding: utf-8 -*- """ Created on Thu Jan 16 16:13:43 2025 @author: e024979 """ # -*- coding: utf-8 -*- """ Created on Wed Jan 15 18:00:55 2025 @author: e024979 """ # -*- coding: utf-8 -*- """ Created on Mon Jan 13 13:44:27 2025 @author: e024979 """ # -*- coding: utf-8 -*- """ Created on Thu Jan 9 15:51:38 2025 @author: e023817 """ # -*- coding: utf-8 -*- """ Created on Wed Nov 8 19:03:46 2023 @author: e023854 """ import mypy.procedure_gdspy as ppy #import mypy.procedure_gdspy_draw as ppy import gdspy import os import datetime '''定义9点''' ll='ll';lr='lr';lc='lc';cl='cl';cc='cc';cr='cr';ul='ul';uc='uc';ur='ur' ''' ul------uc------ur - - - - - - cl------cc------cr - - - - - - ll------lc------lr ''' '''找到当前文件所在位置''' cwd=os.getcwd() '''设置当前文件所在位置为默认目录''' os.chdir(cwd) time1=datetime.datetime.now() print('Start time: '+str(time1.strftime("%Y-%m-%d %H:%M:%S"))) '''library 置空''' gdspy.current_library=gdspy.GdsLibrary() '''全局变量''' CTS=0.1 NA=['NA','Na','na','','/','\\',] #'''CN个MOS管并联为MOS1,MOS_Cap为MOS2,Gate端联通''' def MOSnsvt25(cellname,EFUSE_W,EFUSE_L,DOPING_TYPE,EFUSE_TYPE,CT_N): '''create top cell''' BORDER_L=10;BORDER_W=10 top=ppy.cRect(cellname,'BORDER',BORDER_L,BORDER_W,origin=(0,0)) '''create AA''' '''create contact''' CT_W=0.06 CT_L=0.06 CT=ppy.cRect(cellname+'_CT','CT',CT_W,CT_L) '''画efuse''' if EFUSE_TYPE=='A': '''efuse poly''' UP_EFUSE_POLY_W=0.28 UP_EFUSE_POLY_L=0.725 UP_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',UP_EFUSE_POLY_W,UP_EFUSE_POLY_L) UP_EFUSE_POLY.align(None,cc,top,cc) '''efuse W/L split''' MIDDLE_EFUSE_POLY_W=EFUSE_W MIDDLE_EFUSE_POLY_L=EFUSE_L MIDDLE_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',MIDDLE_EFUSE_POLY_W,MIDDLE_EFUSE_POLY_L) MIDDLE_EFUSE_POLY.align(top,uc,UP_EFUSE_POLY,lc) DOWN_EFUSE_POLY_W=0.6 DOWN_EFUSE_POLY_L=0.405 if CT_N!=0.2: DOWN_EFUSE_POLY_L=0.405 if CT_N==0.2: DOWN_EFUSE_POLY_L=0.405+0.015+0.01 DOWN_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',DOWN_EFUSE_POLY_W,DOWN_EFUSE_POLY_L) if EFUSE_W!=0.037: DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc) else: DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc,-0.001) '''efuse doping''' print(EFUSE_W) EFUSE_DOPING_W=0.82 EFUSE_DOPING_L=UP_EFUSE_POLY_L+MIDDLE_EFUSE_POLY_L+DOWN_EFUSE_POLY_L+0.22 if str(DOPING_TYPE)=='P': EFUSE_DOPING=ppy.cRect(cellname+'_SP','SP',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) if str(DOPING_TYPE)=='N': EFUSE_DOPING=ppy.cRect(cellname+'_SN','SN',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse contact''' UP_EFUSE_CTarray=CT.array(cellname+'_CT',2,4,xspace=0.1,yspace=0.1) UP_EFUSE_CTarray.align(top,uc,UP_EFUSE_POLY,uc,0,-0.035) if CT_N!=0.2: DOWN_EFUSE_CTarray=CT.array(cellname+'_CT',4,2,xspace=0.1,yspace=0.1) DOWN_EFUSE_CTarray.align(top,uc,DOWN_EFUSE_POLY,uc,0,-CT_N) if CT_N==0.2: DOWN_EFUSE_CTarray=CT.array(cellname+'_CT',4,2,xspace=0.1,yspace=0.08) DOWN_EFUSE_CTarray.align(top,uc,DOWN_EFUSE_POLY,uc,0,-CT_N) '''efuse M1''' UP_EFUSE_M1_W=0.4 UP_EFUSE_M1_L=UP_EFUSE_POLY_L UP_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',UP_EFUSE_M1_W,UP_EFUSE_M1_L) UP_EFUSE_M1.align(top,ll,UP_EFUSE_POLY,ll,-0.06) DOWN_EFUSE_M1_W=DOWN_EFUSE_POLY_W DOWN_EFUSE_M1_L=DOWN_EFUSE_POLY_L+0.025 DOWN_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',DOWN_EFUSE_M1_W,DOWN_EFUSE_M1_L) DOWN_EFUSE_M1.align(top,uc,DOWN_EFUSE_POLY,uc) '''efuse MKR_EFUSE''' EFUSE_MKR_EFUSE_W=EFUSE_DOPING_W EFUSE_MKR_EFUSE_L=EFUSE_DOPING_L EFUSE_MKR_EFUSE=ppy.cRect(cellname+'_MKR_EFUSE','MKR_EFUSE',EFUSE_MKR_EFUSE_W,EFUSE_MKR_EFUSE_L) EFUSE_MKR_EFUSE.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse MKR_POFUSE''' EFUSE_MKR_POFUSE_W=MIDDLE_EFUSE_POLY_W EFUSE_MKR_POFUSE_L=MIDDLE_EFUSE_POLY_L EFUSE_MKR_POFUSE=ppy.cRect(cellname+'_MKR_POFUSE','MKR_POFUSE',EFUSE_MKR_POFUSE_W,EFUSE_MKR_POFUSE_L) if EFUSE_W!=0.037: EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc) else: EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc,-0.001) if EFUSE_TYPE=='B': '''efuse poly''' UP_EFUSE_POLY_W=0.28 UP_EFUSE_POLY_L=0.725 UP_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',UP_EFUSE_POLY_W,UP_EFUSE_POLY_L) UP_EFUSE_POLY.align(None,cc,top,cc) '''efuse W/L split''' MIDDLE_EFUSE_POLY_W=EFUSE_W MIDDLE_EFUSE_POLY_L=EFUSE_L+0.05 MIDDLE_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',MIDDLE_EFUSE_POLY_W,MIDDLE_EFUSE_POLY_L) MIDDLE_EFUSE_POLY.align(top,uc,UP_EFUSE_POLY,lc) '''三角形efuse''' TRIANGLE1=ppy.cTri(cellname+'_GTbody','GT',0.05,quadrant=1) TRIANGLE1.align(top,ll,MIDDLE_EFUSE_POLY,lr) TRIANGLE2=ppy.cTri(cellname+'_GTbody','GT',0.05,quadrant=2) TRIANGLE2.align(top,lr,MIDDLE_EFUSE_POLY,ll) DOWN_EFUSE_POLY_W=0.6 DOWN_EFUSE_POLY_L=0.405 DOWN_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',DOWN_EFUSE_POLY_W,DOWN_EFUSE_POLY_L) DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc) '''efuse doping''' EFUSE_DOPING_W=0.82 EFUSE_DOPING_L=UP_EFUSE_POLY_L+MIDDLE_EFUSE_POLY_L+DOWN_EFUSE_POLY_L+0.22 if str(DOPING_TYPE)=='P': EFUSE_DOPING=ppy.cRect(cellname+'_SP','SP',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) if str(DOPING_TYPE)=='N': EFUSE_DOPING=ppy.cRect(cellname+'_SN','SN',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse contact''' UP_EFUSE_CTarray=CT.array(cellname+'_CT',2,4,xspace=0.1,yspace=0.1) UP_EFUSE_CTarray.align(top,uc,UP_EFUSE_POLY,uc,0,-0.035) DOWN_EFUSE_CTarray=CT.array(cellname+'_CT',4,2,xspace=0.1,yspace=0.1) DOWN_EFUSE_CTarray.align(top,lc,DOWN_EFUSE_POLY,lc,0,0.035+0.05) '''efuse M1''' UP_EFUSE_M1_W=0.4 UP_EFUSE_M1_L=UP_EFUSE_POLY_L UP_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',UP_EFUSE_M1_W,UP_EFUSE_M1_L) UP_EFUSE_M1.align(top,ll,UP_EFUSE_POLY,ll,-0.06) DOWN_EFUSE_M1_W=DOWN_EFUSE_POLY_W DOWN_EFUSE_M1_L=DOWN_EFUSE_POLY_L+0.025 DOWN_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',DOWN_EFUSE_M1_W,DOWN_EFUSE_M1_L) DOWN_EFUSE_M1.align(top,uc,DOWN_EFUSE_POLY,uc) '''efuse MKR_EFUSE''' EFUSE_MKR_EFUSE_W=EFUSE_DOPING_W EFUSE_MKR_EFUSE_L=EFUSE_DOPING_L EFUSE_MKR_EFUSE=ppy.cRect(cellname+'_MKR_EFUSE','MKR_EFUSE',EFUSE_MKR_EFUSE_W,EFUSE_MKR_EFUSE_L) EFUSE_MKR_EFUSE.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse MKR_POFUSE''' EFUSE_MKR_POFUSE_W=MIDDLE_EFUSE_POLY_W EFUSE_MKR_POFUSE_L=MIDDLE_EFUSE_POLY_L EFUSE_MKR_POFUSE=ppy.cRect(cellname+'_MKR_POFUSE','MKR_POFUSE',EFUSE_MKR_POFUSE_W,EFUSE_MKR_POFUSE_L) EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc) # '''接PAD1''' if EFUSE_TYPE=='C': '''efuse poly''' UP_EFUSE_POLY_W=0.28 UP_EFUSE_POLY_L=0.725 UP_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',UP_EFUSE_POLY_W,UP_EFUSE_POLY_L) UP_EFUSE_POLY.align(None,cc,top,cc) '''efuse W/L split''' MIDDLE_EFUSE_POLY_W=EFUSE_W MIDDLE_EFUSE_POLY_L=EFUSE_L+0.12 MIDDLE_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',MIDDLE_EFUSE_POLY_W,MIDDLE_EFUSE_POLY_L) MIDDLE_EFUSE_POLY.align(top,uc,UP_EFUSE_POLY,lc) '''三角形efuse''' TRIANGLE1=ppy.cTri(cellname+'_GTbody','GT',0.12,quadrant=1) TRIANGLE1.align(top,ll,MIDDLE_EFUSE_POLY,lr) TRIANGLE2=ppy.cTri(cellname+'_GTbody','GT',0.12,quadrant=2) TRIANGLE2.align(top,lr,MIDDLE_EFUSE_POLY,ll) DOWN_EFUSE_POLY_W=0.6 DOWN_EFUSE_POLY_L=0.405 DOWN_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',DOWN_EFUSE_POLY_W,DOWN_EFUSE_POLY_L) DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc) '''efuse doping''' EFUSE_DOPING_W=0.82 EFUSE_DOPING_L=UP_EFUSE_POLY_L+MIDDLE_EFUSE_POLY_L+DOWN_EFUSE_POLY_L+0.22 if str(DOPING_TYPE)=='P': EFUSE_DOPING=ppy.cRect(cellname+'_SP','SP',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) if str(DOPING_TYPE)=='N': EFUSE_DOPING=ppy.cRect(cellname+'_SN','SN',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse contact''' UP_EFUSE_CTarray=CT.array(cellname+'_CT',2,4,xspace=0.1,yspace=0.1) UP_EFUSE_CTarray.align(top,uc,UP_EFUSE_POLY,uc,0,-0.035) DOWN_EFUSE_CTarray=CT.array(cellname+'_CT',4,2,xspace=0.1,yspace=0.1) DOWN_EFUSE_CTarray.align(top,lc,DOWN_EFUSE_POLY,lc,0,0.035+0.12) '''efuse M1''' UP_EFUSE_M1_W=0.4 UP_EFUSE_M1_L=UP_EFUSE_POLY_L UP_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',UP_EFUSE_M1_W,UP_EFUSE_M1_L) UP_EFUSE_M1.align(top,ll,UP_EFUSE_POLY,ll,-0.06) DOWN_EFUSE_M1_W=DOWN_EFUSE_POLY_W DOWN_EFUSE_M1_L=DOWN_EFUSE_POLY_L+0.025 DOWN_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',DOWN_EFUSE_M1_W,DOWN_EFUSE_M1_L) DOWN_EFUSE_M1.align(top,uc,DOWN_EFUSE_POLY,uc) '''efuse MKR_EFUSE''' EFUSE_MKR_EFUSE_W=EFUSE_DOPING_W EFUSE_MKR_EFUSE_L=EFUSE_DOPING_L EFUSE_MKR_EFUSE=ppy.cRect(cellname+'_MKR_EFUSE','MKR_EFUSE',EFUSE_MKR_EFUSE_W,EFUSE_MKR_EFUSE_L) EFUSE_MKR_EFUSE.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse MKR_POFUSE''' EFUSE_MKR_POFUSE_W=MIDDLE_EFUSE_POLY_W EFUSE_MKR_POFUSE_L=MIDDLE_EFUSE_POLY_L EFUSE_MKR_POFUSE=ppy.cRect(cellname+'_MKR_POFUSE','MKR_POFUSE',EFUSE_MKR_POFUSE_W,EFUSE_MKR_POFUSE_L) EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc) # '''接PAD1''' if EFUSE_TYPE=='D': '''efuse poly''' UP_EFUSE_POLY_W=0.28 UP_EFUSE_POLY_L=0.725 UP_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',UP_EFUSE_POLY_W,UP_EFUSE_POLY_L) UP_EFUSE_POLY.align(None,cc,top,cc) '''efuse W/L split''' MIDDLE_EFUSE_POLY_W=EFUSE_W MIDDLE_EFUSE_POLY_L=EFUSE_L MIDDLE_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',MIDDLE_EFUSE_POLY_W,MIDDLE_EFUSE_POLY_L) MIDDLE_EFUSE_POLY.align(top,uc,UP_EFUSE_POLY,lc) DOWN_EFUSE_POLY_W=UP_EFUSE_POLY_W DOWN_EFUSE_POLY_L=UP_EFUSE_POLY_L DOWN_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',DOWN_EFUSE_POLY_W,DOWN_EFUSE_POLY_L) DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc) '''efuse doping''' EFUSE_DOPING_W=0.82 EFUSE_DOPING_L=UP_EFUSE_POLY_L+MIDDLE_EFUSE_POLY_L+DOWN_EFUSE_POLY_L+0.22 if str(DOPING_TYPE)=='P': EFUSE_DOPING=ppy.cRect(cellname+'_SP','SP',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) if str(DOPING_TYPE)=='N': EFUSE_DOPING=ppy.cRect(cellname+'_SN','SN',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse contact''' UP_EFUSE_CTarray=CT.array(cellname+'_CT',2,4,xspace=0.1,yspace=0.1) UP_EFUSE_CTarray.align(top,uc,UP_EFUSE_POLY,uc,0,-0.035) DOWN_EFUSE_CTarray=CT.array(cellname+'_CT',2,4,xspace=0.1,yspace=0.1) DOWN_EFUSE_CTarray.align(top,uc,DOWN_EFUSE_POLY,uc,0,-0.15) '''efuse M1''' UP_EFUSE_M1_W=0.4 UP_EFUSE_M1_L=UP_EFUSE_POLY_L UP_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',UP_EFUSE_M1_W,UP_EFUSE_M1_L) UP_EFUSE_M1.align(top,ll,UP_EFUSE_POLY,ll,-0.06) DOWN_EFUSE_M1_W=0.4 DOWN_EFUSE_M1_L=DOWN_EFUSE_POLY_L DOWN_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',DOWN_EFUSE_M1_W,DOWN_EFUSE_M1_L) DOWN_EFUSE_M1.align(top,uc,DOWN_EFUSE_POLY,uc) '''efuse MKR_EFUSE''' EFUSE_MKR_EFUSE_W=EFUSE_DOPING_W EFUSE_MKR_EFUSE_L=EFUSE_DOPING_L EFUSE_MKR_EFUSE=ppy.cRect(cellname+'_MKR_EFUSE','MKR_EFUSE',EFUSE_MKR_EFUSE_W,EFUSE_MKR_EFUSE_L) EFUSE_MKR_EFUSE.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse MKR_POFUSE''' EFUSE_MKR_POFUSE_W=MIDDLE_EFUSE_POLY_W EFUSE_MKR_POFUSE_L=MIDDLE_EFUSE_POLY_L EFUSE_MKR_POFUSE=ppy.cRect(cellname+'_MKR_POFUSE','MKR_POFUSE',EFUSE_MKR_POFUSE_W,EFUSE_MKR_POFUSE_L) EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc) if EFUSE_TYPE=='E': '''efuse poly''' UP_EFUSE_POLY_W=0.28 UP_EFUSE_POLY_L=0.725 UP_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',UP_EFUSE_POLY_W,UP_EFUSE_POLY_L) UP_EFUSE_POLY.align(None,cc,top,cc) '''efuse W/L split''' MIDDLE_EFUSE_POLY_W=EFUSE_W MIDDLE_EFUSE_POLY_L=EFUSE_L MIDDLE_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',MIDDLE_EFUSE_POLY_W,MIDDLE_EFUSE_POLY_L) MIDDLE_EFUSE_POLY.align(top,uc,UP_EFUSE_POLY,lc) DOWN_EFUSE_POLY_W=UP_EFUSE_POLY_W DOWN_EFUSE_POLY_L=UP_EFUSE_POLY_L DOWN_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',DOWN_EFUSE_POLY_W,DOWN_EFUSE_POLY_L) DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc) '''efuse doping''' EFUSE_DOPING_W=0.82 EFUSE_DOPING_L=UP_EFUSE_POLY_L+MIDDLE_EFUSE_POLY_L+DOWN_EFUSE_POLY_L+0.22 if str(DOPING_TYPE)=='P': EFUSE_DOPING=ppy.cRect(cellname+'_SP','SP',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) if str(DOPING_TYPE)=='N': EFUSE_DOPING=ppy.cRect(cellname+'_SN','SN',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse contact''' CTNEW_W=0.12 CTNEW_L=0.06 CTNEW=ppy.cRect(cellname+'_CT','CT',CTNEW_W,CTNEW_L) UP_EFUSE_CTarray=CTNEW.array(cellname+'_CT',1,4,xspace=0.1,yspace=0.1) UP_EFUSE_CTarray.align(top,uc,UP_EFUSE_POLY,uc,0,-0.035) DOWN_EFUSE_CTarray=CTNEW.array(cellname+'_CT',1,4,xspace=0.1,yspace=0.1) DOWN_EFUSE_CTarray.align(top,uc,DOWN_EFUSE_POLY,uc,0,-0.15) '''efuse M1''' UP_EFUSE_M1_W=0.4 UP_EFUSE_M1_L=UP_EFUSE_POLY_L UP_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',UP_EFUSE_M1_W,UP_EFUSE_M1_L) UP_EFUSE_M1.align(top,ll,UP_EFUSE_POLY,ll,-0.06) DOWN_EFUSE_M1_W=0.4 DOWN_EFUSE_M1_L=DOWN_EFUSE_POLY_L DOWN_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',DOWN_EFUSE_M1_W,DOWN_EFUSE_M1_L) DOWN_EFUSE_M1.align(top,uc,DOWN_EFUSE_POLY,uc) '''efuse MKR_EFUSE''' EFUSE_MKR_EFUSE_W=EFUSE_DOPING_W EFUSE_MKR_EFUSE_L=EFUSE_DOPING_L EFUSE_MKR_EFUSE=ppy.cRect(cellname+'_MKR_EFUSE','MKR_EFUSE',EFUSE_MKR_EFUSE_W,EFUSE_MKR_EFUSE_L) EFUSE_MKR_EFUSE.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse MKR_POFUSE''' EFUSE_MKR_POFUSE_W=MIDDLE_EFUSE_POLY_W EFUSE_MKR_POFUSE_L=MIDDLE_EFUSE_POLY_L EFUSE_MKR_POFUSE=ppy.cRect(cellname+'_MKR_POFUSE','MKR_POFUSE',EFUSE_MKR_POFUSE_W,EFUSE_MKR_POFUSE_L) EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc) if EFUSE_TYPE=='F': '''efuse poly''' UP_EFUSE_POLY_W=0.28 UP_EFUSE_POLY_L=0.725 UP_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',UP_EFUSE_POLY_W,UP_EFUSE_POLY_L) UP_EFUSE_POLY.align(None,cc,top,cc) '''efuse W/L split''' MIDDLE_EFUSE_POLY_W=EFUSE_W MIDDLE_EFUSE_POLY_L=EFUSE_L MIDDLE_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',MIDDLE_EFUSE_POLY_W,MIDDLE_EFUSE_POLY_L) MIDDLE_EFUSE_POLY.align(top,uc,UP_EFUSE_POLY,lc) DOWN_EFUSE_POLY_W=UP_EFUSE_POLY_W DOWN_EFUSE_POLY_L=UP_EFUSE_POLY_L DOWN_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',DOWN_EFUSE_POLY_W,DOWN_EFUSE_POLY_L) DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc) '''efuse doping''' EFUSE_DOPING_W=0.82 EFUSE_DOPING_L=UP_EFUSE_POLY_L+MIDDLE_EFUSE_POLY_L+DOWN_EFUSE_POLY_L+0.22 if str(DOPING_TYPE)=='P': EFUSE_DOPING=ppy.cRect(cellname+'_SP','SP',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) if str(DOPING_TYPE)=='N': EFUSE_DOPING=ppy.cRect(cellname+'_SN','SN',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse contact''' CTNEW_W=0.06 CTNEW_L=0.12 CTNEW=ppy.cRect(cellname+'_CT','CT',CTNEW_W,CTNEW_L) UP_EFUSE_CTarray=CTNEW.array(cellname+'_CT',2,2,xspace=0.1,yspace=0.1) UP_EFUSE_CTarray.align(top,lc,UP_EFUSE_POLY,lc,0,0.15) DOWN_EFUSE_CTarray=CTNEW.array(cellname+'_CT',2,2,xspace=0.1,yspace=0.1) DOWN_EFUSE_CTarray.align(top,uc,DOWN_EFUSE_POLY,uc,0,-0.15) '''efuse M1''' UP_EFUSE_M1_W=0.4 UP_EFUSE_M1_L=UP_EFUSE_POLY_L UP_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',UP_EFUSE_M1_W,UP_EFUSE_M1_L) UP_EFUSE_M1.align(top,ll,UP_EFUSE_POLY,ll,-0.06) DOWN_EFUSE_M1_W=0.4 DOWN_EFUSE_M1_L=DOWN_EFUSE_POLY_L DOWN_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',DOWN_EFUSE_M1_W,DOWN_EFUSE_M1_L) DOWN_EFUSE_M1.align(top,uc,DOWN_EFUSE_POLY,uc) '''efuse MKR_EFUSE''' EFUSE_MKR_EFUSE_W=EFUSE_DOPING_W EFUSE_MKR_EFUSE_L=EFUSE_DOPING_L EFUSE_MKR_EFUSE=ppy.cRect(cellname+'_MKR_EFUSE','MKR_EFUSE',EFUSE_MKR_EFUSE_W,EFUSE_MKR_EFUSE_L) EFUSE_MKR_EFUSE.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse MKR_POFUSE''' EFUSE_MKR_POFUSE_W=MIDDLE_EFUSE_POLY_W EFUSE_MKR_POFUSE_L=MIDDLE_EFUSE_POLY_L EFUSE_MKR_POFUSE=ppy.cRect(cellname+'_MKR_POFUSE','MKR_POFUSE',EFUSE_MKR_POFUSE_W,EFUSE_MKR_POFUSE_L) EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc) if EFUSE_TYPE=='G': '''efuse poly''' UP_EFUSE_POLY_W=0.6 UP_EFUSE_POLY_L=0.405 UP_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',UP_EFUSE_POLY_W,UP_EFUSE_POLY_L) UP_EFUSE_POLY.align(None,cc,top,cc) '''efuse W/L split''' MIDDLE_EFUSE_POLY_W=EFUSE_W MIDDLE_EFUSE_POLY_L=EFUSE_L MIDDLE_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',MIDDLE_EFUSE_POLY_W,MIDDLE_EFUSE_POLY_L) MIDDLE_EFUSE_POLY.align(top,uc,UP_EFUSE_POLY,lc) DOWN_EFUSE_POLY_W=UP_EFUSE_POLY_W DOWN_EFUSE_POLY_L=UP_EFUSE_POLY_L DOWN_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',DOWN_EFUSE_POLY_W,DOWN_EFUSE_POLY_L) DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc) '''efuse doping''' EFUSE_DOPING_W=0.82 EFUSE_DOPING_L=UP_EFUSE_POLY_L+MIDDLE_EFUSE_POLY_L+DOWN_EFUSE_POLY_L+0.22 if str(DOPING_TYPE)=='P': EFUSE_DOPING=ppy.cRect(cellname+'_SP','SP',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) if str(DOPING_TYPE)=='N': EFUSE_DOPING=ppy.cRect(cellname+'_SN','SN',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse contact''' CTNEW_W=0.12 CTNEW_L=0.06 CTNEW=ppy.cRect(cellname+'_CT','CT',CTNEW_W,CTNEW_L) UP_EFUSE_CTarray=CTNEW.array(cellname+'_CT',2,2,xspace=0.1,yspace=0.1) UP_EFUSE_CTarray.align(top,lc,UP_EFUSE_POLY,lc,0,0.15) DOWN_EFUSE_CTarray=CTNEW.array(cellname+'_CT',2,2,xspace=0.1,yspace=0.1) DOWN_EFUSE_CTarray.align(top,uc,DOWN_EFUSE_POLY,uc,0,-0.15) '''efuse M1''' UP_EFUSE_M1_W=UP_EFUSE_POLY_W UP_EFUSE_M1_L=UP_EFUSE_POLY_L UP_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',UP_EFUSE_M1_W,UP_EFUSE_M1_L) UP_EFUSE_M1.align(top,ll,UP_EFUSE_POLY,ll) DOWN_EFUSE_M1_W=DOWN_EFUSE_POLY_W DOWN_EFUSE_M1_L=DOWN_EFUSE_POLY_L DOWN_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',DOWN_EFUSE_M1_W,DOWN_EFUSE_M1_L) DOWN_EFUSE_M1.align(top,uc,DOWN_EFUSE_POLY,uc) '''efuse MKR_EFUSE''' EFUSE_MKR_EFUSE_W=EFUSE_DOPING_W EFUSE_MKR_EFUSE_L=EFUSE_DOPING_L EFUSE_MKR_EFUSE=ppy.cRect(cellname+'_MKR_EFUSE','MKR_EFUSE',EFUSE_MKR_EFUSE_W,EFUSE_MKR_EFUSE_L) EFUSE_MKR_EFUSE.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse MKR_POFUSE''' EFUSE_MKR_POFUSE_W=MIDDLE_EFUSE_POLY_W EFUSE_MKR_POFUSE_L=MIDDLE_EFUSE_POLY_L EFUSE_MKR_POFUSE=ppy.cRect(cellname+'_MKR_POFUSE','MKR_POFUSE',EFUSE_MKR_POFUSE_W,EFUSE_MKR_POFUSE_L) EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc) if EFUSE_TYPE=='H': '''efuse poly''' UP_EFUSE_POLY_W=0.28 UP_EFUSE_POLY_L=0.725 UP_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',UP_EFUSE_POLY_W,UP_EFUSE_POLY_L) UP_EFUSE_POLY.align(None,cc,top,cc) '''efuse W/L split''' MIDDLE_EFUSE_POLY_W=EFUSE_W MIDDLE_EFUSE_POLY_L=EFUSE_L MIDDLE_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',MIDDLE_EFUSE_POLY_W,MIDDLE_EFUSE_POLY_L) MIDDLE_EFUSE_POLY.align(top,uc,UP_EFUSE_POLY,lc) DUMMY_POLY_W=MIDDLE_EFUSE_POLY_W DUMMY_POLY_L=MIDDLE_EFUSE_POLY_L-0.2 DUMMY_POLY=ppy.cRect(cellname+'_GTbody','GT',DUMMY_POLY_W,DUMMY_POLY_L) DUMMY_POLY.align(top,cr,MIDDLE_EFUSE_POLY,cr,0.19) DUMMY_POLY.align(top,cl,MIDDLE_EFUSE_POLY,cl,-0.19) DOWN_EFUSE_POLY_W=0.6 DOWN_EFUSE_POLY_L=0.405 DOWN_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',DOWN_EFUSE_POLY_W,DOWN_EFUSE_POLY_L) DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc) '''efuse doping''' EFUSE_DOPING_W=0.82 EFUSE_DOPING_L=UP_EFUSE_POLY_L+MIDDLE_EFUSE_POLY_L+DOWN_EFUSE_POLY_L+0.22 if str(DOPING_TYPE)=='P': EFUSE_DOPING=ppy.cRect(cellname+'_SP','SP',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) if str(DOPING_TYPE)=='N': EFUSE_DOPING=ppy.cRect(cellname+'_SN','SN',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse contact''' UP_EFUSE_CTarray=CT.array(cellname+'_CT',2,4,xspace=0.1,yspace=0.1) UP_EFUSE_CTarray.align(top,uc,UP_EFUSE_POLY,uc,0,-0.035) DOWN_EFUSE_CTarray=CT.array(cellname+'_CT',4,2,xspace=0.1,yspace=0.1) DOWN_EFUSE_CTarray.align(top,lc,DOWN_EFUSE_POLY,lc,0,0.035) '''efuse M1''' UP_EFUSE_M1_W=0.4 UP_EFUSE_M1_L=UP_EFUSE_POLY_L UP_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',UP_EFUSE_M1_W,UP_EFUSE_M1_L) UP_EFUSE_M1.align(top,ll,UP_EFUSE_POLY,ll,-0.06) DOWN_EFUSE_M1_W=DOWN_EFUSE_POLY_W DOWN_EFUSE_M1_L=DOWN_EFUSE_POLY_L+0.025 DOWN_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',DOWN_EFUSE_M1_W,DOWN_EFUSE_M1_L) DOWN_EFUSE_M1.align(top,uc,DOWN_EFUSE_POLY,uc) '''efuse MKR_EFUSE''' EFUSE_MKR_EFUSE_W=EFUSE_DOPING_W EFUSE_MKR_EFUSE_L=EFUSE_DOPING_L EFUSE_MKR_EFUSE=ppy.cRect(cellname+'_MKR_EFUSE','MKR_EFUSE',EFUSE_MKR_EFUSE_W,EFUSE_MKR_EFUSE_L) EFUSE_MKR_EFUSE.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse MKR_POFUSE''' EFUSE_MKR_POFUSE_W=MIDDLE_EFUSE_POLY_W EFUSE_MKR_POFUSE_L=MIDDLE_EFUSE_POLY_L EFUSE_MKR_POFUSE=ppy.cRect(cellname+'_MKR_POFUSE','MKR_POFUSE',EFUSE_MKR_POFUSE_W,EFUSE_MKR_POFUSE_L) EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc) if EFUSE_TYPE=='I': '''efuse poly''' UP_EFUSE_POLY_W=0.28 UP_EFUSE_POLY_L=0.725 UP_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',UP_EFUSE_POLY_W,UP_EFUSE_POLY_L) UP_EFUSE_POLY.align(None,cc,top,cc) '''efuse W/L split''' MIDDLE_EFUSE_POLY_W=EFUSE_W MIDDLE_EFUSE_POLY_L=EFUSE_L MIDDLE_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',MIDDLE_EFUSE_POLY_W,MIDDLE_EFUSE_POLY_L) MIDDLE_EFUSE_POLY.align(top,uc,UP_EFUSE_POLY,lc) DOWN_EFUSE_POLY_W=UP_EFUSE_POLY_W DOWN_EFUSE_POLY_L=UP_EFUSE_POLY_L DOWN_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',DOWN_EFUSE_POLY_W,DOWN_EFUSE_POLY_L) DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc) DUMMY_POLY_W=MIDDLE_EFUSE_POLY_W DUMMY_POLY_L=MIDDLE_EFUSE_POLY_L-0.2 DUMMY_POLY=ppy.cRect(cellname+'_GTbody','GT',DUMMY_POLY_W,DUMMY_POLY_L) DUMMY_POLY.align(top,cr,MIDDLE_EFUSE_POLY,cr,0.19) DUMMY_POLY.align(top,cl,MIDDLE_EFUSE_POLY,cl,-0.19) '''efuse doping''' EFUSE_DOPING_W=0.82 EFUSE_DOPING_L=UP_EFUSE_POLY_L+MIDDLE_EFUSE_POLY_L+DOWN_EFUSE_POLY_L+0.22 if str(DOPING_TYPE)=='P': EFUSE_DOPING=ppy.cRect(cellname+'_SP','SP',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) if str(DOPING_TYPE)=='N': EFUSE_DOPING=ppy.cRect(cellname+'_SN','SN',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse contact''' UP_EFUSE_CTarray=CT.array(cellname+'_CT',2,4,xspace=0.1,yspace=0.1) UP_EFUSE_CTarray.align(top,uc,UP_EFUSE_POLY,uc,0,-0.035) DOWN_EFUSE_CTarray=CT.array(cellname+'_CT',2,4,xspace=0.1,yspace=0.1) DOWN_EFUSE_CTarray.align(top,uc,DOWN_EFUSE_POLY,uc,0,-0.15) '''efuse M1''' UP_EFUSE_M1_W=0.4 UP_EFUSE_M1_L=UP_EFUSE_POLY_L UP_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',UP_EFUSE_M1_W,UP_EFUSE_M1_L) UP_EFUSE_M1.align(top,ll,UP_EFUSE_POLY,ll,-0.06) DOWN_EFUSE_M1_W=0.4 DOWN_EFUSE_M1_L=DOWN_EFUSE_POLY_L DOWN_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',DOWN_EFUSE_M1_W,DOWN_EFUSE_M1_L) DOWN_EFUSE_M1.align(top,uc,DOWN_EFUSE_POLY,uc) '''efuse MKR_EFUSE''' EFUSE_MKR_EFUSE_W=EFUSE_DOPING_W EFUSE_MKR_EFUSE_L=EFUSE_DOPING_L EFUSE_MKR_EFUSE=ppy.cRect(cellname+'_MKR_EFUSE','MKR_EFUSE',EFUSE_MKR_EFUSE_W,EFUSE_MKR_EFUSE_L) EFUSE_MKR_EFUSE.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse MKR_POFUSE''' EFUSE_MKR_POFUSE_W=MIDDLE_EFUSE_POLY_W EFUSE_MKR_POFUSE_L=MIDDLE_EFUSE_POLY_L EFUSE_MKR_POFUSE=ppy.cRect(cellname+'_MKR_POFUSE','MKR_POFUSE',EFUSE_MKR_POFUSE_W,EFUSE_MKR_POFUSE_L) EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc) if EFUSE_TYPE=='J': '''efuse poly''' UP_EFUSE_POLY_W=0.28 UP_EFUSE_POLY_L=0.725 UP_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',UP_EFUSE_POLY_W,UP_EFUSE_POLY_L) UP_EFUSE_POLY.align(None,cc,top,cc) '''efuse W/L split''' MIDDLE_EFUSE_POLY_W=EFUSE_W MIDDLE_EFUSE_POLY_L=EFUSE_L MIDDLE_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',MIDDLE_EFUSE_POLY_W,MIDDLE_EFUSE_POLY_L) MIDDLE_EFUSE_POLY.align(top,uc,UP_EFUSE_POLY,lc) DOWN_EFUSE_POLY_W=0.4 DOWN_EFUSE_POLY_L=UP_EFUSE_POLY_L DOWN_EFUSE_POLY=ppy.cRect(cellname+'_GTbody','GT',DOWN_EFUSE_POLY_W,DOWN_EFUSE_POLY_L) DOWN_EFUSE_POLY.align(top,uc,MIDDLE_EFUSE_POLY,lc) DUMMY_POLY_W=MIDDLE_EFUSE_POLY_W DUMMY_POLY_L=MIDDLE_EFUSE_POLY_L+UP_EFUSE_POLY_L+DOWN_EFUSE_POLY_L DUMMY_POLY=ppy.cRect(cellname+'_GTbody','GT',DUMMY_POLY_W,DUMMY_POLY_L) DUMMY_POLY.align(top,cr,MIDDLE_EFUSE_POLY,cr,0.29) DUMMY_POLY.align(top,cl,MIDDLE_EFUSE_POLY,cl,-0.29) '''efuse doping''' EFUSE_DOPING_W=0.82 EFUSE_DOPING_L=UP_EFUSE_POLY_L+MIDDLE_EFUSE_POLY_L+DOWN_EFUSE_POLY_L+0.22 if str(DOPING_TYPE)=='P': EFUSE_DOPING=ppy.cRect(cellname+'_SP','SP',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) if str(DOPING_TYPE)=='N': EFUSE_DOPING=ppy.cRect(cellname+'_SN','SN',EFUSE_DOPING_W,EFUSE_DOPING_L) EFUSE_DOPING.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse contact''' UP_EFUSE_CTarray=CT.array(cellname+'_CT',2,4,xspace=0.1,yspace=0.1) UP_EFUSE_CTarray.align(top,uc,UP_EFUSE_POLY,uc,0,-0.035) DOWN_EFUSE_CTarray=CT.array(cellname+'_CT',2,4,xspace=0.1,yspace=0.1) DOWN_EFUSE_CTarray.align(top,uc,DOWN_EFUSE_POLY,uc,0,-0.15) '''efuse M1''' UP_EFUSE_M1_W=0.4 UP_EFUSE_M1_L=UP_EFUSE_POLY_L UP_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',UP_EFUSE_M1_W,UP_EFUSE_M1_L) UP_EFUSE_M1.align(top,ll,UP_EFUSE_POLY,ll,-0.06) DOWN_EFUSE_M1_W=DOWN_EFUSE_POLY_W DOWN_EFUSE_M1_L=DOWN_EFUSE_POLY_L DOWN_EFUSE_M1=ppy.cRect(cellname+'_M1','M1',DOWN_EFUSE_M1_W,DOWN_EFUSE_M1_L) DOWN_EFUSE_M1.align(top,uc,DOWN_EFUSE_POLY,uc) '''efuse MKR_EFUSE''' EFUSE_MKR_EFUSE_W=EFUSE_DOPING_W EFUSE_MKR_EFUSE_L=EFUSE_DOPING_L EFUSE_MKR_EFUSE=ppy.cRect(cellname+'_MKR_EFUSE','MKR_EFUSE',EFUSE_MKR_EFUSE_W,EFUSE_MKR_EFUSE_L) EFUSE_MKR_EFUSE.align(top,uc,UP_EFUSE_POLY,uc,0,0.11) '''efuse MKR_POFUSE''' EFUSE_MKR_POFUSE_W=MIDDLE_EFUSE_POLY_W EFUSE_MKR_POFUSE_L=MIDDLE_EFUSE_POLY_L EFUSE_MKR_POFUSE=ppy.cRect(cellname+'_MKR_POFUSE','MKR_POFUSE',EFUSE_MKR_POFUSE_W,EFUSE_MKR_POFUSE_L) EFUSE_MKR_POFUSE.align(top,uc,MIDDLE_EFUSE_POLY,uc) ANODE=ppy.cRect(cellname+'_ANODE','M1', 2,0.4).align(top,lr,UP_EFUSE_M1,ur) BNODE=ppy.cRect(cellname+'_ANODE','M1', 2,0.4).align(top,ul,DOWN_EFUSE_M1,ll) ppy.cRect(cellname+'_Bpin','M1', DOWN_EFUSE_M1_W,2).setpin('B','+x').align(top,cl,BNODE,cr) # '''接PAD2''' ppy.cRect(cellname+'_Apin','M1',UP_EFUSE_M1_W,2).setpin('A','-x').align(top,cr,ANODE,cl) return top import openpyxl as xl wb=xl.load_workbook('读表.xlsx',data_only=True) sht=wb['Sheet1'] X=0;Y=0 tkW=66.665 padL=55.555 padW=55.555 pitch=111.11 padnum=22 intermetal=8 pad1offset=44.44 pad1offsetR=11.11 yintial = 0 xintial = 0 tkL=pad1offset+pad1offsetR+(padnum-1)*pitch+padL def pad_spc_slot(tech='45LG',cellname='PAD_45',intermetal=intermetal,TM1=True,TM2=True,tkW=tkW,tkL=tkL,padL=padL,padW=padW,padnum=padnum,pitch=pitch,slot=True): tk=ppy.cCell(cellname) lib=[1]*(padnum+1) print(cellname) for i in range(1,padnum+1): cellname = str(i) loc = -7.553-5.11/2 if len(cellname) == 1 else -7.553-1.11/2 'if i==5 or i==10 or i==15 or i==20:' if i % 5 == 0: lib[i]=ppy.PAD_45_Num(tech='45NM',cellname='PAD_45_'+str(i),intermetal=intermetal,TM1=TM1,TM2=TM2,tkW=tkW,tkL=tkL,padL=padL,padW=padW,padnum=padnum,pitch=pitch,slot=False) tk.add(lib[i],origin=(pad1offset+(i-1)*pitch,(tkW-padW)/2)) lib_text =ppy.text('A02_txt',['AA','GT','M1','M2','M3','M4','M5','M6','M6Z','M7Z'],cellname,0.3,00).align(tk,lr,lib[i],lr,x=loc,y=2.972) else : lib[i]=ppy.PAD_45(tech='45NM',cellname='PAD_45_'+str(i),intermetal=intermetal,TM1=TM1,TM2=TM2,tkW=tkW,tkL=tkL,padL=padL,padW=padW,padnum=padnum,pitch=pitch,slot=False) tk.add(lib[i],origin=(pad1offset+(i-1)*pitch,(tkW-padW)/2)) padBORDER=ppy.cRect(cellname+'BORDER','BORDER',tkL,tkW).insert(tk,origin=(0,0)) # MKR_Z2=ppy.cRect(cellname+'_Z2_MKR','Z2_MKR',tkL,tkW).insert(tk,origin=(0,0)) # MKR_M7=ppy.cRect(cellname+'_M7_MKR','M7_MKR',tkL,tkW).insert(tk,origin=(0,0)) # MKR_Y0=ppy.cRect(cellname+'_Y0_MKR','Y0_MKR',tkL,tkW).insert(tk,origin=(0,0))#新pad return tk for j in range (199,272,12): print('j:'+str(j)) name=sht['A'+str(j)].value top=gdspy.Cell(str(name)) tk1=pad_spc_slot(cellname=str(name)) ppy.padWord_45NM(tk1,str(name),1.111) for i in range(j,j+11): print(i) CT_N=sht['M'+str(i)].value EFUSE_TYPE=sht['K'+str(i)].value cellname=sht['B'+str(i)].value EFUSE_W=sht['H'+str(i)].value EFUSE_L=sht['I'+str(i)].value DOPING_TYPE=sht['J'+str(i)].value A=sht['N'+str(i)].value B=sht['O'+str(i)].value C=sht['P'+str(i)].value D=sht['Q'+str(i)].value loc=sht['N'+str(i)].value pinset={'A':A,'B':B,'C':C,'D':D} A01=MOSnsvt25(cellname,EFUSE_W,EFUSE_L,DOPING_TYPE,EFUSE_TYPE,CT_N) ppy.metalLink(tk1,A01,linkW=2,linkS=2,location=loc,offset=['center',0],tkW=tkW,padW=padW,padL=padL,pitch=pitch,pad1offset=pad1offset,**pinset) A01_txt=ppy.text('A01_txt',['TXT'],cellname,0.2,00).align(None,uc,A01,lc,x=0,y=2) A01.remove_Layers('BORDER') BorderNew=ppy.cRect(cellname+'_BorderNew','BORDER',tkL,tkW) top.add(tk1,origin=(0,0)) tk1.add(BorderNew,origin=(0,0)) '''加Block''' MKR_PadWord=ppy.cRect(cellname+'_tileNot_MKR','tileNot_MKR',24,66.665).align(None,ll,tk1,ll,6.7,0) MKR_PadWord=ppy.cRect('CM01_Logo_MKR','logo_MKR',24,66.665).align(None,ll,tk1,ll,6.7,0) top.save(str(name)+'.gds') time1=datetime.datetime.now() print('End time: '+str(time1.strftime("%Y-%m-%d %H:%M:%S")))
08-22
# -*- coding: utf-8 -*- """ Created on Thu Jul 8 09:05:53 2021 @author: e022539 """ import mypy.procedure_gdspy as ppy import gdspy import os import datetime '''定义9点''' ll='ll';lr='lr';lc='lc';cl='cl';cc='cc';cr='cr';ul='ul';uc='uc';ur='ur' ''' ul------uc------ur - - - - - - cl------cc------cr - - - - - - ll------lc------lr ''' '''找到当前文件所在位置''' cwd=os.getcwd() '''设置当前文件所在位置为默认目录''' os.chdir(cwd) time1=datetime.datetime.now() print('Start time: '+str(time1.strftime("%Y-%m-%d %H:%M:%S"))) '''library 置空''' gdspy.current_library=gdspy.GdsLibrary() '''全局变量''' CTW=0.09 CTS=0.14 V1W=0.09 V1S=0.14 CT=ppy.cRect('CT','CT',CTW,CTW) V1=ppy.cRect('V1','V1',V1W,V1W) V2=ppy.cRect('V2','V2',V1W,V1W) '''''' SA=0.2; GTexAA=0.14 AAencCT=0.02; AAencCT_Y=0.04 CTnum=2; GTencCT=0.05 GTspAA=0.05 M1S=0.18; M1W=0.5; M1L=3.5 pitch=110; padL=55 AAL=6; AAW=1; AAS=3 SNencAA=0.2; SNencGT=0.2; SPencAA=0.2; SPencGT=0.2 NWencSP=0.2 TGencAA=1; DGencAA=1 NA=['NA','Na','na','','/','\\',] def MOS(cellname,Device,Type,W,L): '''creat top cell''' BORDER_L=25;BORDER_W=25 top=ppy.cRect(cellname,'BORDER',BORDER_L,BORDER_W,origin=(0,0)) '''画AA''' AA_L=2*SA+L AA=ppy.cRect(cellname+'_AA','AA',AA_L,W) AA.align(None,cc,top,cc) M1inAA_L=0.5*(2*SA+L-M1S) M1inAA=ppy.cRect(cellname+'_M1inAA','M1',M1inAA_L,W) M1inAA.fill(CT,CTS,CTS,AAencCT,AAencCT,fixs=True) M1inAA.align(top,cl,AA,cl) M1inAA.align(top,cr,AA,cr) '''画GT''' GTbody=ppy.cRect(cellname+'_GTbody','GT',L,W+2*GTexAA) GTbody.align(top,cc,AA,cc) GTlink_L=CTnum*CTW+(CTnum-1)*CTS+2*GTencCT GTlink_W=M1S-GTspAA GTlink=ppy.cRect(cellname+'_GTlink','GT',GTlink_L,GTlink_W) GTlink.align(top,lc,AA,uc,0,GTspAA) GTup=ppy.cRect(cellname+'_GTup','GT',GTlink_L,GTlink_L) GTup.size(None,None,'M1',size=0) GTup.fill(CT,CTS,CTS,AAencCT,AAencCT,fixs=True) GTup.align(top,lc,GTlink,uc) '''画pickup''' pick=ppy.cRect(cellname+'_pick','AA',AAL,AAW) pick.size(None,None,'M1',size=0) pick.fill(CT,CTS,CTS,AAencCT,AAencCT,fixs=True) pick.align(top,uc,AA,lc,0,-AAS) '''画IMP''' '''画NPS/PPS''' if Type[0]=='P': SPSN_L=GTlink_L+2*SPencGT if GTlink_L>AA_L else AA_L+2*SPencAA SPSN_W=GTexAA+W+M1S+GTlink_L+2*SPencGT SPSN=ppy.cRect(cellname+'_SPSN','SP',SPSN_L,SPSN_W) elif Type[0]=='N': SPSN_L=GTlink_L+2*SNencGT if GTlink_L>AA_L else AA_L+2*SNencAA SPSN_W=GTexAA+W+M1S+GTlink_L+2*SNencGT SPSN=ppy.cRect(cellname+'_SPSN','SN',SPSN_L,SPSN_W) SPSN.align(top,cc,AA,cc,0,-0.5*GTexAA+0.5*M1S+0.5*GTlink_L) '''画pickup IMP''' if Type[0]=='P': IMPpick_L=AAL+2*SNencAA IMPpick_W=AAW+2*SNencAA IMPpick=ppy.cRect(cellname+'_IMPpick','SN',IMPpick_L,IMPpick_W) elif Type[0]=='N': IMPpick_L=AAL+2*SPencAA IMPpick_W=AAW+2*SPencAA IMPpick=ppy.cRect(cellname+'_IMPpick','SP',IMPpick_L,IMPpick_W) IMPpick.align(top,cc,pick,cc) '''画SNW''' if Type[0]=='P': SNW_L=IMPpick_L+2*NWencSP SNW_W=SPSN_W+IMPpick_W+AAS-GTexAA-SPencAA-SNencAA+2*NWencSP SNW=ppy.cRect(cellname+'_IMP2','NW',SNW_L,SNW_W) elif Type[0]=='N': SNW=ppy.cRect(cellname+'_IMP2','NW',0,0) SNW.align(top,cc,AA,cc,0,0.5*GTlink_L+0.5*M1S-0.5*AAS-0.5*AAW) '''画DG和NAT''' ''' if Device=='1.2V': exIMP=ppy.cRect(cellname+'_exIMP','DG',0,0) elif Device=='1.8V': exIMP_W=GTlink_L+M1S+W+AAS+AAW+2*TGencAA exIMP=ppy.cRect(cellname+'_exIMP','TG',exIMP_W,exIMP_W) elif Device=='2.5V': exIMP_W=GTlink_L+M1S+W+AAS+AAW+2*DGencAA exIMP=ppy.cRect(cellname+'_exIMP','DG',exIMP_W,exIMP_W) exIMP.align(top,cc,AA,cc,0,0.5*GTlink_L+0.5*M1S-0.5*AAS-0.5*AAW) ''' '''画AA边缘的M1''' M1lf=ppy.cRect(cellname+'_M1lf','M1',M1W,W) M1lf.align(top,cr,AA,cl) M1rg=ppy.cRect(cellname+'_M1rg','M1',M1W,W) M1rg.align(top,cl,AA,cr) '''画AA的外接M1''' n=int(W/4) if W/2.5>1 else 1 M1link1=ppy.cRect(cellname+'_M1link1','M1',5,0.5) M1link1lf=M1link1.array(cellname+'_M1link1lf',1,n,xspace=0,yspace=3.5) M1link1lf.align(top,cr,M1lf,cl) M1link1rg=M1link1.array(cellname+'_M1link1rg',1,n,xspace=0,yspace=3.5) M1link1rg.align(top,cl,M1rg,cr) M1link2=ppy.cRect(cellname+'_M1link2','M1',0.5*pitch-0.5*padL-5-M1W-0.5*AA_L-2,2) M1link2lf=M1link2.array(cellname+'_M1link2lf',1,n,xspace=0,yspace=2) M1link2lf.align(top,cr,M1lf,cl,-5,0) M1link2rg=M1link2.array(cellname+'_M1link2rg',1,n,xspace=0,yspace=2) M1link2rg.align(top,cl,M1rg,cr,5,0) '''画GT的外接M1''' GTM1=ppy.cRect(cellname+'_GTup','M1',GTlink_L,5) GTM1.align(top,lc,GTup,uc) '''画PIN''' if W/2.5>1: ppy.cRect(cellname+'_Dpin','M1',0,n*2+n*2).setpin('D','-x').align(top,cr,M1link2lf,cl) ppy.cRect(cellname+'_Spin','M1',0,n*2+n*2).setpin('S','+x').align(top,cl,M1link2rg,cr) elif W/2.5<=1: ppy.cRect(cellname+'_Dpin','M1',0,2).setpin('D','-x').align(top,cr,M1link2lf,cl) ppy.cRect(cellname+'_Spin','M1',0,2).setpin('S','+x').align(top,cl,M1link2rg,cr) ppy.cRect(cellname+'_Gpin','M1',2,0).setpin('G','+y').align(top,lc,GTM1,uc) ppy.cRect(cellname+'_Bpin','M1',2,0).setpin('B','-y').align(top,uc,pick,lc) return top top=gdspy.Cell('Sample') A01=MOS('A01','1.8V','P',10,0.2).insert(top) A02=MOS('A02','1.2V','P',0.12,0.06).align(top,lc,A01,uc) A03=MOS('A03','2.5V','N',10,0.28).align(top,lc,A02,uc) top.save('Sample.gds') import openpyxl as xl wb=xl.load_workbook('TK plan.xlsx',data_only=True) sht=wb['MOS'] TKname_col='A' cellname_col='B' Device='C' Type_col='D' W_col='E' L_col='F' D_col='G' G_col='H' S_col='I' B_col='J' top=gdspy.Cell('top') X=0;Y=0 tkL=2425;tkW=72 PAD55=ppy.pad(tech='55NM',cellname='PAD_55',intermetal=5,TM1=True,tkW=72,tkL=2425,padL=55,padW=55,padnum=22,pitch=110,slot=False) for i in range(1,1000): ''' 生成TK cell,并插入一条PAD''' if sht[cellname_col+str(i)].value=='cellname': tkname=sht[TKname_col+str(i)].value tk=ppy.cCell(tkname) tk.add(PAD55) ppy.padWord(tk,tkname,1.0) '''开始往TK中插入device''' for j in range(i+1,i+100): if sht[cellname_col+str(j)].value !=None: #print (tkname) '''读device变量''' '''根据变量赋值生成device''' cellname = tkname+'_'+str(sht['B'+str(j)].value) Device = sht['C'+str(j)].value Type = sht['D'+str(j)].value W = sht['E'+str(j)].value L = sht['F'+str(j)].value device = MOS(cellname,Device,Type,W,L) D=sht['G'+str(j)].value G=sht['H'+str(j)].value S=sht['I'+str(j)].value B=sht['J'+str(j)].value loc=sht['G'+str(j)].value pinset={'D':D,'G':G,'S':S,'B':B} #print(loc,pinset) ppy.metalLink(tk,device,linkW=2,linkS=2,location=loc,offset=['center',0],**pinset) device.remove_Layers('BORDER') time1=datetime.datetime.now() #print(cellname+' done time: '+str(time1.strftime("%Y-%m-%d %H:%M:%S"))) else: break tk.add_rect('BORDER',tkL,tkW) '''tk add PAD 角标''' ''' number=['5','10','15','20'] for word in number: ppy.padNumber(tk,word,mag=0.3,x=(int(word)-1)*tk.pitch+tk.pad1offset+tk.padL+2,y=-tk.padW/2+5) # 在循环中添加调试信息 ''' #top.add(tk,origin=(X,Y)) Y=Y+tkW time1=datetime.datetime.now() print(tkname+' done time: '+str(time1.strftime("%Y-%m-%d %H:%M:%S"))) top.save('0214.gds') gdspy.ck_sum('0214.gds','0214.txt') time1=datetime.datetime.now() print('End time: '+str(time1.strftime("%Y-%m-%d %H:%M:%S"))) 上述程序输出Start time: 2025-08-21 13:17:30 TK01 done time: 2025-08-21 13:17:30 TK02 done time: 2025-08-21 13:17:30 3405101628 110 0214.gds End time: 2025-08-21 13:17:30 C:\Users\e025822\AppData\Local\Continuum\anaconda3\lib\site-packages\gdspy\__init__.py:1354: RuntimeWarning: overflow encountered in double_scalars self.length += numpy.sqrt(length**2 + axis_offset**2)
最新发布
08-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值