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

📄 mocmos.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: MoCMOS.java * * Copyright (c) 2003 Sun Microsystems and Static Free Software * * Electric(tm) is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Electric(tm) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Electric(tm); see the file COPYING.  If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, Mass 02111-1307, USA. */package com.sun.electric.technology.technologies;import com.sun.electric.database.geometry.EGraphics;import com.sun.electric.database.geometry.Poly;import com.sun.electric.database.geometry.DBMath;import com.sun.electric.database.hierarchy.EDatabase;import com.sun.electric.database.prototype.NodeProto;import com.sun.electric.database.prototype.PortCharacteristic;import com.sun.electric.database.text.Setting;import com.sun.electric.database.text.TextUtils;import com.sun.electric.database.text.Version;import com.sun.electric.database.topology.NodeInst;import com.sun.electric.database.variable.VarContext;import com.sun.electric.database.variable.Variable;import com.sun.electric.technology.ArcProto;import com.sun.electric.technology.DRCRules;import com.sun.electric.technology.DRCTemplate;import com.sun.electric.technology.EdgeH;import com.sun.electric.technology.EdgeV;import com.sun.electric.technology.Foundry;import com.sun.electric.technology.Layer;import com.sun.electric.technology.PrimitiveNode;import com.sun.electric.technology.PrimitivePort;import com.sun.electric.technology.SizeOffset;import com.sun.electric.technology.Technology;import com.sun.electric.technology.XMLRules;import com.sun.electric.technology.Xml;import com.sun.electric.technology.xml.XmlParam;import com.sun.electric.tool.user.User;import java.awt.Color;import java.io.PrintWriter;import java.util.List;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.Map;/** * This is the MOSIS CMOS technology. */public class MoCMOS extends Technology{	/** Value for standard SCMOS rules. */		public static final int SCMOSRULES = 0;	/** Value for submicron rules. */			public static final int SUBMRULES  = 1;	/** Value for deep rules. */				public static final int DEEPRULES  = 2;	/** key of Variable for saving technology state. */	public static final Variable.Key TECH_LAST_STATE = Variable.newKey("TECH_last_state");    public static final Version changeOfMetal6 =Version.parseVersion("8.02o"); // Fix of bug #357	// layers to share with subclasses    private Layer[] viaLayers = new Layer[5];	private Layer poly1Layer, poly2_lay, transistorPolyLayer;    private Layer silicideBlockLayer;    private Layer[] selectLayers;    private Layer[] metalLayers = new Layer[6]; // 1 -> 6    private Layer polyCutLayer;    private Layer pActiveWellLayer;    private Layer[] activeLayers = new Layer[2];    private Layer[] pseudoActiveLayers = new Layer[2];    private Layer[] pseudoSelectLayers = new Layer[2];    private Layer[] pseudoWellLayers = new Layer[2];    private Layer[] wellLayers = new Layer[2];    private Layer activeCutLayer;    private Layer thickActiveLayer;    private Layer passivationLayer;    private Layer polyCapLayer;    private Layer padFrameLayer;    private Layer pBaseLayer;	// arcs    /** metal 1->6 arcs */						private ArcProto[] metalArcs = new ArcProto[6];	/** polysilicon 1/2 arc */					private ArcProto[] polyArcs = new ArcProto[2];    /** P/N-active arcs */                      private ArcProto[] activeArcs = new ArcProto[2];    /** P/N-well arcs */                        private ArcProto[] wellArcs = new ArcProto[2];    /** General active arc */                   private ArcProto active_arc;	// nodes. Storing nodes only whe they are need in outside the constructor    /** metal-1->6-pin */				        private PrimitiveNode[] metalPinNodes = new PrimitiveNode[6];	/** active pins */					        private PrimitiveNode[] activePinNodes = new PrimitiveNode[2];    /** well pins */					        private PrimitiveNode[] wellPinNodes = new PrimitiveNode[2];    /** polysilicon-1-pin/2-pin */			    private PrimitiveNode[] polyPinNodes = new PrimitiveNode[2];    /** metal-1-P/N-active-contacts */          private PrimitiveNode[] metalActiveContactNodes = new PrimitiveNode[2];	/** metal-1-polysilicon-1/2/1-2/-contact */	private PrimitiveNode[] metal1PolyContactNodes = new PrimitiveNode[3];    /** P/N-Transistors */                      private PrimitiveNode[] transistorNodes = new PrimitiveNode[2];	/** ThickOxide Transistors */				private PrimitiveNode[] thickTransistorNodes = new PrimitiveNode[2];    /** Scalable Transistors */			        private PrimitiveNode[] scalableTransistorNodes;    /** NPN Transistor */                       private PrimitiveNode npnTransistorNode;    /** M1M2 -> M5M6 contacts */				private PrimitiveNode[] metalContactNodes = new PrimitiveNode[5];    /** metal-1-P/N-Well-contacts */            private PrimitiveNode[] metalWellContactNodes = new PrimitiveNode[2];    // for dynamically modifying the transistor geometry	private Technology.NodeLayer[] transistorPolyLayers = new Technology.NodeLayer[2];	private Technology.NodeLayer[] transistorActiveLayers = new Technology.NodeLayer[2];	private Technology.NodeLayer[] transistorActiveTLayers = new Technology.NodeLayer[2];    private Technology.NodeLayer[] transistorActiveBLayers = new Technology.NodeLayer[2];	private Technology.NodeLayer[] transistorPolyLLayers = new Technology.NodeLayer[2];    private Technology.NodeLayer[] transistorPolyRLayers = new Technology.NodeLayer[2];    private Technology.NodeLayer[] transistorPolyCLayers = new Technology.NodeLayer[2];	private Technology.NodeLayer[] transistorWellLayers = new Technology.NodeLayer[2];	private Technology.NodeLayer[] transistorSelectLayers = new Technology.NodeLayer[2];	// design rule constants//	/** wide rules apply to geometry larger than this */				private static final double WIDELIMIT = 100;	// -------------------- private and protected methods ------------------------    public MoCMOS(Generic generic, Xml.Technology t) {        super(generic, t);		setNoNegatedArcs();		setStaticTechnology();        setFactoryResolution(0.01); // value in lambdas   0.005um -> 0.05 lambdas        // Logical Effort Tech-dependent settings        setFactoryLESettings(0.167, 0.16, 0.7);		//**************************************** LAYERS ****************************************		metalLayers[0] = findLayer("Metal-1");		metalLayers[1] = findLayer("Metal-2");		metalLayers[2] = findLayer("Metal-3");		metalLayers[3] = findLayer("Metal-4");		metalLayers[4] = findLayer("Metal-5");		metalLayers[5] = findLayer("Metal-6");		poly1Layer = findLayer("Polysilicon-1");		poly2_lay = findLayer("Polysilicon-2");		activeLayers[P_TYPE] = findLayer("P-Active");		activeLayers[N_TYPE] = findLayer("N-Active");        selectLayers = new Layer[2];		selectLayers[P_TYPE] = findLayer("P-Select");		selectLayers[N_TYPE] = findLayer("N-Select");		wellLayers[P_TYPE] = findLayer("P-Well");		wellLayers[N_TYPE] = findLayer("N-Well");		polyCutLayer = findLayer("Poly-Cut");		activeCutLayer = findLayer("Active-Cut");        for (int i = 0; i < viaLayers.length; i++)		    viaLayers[i] = findLayer("Via");		passivationLayer = findLayer("Passivation");		transistorPolyLayer = findLayer("Transistor-Poly");		polyCapLayer = findLayer("Poly-Cap");		pActiveWellLayer = findLayer("P-Active-Well");		silicideBlockLayer = findLayer("Silicide-Block");		thickActiveLayer = findLayer("Thick-Active");		padFrameLayer = findLayer("Pad-Frame");        /***************************************/        // createExtraLayers		pBaseLayer = findLayer("P-Base");        /***************************************/		Layer pseudoMetal1_lay = metalLayers[0].getPseudoLayer();		// Pseudo-Metal-1		Layer pseudoMetal2_lay = metalLayers[1].getPseudoLayer();		// Pseudo-Metal-2		Layer pseudoMetal3_lay = metalLayers[2].getPseudoLayer();		// Pseudo-Metal-3		Layer pseudoMetal4_lay = metalLayers[3].getPseudoLayer();		// Pseudo-Metal-4		Layer pseudoMetal5_lay = metalLayers[4].getPseudoLayer();		// Pseudo-Metal-5		Layer pseudoMetal6_lay = metalLayers[5].getPseudoLayer();		// Pseudo-Metal-6		Layer pseudoPoly1_lay = poly1Layer.getPseudoLayer();            // Pseudo-Polysilicon-1		Layer pseudoPoly2_lay = poly2_lay.getPseudoLayer();             // Pseudo-Polysilicon-2		pseudoActiveLayers[P_TYPE] = activeLayers[P_TYPE].getPseudoLayer();		// Pseudo-P-Active		pseudoActiveLayers[N_TYPE] = activeLayers[N_TYPE].getPseudoLayer();		// Pseudo-N-Active		pseudoSelectLayers[P_TYPE] = selectLayers[P_TYPE].getPseudoLayer();	// Pseudo-P-Select		pseudoSelectLayers[N_TYPE] = selectLayers[N_TYPE].getPseudoLayer();	// Pseudo-N-Select		pseudoWellLayers[P_TYPE] = wellLayers[P_TYPE].getPseudoLayer();		// Pseudo-P-Well		pseudoWellLayers[N_TYPE] = wellLayers[N_TYPE].getPseudoLayer();		// Pseudo-N-Well		//**************************************** ARCS ****************************************		metalArcs[0] = findArcProto("Metal-1");		metalArcs[1] = findArcProto("Metal-2");		metalArcs[2] = findArcProto("Metal-3");		metalArcs[3] = findArcProto("Metal-4");		metalArcs[4] = findArcProto("Metal-5");		metalArcs[5] = findArcProto("Metal-6");		polyArcs[0] = findArcProto("Polysilicon-1");		polyArcs[1] = findArcProto("Polysilicon-2");		activeArcs[P_TYPE] = findArcProto("P-Active");		activeArcs[N_TYPE] = findArcProto("N-Active");		wellArcs[P_TYPE] = findArcProto("P-Well");		wellArcs[N_TYPE] = findArcProto("N-Well");		active_arc = findArcProto("Active");		//**************************************** NODES ****************************************		metalPinNodes[0] = findNodeProto("Metal-1-Pin");		metalPinNodes[1] = findNodeProto("Metal-2-Pin");		metalPinNodes[2] = findNodeProto("Metal-3-Pin");		metalPinNodes[3] = findNodeProto("Metal-4-Pin");		metalPinNodes[4] = findNodeProto("Metal-5-Pin");		metalPinNodes[5] = findNodeProto("Metal-6-Pin");		polyPinNodes[0] = findNodeProto("Polysilicon-1-Pin");		polyPinNodes[1] = findNodeProto("Polysilicon-2-Pin");		activePinNodes[P_TYPE] = findNodeProto("P-Active-Pin");		activePinNodes[N_TYPE] = findNodeProto("N-Active-Pin");		PrimitiveNode activeGenPinNode = findNodeProto("Active-Pin");		wellPinNodes[P_TYPE] = findNodeProto("P-Well-Pin");		wellPinNodes[N_TYPE] = findNodeProto("N-Well-Pin");        metalActiveContactNodes[P_TYPE] = findNodeProto("Metal-1-P-Active-Con");		metalActiveContactNodes[N_TYPE] = findNodeProto("Metal-1-N-Active-Con");		metal1PolyContactNodes[0] = findNodeProto("Metal-1-Polysilicon-1-Con");		metal1PolyContactNodes[1] = findNodeProto("Metal-1-Polysilicon-2-Con");		metal1PolyContactNodes[2] = findNodeProto("Metal-1-Polysilicon-1-2-Con");        String[] stdNames = {"p", "n"};        for (int i = 0; i < 2; i++)            transistorNodes[i] = findNodeProto(stdNames[i].toUpperCase()+"-Transistor");		/** Thick oxide transistors */		String[] thickNames = {"Thick-P", "Thick-N"};		for (int i = 0; i < thickTransistorNodes.length; i++)			thickTransistorNodes[i] = findNodeProto(thickNames[i] + "-Transistor");        scalableTransistorNodes = new PrimitiveNode[2];        scalableTransistorNodes[P_TYPE] = findNodeProto("P-Transistor-Scalable");        scalableTransistorNodes[N_TYPE] = findNodeProto("N-Transistor-Scalable");        npnTransistorNode = findNodeProto("NPN-Transistor");		metalContactNodes[0] = findNodeProto("Metal-1-Metal-2-Con");		metalContactNodes[1] = findNodeProto("Metal-2-Metal-3-Con");		metalContactNodes[2] = findNodeProto("Metal-3-Metal-4-Con");		metalContactNodes[3] = findNodeProto("Metal-4-Metal-5-Con");		metalContactNodes[4] = findNodeProto("Metal-5-Metal-6-Con");        for (int i = 0; i < metalWellContactNodes.length; i++)            metalWellContactNodes[i] = findNodeProto(metalLayers[0].getName()+"-"+wellLayers[i].getName()+"-Con");    }    /**     * Constructs MOCMOS technology without TSMC180 foundry.     */	public MoCMOS(Generic generic)    {		this(generic, "mocmos", "MOSIS CMOS", "MOSIS CMOS", Foundry.Type.MOSIS, 200, true); // in nanometers: really 0.2 micron        initFoundryMOSIS();    }

⌨️ 快捷键说明

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