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

📄 mocmos.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
			new Technology.ArcLayer(activeLayers[P_TYPE], /*3,*/ Poly.Type.FILLED, "2.1"),			new Technology.ArcLayer(activeLayers[N_TYPE], /*3,*/ Poly.Type.FILLED, "2.1")		);		active_arc.setFactoryFixedAngle(true);		active_arc.setWipable();		active_arc.setFactoryAngleIncrement(90);//		active_arc.setNotUsed(true);        /** P-well arc */		wellArcs[P_TYPE] = newArcProto("P-Well", 0, 2.0, ArcProto.Function.WELL,  // 2.0 similar to Poly pin			new Technology.ArcLayer(wellLayers[P_TYPE], 2.0, Poly.Type.FILLED)		);		wellArcs[P_TYPE].setFactoryFixedAngle(true);		wellArcs[P_TYPE].setWipable();		wellArcs[P_TYPE].setFactoryAngleIncrement(90);        wellArcs[P_TYPE].setArcInvisible(false);        /** N-well arc */		wellArcs[N_TYPE] = newArcProto("N-Well", 0, 2.0, ArcProto.Function.WELL,			new Technology.ArcLayer(wellLayers[N_TYPE], 2.0, Poly.Type.FILLED)		);		wellArcs[N_TYPE].setFactoryFixedAngle(true);		wellArcs[N_TYPE].setWipable();		wellArcs[N_TYPE].setFactoryAngleIncrement(90);        //**************************************** NODES ****************************************        for (int i = 0; i < metalArcs.length; i++) {            ArcProto ap = metalArcs[i];            metalPinNodes[i] = ap.makeWipablePin("Metal-"+(i+1)+"-Pin", "metal-"+(i+1), 3.0);        }        polyPinNodes[0] = polyArcs[0].makeWipablePin("Polysilicon-1-Pin", "polysilicon-1", 2.0);        polyPinNodes[1] = polyArcs[1].makeWipablePin("Polysilicon-2-Pin", "polysilicon-2", 3.0);        activePinNodes[P_TYPE] = activeArcs[P_TYPE].makeWipablePin("P-Active-Pin", "p-active", 15.0);        activePinNodes[N_TYPE] = activeArcs[N_TYPE].makeWipablePin("N-Active-Pin", "n-active", 15.0);        wellPinNodes[P_TYPE] = wellArcs[P_TYPE].makeWipablePin("P-Well-Pin", "p-active", 3.0);        wellPinNodes[N_TYPE] = wellArcs[N_TYPE].makeWipablePin("N-Well-Pin", "n-active", 3.0);        PrimitiveNode activeGenPinNode = active_arc.makeWipablePin("Active-Pin", "active", 3.0, activeArcs[P_TYPE], activeArcs[N_TYPE]);		/** metal-1-P-active-contact */		metalActiveContactNodes[P_TYPE] = PrimitiveNode.newInstance("Metal-1-P-Active-Con", this,            17.0, 17.0, "6.2, 7.3", new SizeOffset(6, 6, 6, 6),			new Technology.NodeLayer []			{				new Technology.NodeLayer(metalLayers[0], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(6.5)),				new Technology.NodeLayer(activeLayers[P_TYPE], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(6)),				new Technology.NodeLayer(wellLayers[N_TYPE], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX,Technology.TechPoint.makeFullBox()),				new Technology.NodeLayer(selectLayers[P_TYPE], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(4)),				Technology.NodeLayer.makeMulticut(activeCutLayer, 0, Poly.Type.FILLED, TechPoint.makeIndented(8.5),                        /*2, 2, 3, 3,*/ "6.1", "6.3","6.3"//				new Technology.NodeLayer(activeCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(7.5))        )//				new Technology.NodeLayer(activeCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(7.5))//				new Technology.NodeLayer(activeCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(7.5))			});		metalActiveContactNodes[P_TYPE].addPrimitivePorts(new PrimitivePort []			{				PrimitivePort.newInstance(this, metalActiveContactNodes[P_TYPE], new ArcProto[] {activeArcs[P_TYPE], metalArcs[0]}, "metal-1-p-act", 0,180, 0, PortCharacteristic.UNKNOWN,					EdgeH.fromLeft(8), EdgeV.fromBottom(8), EdgeH.fromRight(8), EdgeV.fromTop(8))			});		metalActiveContactNodes[P_TYPE].setFunction(PrimitiveNode.Function.CONTACT);//		metalActiveContactNodes[P_TYPE].setSpecialType(PrimitiveNode.MULTICUT);//		metalActiveContactNodes[P_TYPE].setSpecialValues(new double [] {2, 2, 1.5, 1.5, 3, 3});//		metalActiveContactNodes[P_TYPE].setMinSize(17, 17, "6.2, 7.3");		/** metal-1-N-active-contact */		metalActiveContactNodes[N_TYPE] = PrimitiveNode.newInstance("Metal-1-N-Active-Con", this,            17.0, 17.0, "6.2, 7.3", new SizeOffset(6, 6, 6, 6),			new Technology.NodeLayer []			{				new Technology.NodeLayer(metalLayers[0], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(6.5)),				new Technology.NodeLayer(activeLayers[N_TYPE], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(6)),				new Technology.NodeLayer(wellLayers[P_TYPE], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox()),				new Technology.NodeLayer(selectLayers[N_TYPE], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(4)),				Technology.NodeLayer.makeMulticut(activeCutLayer, 0, Poly.Type.FILLED, TechPoint.makeIndented(8.5),                        /*2, 2, 3, 3,*/ "6.1", "6.3","6.3"//				new Technology.NodeLayer(activeCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(7.5))        )//				new Technology.NodeLayer(activeCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(7.5))//				new Technology.NodeLayer(activeCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(7.5))			});		metalActiveContactNodes[N_TYPE].addPrimitivePorts(new PrimitivePort []			{				PrimitivePort.newInstance(this, metalActiveContactNodes[N_TYPE], new ArcProto[] {activeArcs[N_TYPE], metalArcs[0]}, "metal-1-n-act", 0,180, 0, PortCharacteristic.UNKNOWN,					EdgeH.fromLeft(8), EdgeV.fromBottom(8), EdgeH.fromRight(8), EdgeV.fromTop(8))			});		metalActiveContactNodes[N_TYPE].setFunction(PrimitiveNode.Function.CONTACT);//		metalActiveContactNodes[N_TYPE].setSpecialType(PrimitiveNode.MULTICUT);//		metalActiveContactNodes[N_TYPE].setSpecialValues(new double [] {2, 2, 1.5, 1.5, 3, 3});//		metalActiveContactNodes[N_TYPE].setMinSize(17, 17, "6.2, 7.3");		/** metal-1-polysilicon-1-contact */		metal1PolyContactNodes[0] = PrimitiveNode.newInstance("Metal-1-Polysilicon-1-Con", this,            5.0, 5.0, "5.2, 7.3", null,			new Technology.NodeLayer []			{				new Technology.NodeLayer(metalLayers[0], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(0.5)),				new Technology.NodeLayer(poly1Layer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox()),				Technology.NodeLayer.makeMulticut(polyCutLayer, 0, Poly.Type.FILLED, TechPoint.makeIndented(2.5),                        /*2, 2, 3, 3,*/ "5.1", "5.3","5.3"//				new Technology.NodeLayer(polyCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(1.5))        )//				new Technology.NodeLayer(polyCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(1.5))//				new Technology.NodeLayer(polyCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(1.5))			});		metal1PolyContactNodes[0].addPrimitivePorts(new PrimitivePort []			{				PrimitivePort.newInstance(this, metal1PolyContactNodes[0], new ArcProto[] {polyArcs[0], metalArcs[0]}, "metal-1-polysilicon-1", 0,180, 0, PortCharacteristic.UNKNOWN,					EdgeH.fromLeft(2), EdgeV.fromBottom(2), EdgeH.fromRight(2), EdgeV.fromTop(2))			});		metal1PolyContactNodes[0].setFunction(PrimitiveNode.Function.CONTACT);//		metal1PolyContactNodes[0].setSpecialType(PrimitiveNode.MULTICUT);//		metal1PolyContactNodes[0].setSpecialValues(new double [] {2, 2, 1.5, 1.5, 3, 3});//		metal1PolyContactNodes[0].setMinSize(5, 5, "5.2, 7.3");		/** metal-1-polysilicon-2-contact */		metal1PolyContactNodes[1] = PrimitiveNode.newInstance("Metal-1-Polysilicon-2-Con", this,            10.0, 10.0, "?", null,			new Technology.NodeLayer []			{				new Technology.NodeLayer(metalLayers[0], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(3)),				new Technology.NodeLayer(poly2_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox()),				Technology.NodeLayer.makeMulticut(polyCutLayer, 0, Poly.Type.FILLED, TechPoint.makeIndented(5),                        /*2, 2, 3, 3,*/ "5.1", "5.3","5.3"//				new Technology.NodeLayer(polyCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(4))        )//				new Technology.NodeLayer(polyCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(4))//				new Technology.NodeLayer(polyCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(4))			});		metal1PolyContactNodes[1].addPrimitivePorts(new PrimitivePort []			{				PrimitivePort.newInstance(this, metal1PolyContactNodes[1], new ArcProto[] {polyArcs[1], metalArcs[0]}, "metal-1-polysilicon-2", 0,180, 0, PortCharacteristic.UNKNOWN,					EdgeH.fromLeft(4.5), EdgeV.fromBottom(4.5), EdgeH.fromRight(4.5), EdgeV.fromTop(4.5))			});		metal1PolyContactNodes[1].setFunction(PrimitiveNode.Function.CONTACT);//		metal1PolyContactNodes[1].setSpecialType(PrimitiveNode.MULTICUT);//		metal1PolyContactNodes[1].setSpecialValues(new double [] {2, 2, 4, 4, 3, 3});//		metal1PolyContactNodes[1].setNotUsed(true);//		metal1PolyContactNodes[1].setMinSize(10, 10, "?");		/** metal-1-polysilicon-1-2-contact */		metal1PolyContactNodes[2] = PrimitiveNode.newInstance("Metal-1-Polysilicon-1-2-Con", this,            15.0, 15.0, "?", null,			new Technology.NodeLayer []			{				new Technology.NodeLayer(metalLayers[0], 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(5.5)),				new Technology.NodeLayer(poly1Layer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(5)),				new Technology.NodeLayer(poly2_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox()),				Technology.NodeLayer.makeMulticut(polyCutLayer, 0, Poly.Type.FILLED, TechPoint.makeIndented(7.5),                        /*2, 2, 3, 3,*/ "5.1", "5.3","5.3"//				new Technology.NodeLayer(polyCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(6.5))        )//				new Technology.NodeLayer(polyCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(6.5))//				new Technology.NodeLayer(polyCutLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeIndented(6.5))			});		metal1PolyContactNodes[2].addPrimitivePorts(new PrimitivePort []			{				PrimitivePort.newInstance(this, metal1PolyContactNodes[2], new ArcProto[] {polyArcs[0], polyArcs[1], metalArcs[0]}, "metal-1-polysilicon-1-2", 0,180, 0, PortCharacteristic.UNKNOWN,					EdgeH.fromLeft(7), EdgeV.fromBottom(7), EdgeH.fromRight(7), EdgeV.fromTop(7))			});		metal1PolyContactNodes[2].setFunction(PrimitiveNode.Function.CONTACT);//		metal1PolyContactNodes[2].setSpecialType(PrimitiveNode.MULTICUT);//		metal1PolyContactNodes[2].setSpecialValues(new double [] {2, 2, 6.5, 6.5, 3, 3});//		metal1PolyContactNodes[2].setNotUsed(true);//		metal1PolyContactNodes[2].setMinSize(15, 15, "?");		/** P-Transistor */        /** N-Transistor */        String[] stdNames = {"p", "n"};        for (int i = 0; i < 2; i++)        {            transistorPolyLayers[i] = new Technology.NodeLayer(transistorPolyLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, new Technology.TechPoint [] {                new Technology.TechPoint(EdgeH.fromLeft(4), EdgeV.fromBottom(10)),                new Technology.TechPoint(EdgeH.fromRight(4), EdgeV.fromTop(10))}, 1, 1, 2, 2);            transistorPolyLLayers[i] = new Technology.NodeLayer(poly1Layer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, new Technology.TechPoint [] {                new Technology.TechPoint(EdgeH.fromLeft(4), EdgeV.fromBottom(10)),                new Technology.TechPoint(EdgeH.fromLeft(6), EdgeV.fromTop(10))}, 1, 1, 0 /*Was 2 SMR*/, 2);            transistorPolyRLayers[i] = new Technology.NodeLayer(poly1Layer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, new Technology.TechPoint [] {                new Technology.TechPoint(EdgeH.fromRight(6), EdgeV.fromBottom(10)),                new Technology.TechPoint(EdgeH.fromRight(4), EdgeV.fromTop(10))}, 1, 1, 2, 0 /*Was 2 SMR*/);            transistorPolyCLayers[i] = new Technology.NodeLayer(transistorPolyLayer, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, new Technology.TechPoint [] {                new Technology.TechPoint(EdgeH.fromLeft(6), EdgeV.fromBottom(10)),                new Technology.TechPoint(EdgeH.fromRight(6), EdgeV.fromTop(10))}, 1, 1, 2, 2);            transistorActiveLayers[i] = new Technology.NodeLayer(activeLayers[i], 1, Poly.Type.FILLED, Technology.NodeLayer.BOX, new Technology.TechPoint [] {                new Technology.TechPoint(EdgeH.fromLeft(6), EdgeV.fromBottom(7)),                new Technology.TechPoint(EdgeH.fromRight(6), EdgeV.fromTop(7))}, 4, 4, 0, 0);            transistorActiveTLayers[i] = new Technology.NodeLayer(activeLayers[i], 1, Poly.Type.FILLED, Technology.NodeLayer.BOX, new Technology.TechPoint [] {                new Technology.TechPoint(EdgeH.fromLeft(6), EdgeV.fromTop(10)),                new Technology.TechPoint(EdgeH.fromRight(6), EdgeV.fromTop(7))}, 4, 0 /*Was 4 SMR*/, 0, 0);            transistorActiveBLayers[i] = new Technology.NodeLayer(activeLayers[i], 3, Poly.Type.FILLED, Technology.NodeLayer.BOX, new Technology.TechPoint [] {                new Technology.TechPoint(EdgeH.fromLeft(6), EdgeV.fromBottom(7)),                new Technology.TechPoint(EdgeH.fromRight(6), EdgeV.fromBottom(10))}, 0 /*Was 4 SMR*/, 4, 0, 0);            transistorWellLayers[i] = new Technology.NodeLayer(wellLayers[(i+1)%transistorNodes.length], -1, Poly.Type.FILLED, Technology.NodeLayer.BOX, new Technology.TechPoint [] {                new Technology.TechPoint(EdgeH.makeLeftEdge(), EdgeV.fromBottom(1)),                new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.fromTop(1))}, 10, 10, 6, 6);            transistorSelectLayers[i] = new Technology.NodeLayer(selectLayers[i], -1, Poly.Type.FILLED, Technology.NodeLayer.BOX, new Technology.TechPoint [] {                new Technology.TechPoint(EdgeH.fromLeft(4), EdgeV.fromBottom(5)),                new Technology.TechPoint(EdgeH.fromRight(4), EdgeV.fromTop(5))}, 6, 6, 2, 2);            transistorNodes[i] = PrimitiveNode.newInstance(stdNames[i].toUpperCase()+"-Transistor", this,                15.0, 22.0, "2.1, 3.1", new SizeOffset(6, 6, 10, 10),                new Technology.NodeLayer [] {transistorActiveLayers[i], transistorPolyLayers[i], transistorWellLayers[i], transistorSelectLayers[i]});            transistorNodes[i].setElectricalLayers(new Technology.NodeLayer [] {transistorActiveTLayers[i], transistorActiveBLayers[i],                transistorPolyCLayers[i], transistorPolyLLayers[i], transistorPolyRLayers[i], transistorWellLayers[i], transistorSelectLayers[i]});            transistorNodes[i].addPrimitivePorts(new PrimitivePort []                {                    PrimitivePort.newInstance(this, transistorNodes[i], new ArcProto[] {polyArcs[0]}, stdNames[i]+"-trans-poly-left", 180,90, 0, PortCharacteristic.UNKNOWN,                        EdgeH.fromLeft(4), EdgeV.fromBottom(11), EdgeH.fromLeft(4), EdgeV.fromTop(11)),                    PrimitivePort.newInstance(this, transistorNodes[i], new ArcProto[] {activeArcs[i]}, stdNames[i]+"-trans-diff-top", 90,90, 1, PortCharacteristic.UNKNOWN,                        EdgeH.fromLeft(7.5), EdgeV.fromTop(7.5), EdgeH.fromRight(7.5), EdgeV.fromTop(7)),                    PrimitivePort.newInstance(this, transistorNodes[i], new ArcProto[] {polyArcs[0]}, stdNames[i]+"-trans-poly-right", 0,90, 0, PortCharacteristic.UNKNOWN,                        EdgeH.fromRight(4), EdgeV.fromBottom(11), EdgeH.fromRight(4), EdgeV.fromTop(11)),                    PrimitivePort.newInstance(this, transistorNodes[i], new ArcProto[] {activeArcs[i]}, stdNames[i]+"-trans-diff-bottom", 270,90, 2, PortCharacteristic.UNKNOWN,                        EdgeH.fromLeft(7.5), EdgeV.fromBottom(7), EdgeH.fromRight(7.5), EdgeV.fromBottom(7.5)),                    PrimitivePort.newInstance(this, transistorNodes[i], new ArcProto[] {wellArcs[(i+1)%transistorNodes.length]}, stdNames[i]+"-trans-well", 0,360, 3, PortCharacteristic.UNKNOWN,                        EdgeH.fromCenter(0), EdgeV.fromCenter(0), EdgeH.fromCenter(0), EdgeV.fromCenter(0))                });            transistorNodes[i].setFunction((i==P_TYPE) ? PrimitiveNode.Function.TRAPMOS : PrimitiveNode.Function.TRANMOS);            transistorNodes[i].setHoldsOutline();            transistorNodes[i].setCanShrink();            transistorNodes[i].setSpecialType(PrimitiveNode.SERPTRANS);            transistorNodes[i].setSpecialValues(new double [] {7, 1.5, 2.5, 2, 1, 2});//            transistorNodes[i].setMinSize(15, 22, "2.1, 3.1");        }		/** Thick oxide transistors */		String[] thickNames = {"Thick-P", "Thick-N"};		Technology.NodeLayer[] thickActiveLayers = new Technology.NodeLayer[] {transistorActiveLayers[P_TYPE], transistorActiveLayers[N_TYPE]};		Technology.NodeLayer[] thickPolyLayers = new Technology.NodeLayer[] {transistorPolyLayers[P_TYPE], transistorPolyLayers[N_TYPE]};		Technology.NodeLayer[] thickWellLayers = new Technology.NodeLayer[] {transistorWellLayers[P_TYPE], transistorWellLayers[N_TYPE]};		Technology.NodeLayer[] thickSelectLayers = new Technology.NodeLayer[] {transistorSelectLayers[P_TYPE], transistorSelectLayers[N_TYPE]};		Technology.NodeLayer[] thickActiveTLayers = new Technology.NodeLayer[] {transistorActiveTLayers[P_TYPE], transistorActiveTLayers[N_TYPE]};		Technology.NodeLayer[] thickActiveBLayers = new Technology.NodeLayer[] {transistorActiveBLayers[P_TYPE], transistorActiveBLayers[N_TYPE]};        Technology.NodeLayer[] thickPolyCLayers = new Technology.NodeLayer[] {transistorPolyCLayers[P_TYPE], transistorPolyCLayers[N_TYPE]};		Technology.NodeLayer[] thickPolyLLayers = new Technology.NodeLayer[] {transistorPolyLLayers[P_TYPE], transistorPolyLLayers[N_TYPE]};		Technology.NodeLayer[] thickPolyRLayers = new Technology.NodeLayer[] {transistorPolyRLayers[P_TYPE], transistorPolyRLayers[N_TYPE]};		Technology.NodeLayer[] thickLayers = new Technology.NodeLayer[2];		for (int i = 0; i < thickLayers.length; i++)		{			thickLayers[i] = new Technology.NodeLayer(thickActiveLayer, -1, Poly.Type.FILLED, Technology.NodeLayer.BOX, new Technology.TechPoint [] {			new Technology.TechPoint(EdgeH.makeLeftEdge(), EdgeV.fromBottom(1)),			new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.fromTop(1))}, 10, 10, 6, 6);		}		for (int i = 0; i < thickTransistorNodes.leng

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -