Dummy poly和dummy gate是什么

dummy poly是在半导体先进工艺中,是帮助平衡或者优化晶圆的一种工艺步骤。

在生产晶体管的时候因为扩散、掺杂、退火等处理导致晶圆上出现应力不均匀的情况,从而影响晶体管的性能。为了解决这些应力不均匀的问题,工程师将一种虚拟的多晶硅结构插入到晶圆的不同区域,以填补空白空间或调整工艺步骤。

多晶硅结构插入到晶圆的不同区域,以填充空白空间或调整工艺步骤,以提升整个晶圆的工艺一致性。

加dummy可以防止制造过程中由于曝光过度或者不足而导致刻蚀失败,此时插入dummy metal、dummy poly等,也可以避免由于光刻时反射与衍射影响关键元器件物理图形的精度而影响尺寸,比如电阻电容,插入dummy res、dummy cap。最后,有助于减轻噪声noise对电路的影响,

dummy poly就是加了poly图形,而dummy gate是加了器件,dummy gate是在AA上的poly,已经形成器件了。

实际在做的时候,dummy poly和dummy od可以由工具和脚本自动填入,所以不用每一个都手动加。

dummy gate也可以通过lvs,lvs rule中过滤了寄生器件的lvs检查,dummy gate也属于寄生器件,所以有dummy gate lvs也可以过。

后仿和前仿的区别:前仿主要执行基本的功能性仿真,以验证电路的基本功能是否和预期一致。后仿是在电路的布局和版图完成后,考虑电路的不均匀性,电容电感、布局延迟、寄生等性能。

后仿更注重电路的物理特性和实际工作情况,确保实际芯片可以正常运行并满足性能和可靠性要求。

SPF和LPF的区别:SPF是standard parasitic format,是标准寄生参数格式。包含了电路元件之间的寄生参数信息。LPF是layout parasitic extraction,是布局寄生参数提取。从电路的物理版图中提取寄生参数信息,以更准确的模拟电路的性能。

# -*- 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值