⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mocmos.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		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 + -