# -*- 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")))