📄 mocmos.java
字号:
pBaseLayer.setFactoryCIFLayer("CBA"); // Pad-Frame // The Skill names metalLayers[0].setFactorySkillLayer("metal1"); // Metal-1 metalLayers[1].setFactorySkillLayer("metal2"); // Metal-2 metalLayers[2].setFactorySkillLayer("metal3"); // Metal-3 metalLayers[3].setFactorySkillLayer("metal4"); // Metal-4 metalLayers[4].setFactorySkillLayer("metal5"); // Metal-5 metalLayers[5].setFactorySkillLayer("metal6"); // Metal-6 poly1Layer.setFactorySkillLayer("poly"); // Polysilicon-1 poly2_lay.setFactorySkillLayer(""); // Polysilicon-2 activeLayers[P_TYPE].setFactorySkillLayer("aa"); // P-Active activeLayers[N_TYPE].setFactorySkillLayer("aa"); // N-Active selectLayers[P_TYPE].setFactorySkillLayer("pplus"); // P-Select selectLayers[N_TYPE].setFactorySkillLayer("nplus"); // N-Select wellLayers[P_TYPE].setFactorySkillLayer("pwell"); // P-Well wellLayers[N_TYPE].setFactorySkillLayer("nwell"); // N-Well polyCutLayer.setFactorySkillLayer("pcont"); // Poly-Cut activeCutLayer.setFactorySkillLayer("acont"); // Active-Cut viaLayers[0].setFactorySkillLayer("via"); // Via-1 viaLayers[1].setFactorySkillLayer("via2"); // Via-2 viaLayers[2].setFactorySkillLayer("via3"); // Via-3 viaLayers[3].setFactorySkillLayer("via4"); // Via-4 viaLayers[4].setFactorySkillLayer("via5"); // Via-5 passivationLayer.setFactorySkillLayer("glasscut"); // Passivation transistorPolyLayer.setFactorySkillLayer("poly"); // Transistor-Poly polyCapLayer.setFactorySkillLayer(""); // Poly-Cap pActiveWellLayer.setFactorySkillLayer("aa"); // P-Active-Well silicideBlockLayer.setFactorySkillLayer(""); // Silicide-Block thickActiveLayer.setFactorySkillLayer(""); // Thick-Active padFrameLayer.setFactorySkillLayer(""); // Pad-Frame // Logical Effort Tech-dependent settings setFactoryLESettings(0.167, 0.16, 0.7);// setGateCapacitance(0.167);// setWireRatio(0.16);// setDiffAlpha(0.7); // The layer distance // Metal values based on 18nm technology with 200nm as grid unit. double BULK_LAYER = 0, WELL_THICKNESS = 13; // proposed by J. Baker. double SELECT_THICKNESS = 5, SELECT_DISTANCE = 8; // proposed by J. Baker. Distance from BULK_LAYER double ACTIVE_THICKNESS = 4, ACTIVE_DISTANCE = 9; // proposed by J. Baker. Distance from BULK_LAYER double THICKACT_THICKNESS = 7, THICKACT_DISTANCE = 6; // values adapted after suggestions from J. Baker. double ILD_LAYER = 3.5; // 0.7/0.2 convertLength() double IMD_LAYER = 5.65; // 1.13um/0.2 double METAL_LAYER = 2.65; // 0.53um/0.2 wellLayers[P_TYPE].setFactory3DInfo(WELL_THICKNESS, BULK_LAYER, "NICEST", 0.8); // P-Well wellLayers[N_TYPE].setFactory3DInfo(WELL_THICKNESS, BULK_LAYER, "NICEST", 0.8); // N-Well selectLayers[P_TYPE].setFactory3DInfo(SELECT_THICKNESS, SELECT_DISTANCE, "SCREEN_DOOR", 0.4); // P-Select selectLayers[N_TYPE].setFactory3DInfo(SELECT_THICKNESS, SELECT_DISTANCE, "SCREEN_DOOR", 0.4); // N-Select activeLayers[P_TYPE].setFactory3DInfo(ACTIVE_THICKNESS, ACTIVE_DISTANCE, "NONE", 0.0); // P-Active old values=0.17um/0.2 = activeLayers[N_TYPE].setFactory3DInfo(ACTIVE_THICKNESS, ACTIVE_DISTANCE, "NONE", 0.0); // N-Active old values=0.16um/0.2 pActiveWellLayer.setFactory3DInfo(ACTIVE_THICKNESS, ACTIVE_DISTANCE, "NONE", 0.0); // P-Active-Well thickActiveLayer.setFactory3DInfo(THICKACT_THICKNESS, THICKACT_DISTANCE, "NICEST", 0.6); // Thick Active (between select and well) metalLayers[0].setFactory3DInfo(METAL_LAYER, ILD_LAYER + activeLayers[P_TYPE].getDepth(), "NONE", 0.2); // Metal-1 0.53um/0.2 metalLayers[1].setFactory3DInfo(METAL_LAYER, IMD_LAYER + metalLayers[0].getDistance(), "NONE", 0.2); // Metal-2 viaLayers[0].setFactory3DInfo(metalLayers[1].getDistance()-metalLayers[0].getDepth(), metalLayers[0].getDepth(), "NONE", 0.2); // Via-1 metalLayers[2].setFactory3DInfo(METAL_LAYER, IMD_LAYER + metalLayers[1].getDistance(), "NONE", 0.2); // Metal-3 viaLayers[1].setFactory3DInfo(metalLayers[2].getDistance()-metalLayers[1].getDepth(), metalLayers[1].getDepth(), "NONE", 0.2); // Via-2 metalLayers[3].setFactory3DInfo(METAL_LAYER, IMD_LAYER + metalLayers[2].getDistance(), "NONE", 0.2); // Metal-4 viaLayers[2].setFactory3DInfo(metalLayers[3].getDistance()-metalLayers[2].getDepth(), metalLayers[2].getDepth(), "NONE", 0.2); // Via-3 metalLayers[4].setFactory3DInfo(METAL_LAYER, IMD_LAYER + metalLayers[3].getDistance(), "NONE", 0.2); // Metal-5 viaLayers[3].setFactory3DInfo(metalLayers[4].getDistance()-metalLayers[3].getDepth(), metalLayers[3].getDepth(), "NONE", 0.2); // Via-4 metalLayers[5].setFactory3DInfo(4.95, IMD_LAYER + metalLayers[4].getDistance(), "NONE", 0.2); // Metal-6 0.99um/0.2 viaLayers[4].setFactory3DInfo(metalLayers[5].getDistance()-metalLayers[4].getDepth(), metalLayers[4].getDepth(), "NONE", 0.2); // Via-5 double PASS_LAYER = 5; // 1um/0.2 double PO_LAYER = 1; // 0.2/0.2 double FOX_LAYER = 0; // since Sept 2008 1.75; // 0.35/0.2 double FOX_LAYER_POLY2 = 2.85; // 15.85 - 13 requested by J. Baker. double TOX_LAYER = 0; // Very narrow thin oxide in gate // Poly layers double activeDepth = activeLayers[P_TYPE].getDepth(); poly1Layer.setFactory3DInfo(PO_LAYER, FOX_LAYER + activeDepth, "NONE", 0.2); // Polysilicon-1 transistorPolyLayer.setFactory3DInfo(PO_LAYER, TOX_LAYER + activeDepth, "NONE", 0.2); // Transistor-Poly poly2_lay.setFactory3DInfo(PO_LAYER, FOX_LAYER_POLY2 + activeDepth, "NONE", 0.2); // Polysilicon-2 // on top of transistor layer? polyCapLayer.setFactory3DInfo(PO_LAYER, FOX_LAYER + activeDepth, "NONE", 0.2); // Poly-Cap @TODO GVG Ask polyCap polyCutLayer.setFactory3DInfo(metalLayers[0].getDistance()-poly1Layer.getDepth(), poly1Layer.getDepth(), "NONE", 0.2); // Poly-Cut between poly and metal1 activeCutLayer.setFactory3DInfo(metalLayers[0].getDistance()-activeLayers[N_TYPE].getDepth(), activeLayers[N_TYPE].getDepth(), "NONE", 0.2); // Active-Cut betweent active and metal1 // Other layers passivationLayer.setFactory3DInfo(PASS_LAYER, metalLayers[5].getDepth(), "NONE", 0.2); // Passivation silicideBlockLayer.setFactory3DInfo(0, BULK_LAYER, "NONE", 0.2); // Silicide-Block padFrameLayer.setFactory3DInfo(0, passivationLayer.getDepth(), "NONE", 0.2); // Pad-Frame // The Spice parasitics metalLayers[0].setFactoryParasitics(0.078, 0.1209, 0.1104); // Metal-1 metalLayers[1].setFactoryParasitics(0.078, 0.0843, 0.0974); // Metal-2 metalLayers[2].setFactoryParasitics(0.078, 0.0843, 0.0974); // Metal-3 metalLayers[3].setFactoryParasitics(0.078, 0.0843, 0.0974); // Metal-4 metalLayers[4].setFactoryParasitics(0.078, 0.0843, 0.0974); // Metal-5 metalLayers[5].setFactoryParasitics(0.036, 0.0423, 0.1273); // Metal-6 poly1Layer.setFactoryParasitics(6.2, 0.1467, 0.0608); // Polysilicon-1 poly2_lay.setFactoryParasitics(50.0, 1.0, 0); // Polysilicon-2 activeLayers[P_TYPE].setFactoryParasitics(2.5, 0.9, 0); // P-Active activeLayers[N_TYPE].setFactoryParasitics(3.0, 0.9, 0); // N-Active selectLayers[P_TYPE].setFactoryParasitics(0, 0, 0); // P-Select selectLayers[N_TYPE].setFactoryParasitics(0, 0, 0); // N-Select wellLayers[P_TYPE].setFactoryParasitics(0, 0, 0); // P-Well wellLayers[N_TYPE].setFactoryParasitics(0, 0, 0); // N-Well polyCutLayer.setFactoryParasitics(2.2, 0, 0); // Poly-Cut activeCutLayer.setFactoryParasitics(2.5, 0, 0); // Active-Cut viaLayers[0].setFactoryParasitics(1.0, 0, 0); // Via-1 viaLayers[1].setFactoryParasitics(0.9, 0, 0); // Via-2 viaLayers[2].setFactoryParasitics(0.8, 0, 0); // Via-3 viaLayers[3].setFactoryParasitics(0.8, 0, 0); // Via-4 viaLayers[4].setFactoryParasitics(0.8, 0, 0); // Via-5 passivationLayer.setFactoryParasitics(0, 0, 0); // Passivation transistorPolyLayer.setFactoryParasitics(2.5, 0.09, 0); // Transistor-Poly polyCapLayer.setFactoryParasitics(0, 0, 0); // Poly-Cap pActiveWellLayer.setFactoryParasitics(0, 0, 0); // P-Active-Well silicideBlockLayer.setFactoryParasitics(0, 0, 0); // Silicide-Block thickActiveLayer.setFactoryParasitics(0, 0, 0); // Thick-Active padFrameLayer.setFactoryParasitics(0, 0, 0); // Pad-Frame setFactoryParasitics(4, 0.1); String [] headerLevel1 = { "*CMOS/BULK-NWELL (PRELIMINARY PARAMETERS)", ".OPTIONS NOMOD DEFL=3UM DEFW=3UM DEFAD=70P DEFAS=70P LIMPTS=1000", "+ITL5=0 RELTOL=0.01 ABSTOL=500PA VNTOL=500UV LVLTIM=2", "+LVLCOD=1", ".MODEL N NMOS LEVEL=1", "+KP=60E-6 VTO=0.7 GAMMA=0.3 LAMBDA=0.05 PHI=0.6", "+LD=0.4E-6 TOX=40E-9 CGSO=2.0E-10 CGDO=2.0E-10 CJ=.2MF/M^2", ".MODEL P PMOS LEVEL=1", "+KP=20E-6 VTO=0.7 GAMMA=0.4 LAMBDA=0.05 PHI=0.6", "+LD=0.6E-6 TOX=40E-9 CGSO=3.0E-10 CGDO=3.0E-10 CJ=.2MF/M^2", ".MODEL DIFFCAP D CJO=.2MF/M^2" }; setSpiceHeaderLevel1(headerLevel1); String [] headerLevel2 = { "* MOSIS 3u CMOS PARAMS", ".OPTIONS NOMOD DEFL=2UM DEFW=6UM DEFAD=100P DEFAS=100P", "+LIMPTS=1000 ITL5=0 ABSTOL=500PA VNTOL=500UV", "* Note that ITL5=0 sets ITL5 to infinity", ".MODEL N NMOS LEVEL=2 LD=0.3943U TOX=502E-10", "+NSUB=1.22416E+16 VTO=0.756 KP=4.224E-05 GAMMA=0.9241", "+PHI=0.6 UO=623.661 UEXP=8.328627E-02 UCRIT=54015.0", "+DELTA=5.218409E-03 VMAX=50072.2 XJ=0.4U LAMBDA=2.975321E-02", "+NFS=4.909947E+12 NEFF=1.001E-02 NSS=0.0 TPG=1.0", "+RSH=20.37 CGDO=3.1E-10 CGSO=3.1E-10", "+CJ=3.205E-04 MJ=0.4579 CJSW=4.62E-10 MJSW=0.2955 PB=0.7", ".MODEL P PMOS LEVEL=2 LD=0.2875U TOX=502E-10", "+NSUB=1.715148E+15 VTO=-0.7045 KP=1.686E-05 GAMMA=0.3459", "+PHI=0.6 UO=248.933 UEXP=1.02652 UCRIT=182055.0", "+DELTA=1.0E-06 VMAX=100000.0 XJ=0.4U LAMBDA=1.25919E-02", "+NFS=1.0E+12 NEFF=1.001E-02 NSS=0.0 TPG=-1.0", "+RSH=79.10 CGDO=2.89E-10 CGSO=2.89E-10", "+CJ=1.319E-04 MJ=0.4125 CJSW=3.421E-10 MJSW=0.198 PB=0.66", ".TEMP 25.0" }; setSpiceHeaderLevel2(headerLevel2); //**************************************** ARCS **************************************** /** metal 1 arc */ metalArcs[0] = newArcProto("Metal-1", 0, 3.0, ArcProto.Function.METAL1, new Technology.ArcLayer(metalLayers[0], /*3,*/ Poly.Type.FILLED, "7.1") ); metalArcs[0].setFactoryFixedAngle(true); metalArcs[0].setWipable(); metalArcs[0].setFactoryAngleIncrement(90); /** metal 2 arc */ metalArcs[1] = newArcProto("Metal-2", 0, 3.0, ArcProto.Function.METAL2, new Technology.ArcLayer(metalLayers[1], /*3,*/ Poly.Type.FILLED, "9.1") ); metalArcs[1].setFactoryFixedAngle(true); metalArcs[1].setWipable(); metalArcs[1].setFactoryAngleIncrement(90); /** metal 3 arc */ metalArcs[2] = newArcProto("Metal-3", 0, 3.0, ArcProto.Function.METAL3, new Technology.ArcLayer(metalLayers[2], /*3,*/ Poly.Type.FILLED, "15.1") ); metalArcs[2].setFactoryFixedAngle(true); metalArcs[2].setWipable(); metalArcs[2].setFactoryAngleIncrement(90); /** metal 4 arc */ metalArcs[3] = newArcProto("Metal-4", 0, 3.0, ArcProto.Function.METAL4, new Technology.ArcLayer(metalLayers[3], /*3,*/ Poly.Type.FILLED, "22.1") ); metalArcs[3].setFactoryFixedAngle(true); metalArcs[3].setWipable(); metalArcs[3].setFactoryAngleIncrement(90); /** metal 5 arc */ metalArcs[4] = newArcProto("Metal-5", 0, 3.0, ArcProto.Function.METAL5, new Technology.ArcLayer(metalLayers[4], /*3,*/ Poly.Type.FILLED, "26.1") ); metalArcs[4].setFactoryFixedAngle(true); metalArcs[4].setWipable(); metalArcs[4].setFactoryAngleIncrement(90); /** metal 6 arc */ metalArcs[5] = newArcProto("Metal-6", 0, 5.0, ArcProto.Function.METAL6, new Technology.ArcLayer(metalLayers[5], /*5,*/ Poly.Type.FILLED, "30.1") ); metalArcs[5].setFactoryFixedAngle(true); metalArcs[5].setWipable(); metalArcs[5].setFactoryAngleIncrement(90); /** polysilicon 1 arc */ polyArcs[0] = newArcProto("Polysilicon-1", 0, 2.0, ArcProto.Function.POLY1, new Technology.ArcLayer(poly1Layer, /*2,*/ Poly.Type.FILLED, "3.1") ); polyArcs[0].setFactoryFixedAngle(true); polyArcs[0].setWipable(); polyArcs[0].setFactoryAngleIncrement(90); /** polysilicon 2 arc */ polyArcs[1] = newArcProto("Polysilicon-2", 0, 7.0, ArcProto.Function.POLY2, new Technology.ArcLayer(poly2_lay, /*7,*/ Poly.Type.FILLED, "11.1") ); polyArcs[1].setFactoryFixedAngle(true); polyArcs[1].setWipable(); polyArcs[1].setFactoryAngleIncrement(90);// polyArcs[1].setNotUsed(true); /** P-active arc */ activeArcs[P_TYPE] = newArcProto("P-Active", 12.0, 15.0, ArcProto.Function.DIFFP, new Technology.ArcLayer(activeLayers[P_TYPE], /*3,*/ Poly.Type.FILLED, "2.1"), new Technology.ArcLayer(wellLayers[N_TYPE], /*15,*/ Poly.Type.FILLED, "2.1", "2.3"), new Technology.ArcLayer(selectLayers[P_TYPE], /*7,*/ Poly.Type.FILLED, "2.1", "4.2") ); activeArcs[P_TYPE].setFactoryFixedAngle(true); activeArcs[P_TYPE].setWipable(); activeArcs[P_TYPE].setFactoryAngleIncrement(90); /** N-active arc */ activeArcs[N_TYPE] = newArcProto("N-Active", 12.0, 15.0, ArcProto.Function.DIFFN, new Technology.ArcLayer(activeLayers[N_TYPE], /*3,*/ Poly.Type.FILLED, "2.1"), new Technology.ArcLayer(wellLayers[P_TYPE], /*15,*/ Poly.Type.FILLED, "2.1", "2.3"), new Technology.ArcLayer(selectLayers[N_TYPE], /*7,*/ Poly.Type.FILLED, "2.1", "4.2") ); activeArcs[N_TYPE].setFactoryFixedAngle(true); activeArcs[N_TYPE].setWipable(); activeArcs[N_TYPE].setFactoryAngleIncrement(90); /** General active arc */ active_arc = newArcProto("Active", 0, 3.0, ArcProto.Function.DIFF,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -