/* -*- tab-width: 4 -*-
*
* Electric(tm) VLSI Design System
*
* File: RCMOS.java
* Round CMOS technology description (CalTech rules)
* Specified by: Dick Lyon, Carver Mead, and Erwin Liu
*
* Copyright (c) 2004 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.prototype.PortCharacteristic;
import com.sun.electric.technology.ArcProto;
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.TechFactory;
import com.sun.electric.technology.Technology;
import java.awt.Color;
/**
* This is the Complementary MOS (old, N-Well, from Griswold) Technology.
*/
public class RCMOS extends Technology
{
private static final EGraphics.J3DTransparencyOption NONE = EGraphics.J3DTransparencyOption.NONE;
// -------------------- private and protected methods ------------------------
public RCMOS(Generic generic, TechFactory techFactory)
{
super(generic, techFactory, Foundry.Type.NONE, 2);
setTechShortName("Round CMOS");
setTechDesc("Complementary MOS (round, from MOSIS, P-Well, double metal)");
setFactoryScale(2000, true); // in nanometers: really 2 microns
setNoNegatedArcs();
// setNonStandard();
setStaticTechnology();
setFactoryTransparentLayers(new Color []
{
new Color( 96,209,255), // Metal-1
new Color(255,155,192), // Polysilicon
new Color(107,226, 96), // Diffusion
new Color(240,221,181), // Well
new Color(224, 95,255) // Metal-2
});
//**************************************** LAYERS ****************************************
/** Metal-1 layer */
Layer metal1_lay = Layer.newInstance(this, "Metal-1",
new EGraphics(false, true, null, EGraphics.TRANSPARENT_1, 96,209,255,0.8,true,
new int[] { 0x2222, // X X X X
0x0000, //
0x8888, // X X X X
0x0000, //
0x2222, // X X X X
0x0000, //
0x8888, // X X X X
0x0000, //
0x2222, // X X X X
0x0000, //
0x8888, // X X X X
0x0000, //
0x2222, // X X X X
0x0000, //
0x8888, // X X X X
0x0000}, //
NONE, 0.2));
Layer metal2_lay = Layer.newInstance(this, "Metal-2",
new EGraphics(false, true, null, EGraphics.TRANSPARENT_5, 224,95,255,0.8,true,
new int[] { 0x1010, // X X
0x2020, // X X
0x4040, // X X
0x8080, // X X
0x0101, // X X
0x0202, // X X
0x0404, // X X
0x0808, // X X
0x1010, // X X
0x2020, // X X
0x4040, // X X
0x8080, // X X
0x0101, // X X
0x0202, // X X
0x0404, // X X
0x0808}, // X X
NONE, 0.2));
/** P layer */
Layer polysilicon_lay = Layer.newInstance(this, "Polysilicon",
new EGraphics(false, true, null, EGraphics.TRANSPARENT_2, 255,155,192,0.8,true,
new int[] { 0x0808, // X X
0x0404, // X X
0x0202, // X X
0x0101, // X X
0x8080, // X X
0x4040, // X X
0x2020, // X X
0x1010, // X X
0x0808, // X X
0x0404, // X X
0x0202, // X X
0x0101, // X X
0x8080, // X X
0x4040, // X X
0x2020, // X X
0x1010}, // X X
NONE, 0.2));
/** S-Active layer */
Layer sActive_lay = Layer.newInstance(this, "S-Active",
new EGraphics(false, true, null, EGraphics.TRANSPARENT_3, 107,226,96,0.8,true,
new int[] { 0x0000, //
0x0303, // XX XX
0x4848, // X X X X
0x0303, // XX XX
0x0000, //
0x3030, // XX XX
0x8484, // X X X X
0x3030, // XX XX
0x0000, //
0x0303, // XX XX
0x4848, // X X X X
0x0303, // XX XX
0x0000, //
0x3030, // XX XX
0x8484, // X X X X
0x3030}, // XX XX
NONE, 0.2));
/** D-Active layer */
Layer dActive_lay = Layer.newInstance(this, "D-Active",
new EGraphics(false, true, null, EGraphics.TRANSPARENT_3, 107,226,96,0.8,true,
new int[] { 0x0000, //
0x0303, // XX XX
0x4848, // X X X X
0x0303, // XX XX
0x0000, //
0x3030, // XX XX
0x8484, // X X X X
0x3030, // XX XX
0x0000, //
0x0303, // XX XX
0x4848, // X X X X
0x0303, // XX XX
0x0000, //
0x3030, // XX XX
0x8484, // X X X X
0x3030}, // XX XX
NONE, 0.2));
/** Select layer */
Layer select_lay = Layer.newInstance(this, "Select",
new EGraphics(true, true, null, 0, 255,255,0,0.8,true,
new int[] { 0x1010, // X X
0x2020, // X X
0x4040, // X X
0x8080, // X X
0x0101, // X X
0x0202, // X X
0x0404, // X X
0x0808, // X X
0x1010, // X X
0x2020, // X X
0x4040, // X X
0x8080, // X X
0x0101, // X X
0x0202, // X X
0x0404, // X X
0x0808}, // X X
NONE, 0.2));
/** Well layer */
Layer well_lay = Layer.newInstance(this, "Well",
new EGraphics(false, true, null, EGraphics.TRANSPARENT_4, 240,221,181,0.8,true,
new int[] { 0x0000, //
0x00c0, // XX
0x0000, //
0x0000, //
0x0000, //
0x00c0, // XX
0x0000, //
0x0000, //
0x0000, //
0x00c0, // XX
0x0000, //
0x0000, //
0x0000, //
0x00c0, // XX
0x0000, //
0x0000}, //
NONE, 0.2));
/** Cut layer */
Layer cut_lay = Layer.newInstance(this, "Contact-Cut",
new EGraphics(false, false, null, 0, 0,0,0,0.8,true,
new int[] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, NONE, 0.2));
/** Via layer */
Layer via_lay = Layer.newInstance(this, "Via",
new EGraphics(false, false, null, 0, 0,0,0,0.8,true,
new int[] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, NONE, 0.2));
/** Passivation layer */
Layer passivation_lay = Layer.newInstance(this, "Passivation",
new EGraphics(true, true, null, 0, 100,100,100,0.8,true,
new int[] { 0x1c1c, // XXX XXX
0x3e3e, // XXXXX XXXXX
0x3636, // XX XX XX XX
0x3e3e, // XXXXX XXXXX
0x1c1c, // XXX XXX
0x0000, //
0x0000, //
0x0000, //
0x1c1c, // XXX XXX
0x3e3e, // XXXXX XXXXX
0x3636, // XX XX XX XX
0x3e3e, // XXXXX XXXXX
0x1c1c, // XXX XXX
0x0000, //
0x0000, //
0x0000}, //
NONE, 0.2));
/** Poly Cut layer */
Layer polyCut_lay = Layer.newInstance(this, "Poly-Cut",
new EGraphics(false, false, null, 0, 0,0,0,0.8,true,
new int[] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, NONE, 0.2));
/** Active Cut layer */
Layer activeCut_lay = Layer.newInstance(this, "Active-Cut",
new EGraphics(false, false, null, 0, 0,0,0,0.8,true,
new int[] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, NONE, 0.2));
// The layer functions
metal1_lay.setFunction(Layer.Function.METAL1); // Metal-1
metal2_lay.setFunction(Layer.Function.METAL2); // Metal-2
polysilicon_lay.setFunction(Layer.Function.POLY1); // Polysilicon
sActive_lay.setFunction(Layer.Function.DIFF); // S-Active
dActive_lay.setFunction(Layer.Function.DIFF); // D-Active
select_lay.setFunction(Layer.Function.IMPLANTP); // Select
well_lay.setFunction(Layer.Function.WELLP); // Well
cut_lay.setFunction(Layer.Function.CONTACT1); // Contact-Cut
via_lay.setFunction(Layer.Function.CONTACT2); // Via
passivation_lay.setFunction(Layer.Function.OVERGLASS); // Passivation
polyCut_lay.setFunction(Layer.Function.CONTACT1); // Poly-Cut
activeCut_lay.setFunction(Layer.Function.CONTACT1); // Active-Cut
Layer pseudoMetal1_lay = metal1_lay.makePseudo(); // Pseudo-Metal-1
Layer pseudoMetal2_lay = metal2_lay.makePseudo(); // Pseudo-Metal-2
Layer pseudoPolysilicon_lay = polysilicon_lay.makePseudo(); // Pseudo-Polysilicon
Layer pseudoSActive_lay = sActive_lay.makePseudo(); // Pseudo-S-Active
Layer pseudoDActive_lay = dActive_lay.makePseudo(); // Pseudo-D-Active
Layer pseudoSelect_lay = select_lay.makePseudo(); // Pseudo-Select
Layer pseudoWell_lay = well_lay.makePseudo(); // Pseudo-Well
// pseudoMetal1_lay.setFunction(Layer.Function.METAL1, Layer.Function.PSEUDO); // Pseudo-Metal-1
// pseudoMetal2_lay.setFunction(Layer.Function.METAL2, Layer.Function.PSEUDO); // Pseudo-Metal-2
// pseudoPolysilicon_lay.setFunction(Layer.Function.POLY1, Layer.Function.PSEUDO); // Pseudo-Polysilicon
// pseudoSActive_lay.setFunction(Layer.Function.DIFF, Layer.Function.PSEUDO); // Pseudo-S-Active
// pseudoDActive_lay.setFunction(Layer.Function.DIFF, Layer.Function.PSEUDO); // Pseudo-D-Active
// pseudoSelect_lay.setFunction(Layer.Function.IMPLANTP, Layer.Function.PSEUDO); // Pseudo-Select
// pseudoWell_lay.setFunction(Layer.Function.WELLP, Layer.Function.PSEUDO); // Pseudo-Well
// 3D values. Same values as in mocmos
metal1_lay.setFactory3DInfo(2.65, 16.5);
metal2_lay.setFactory3DInfo(2.65, 22.15);
polysilicon_lay.setFactory3DInfo(1, 14.75);
sActive_lay.setFactory3DInfo(4, 9);
dActive_lay.setFactory3DInfo(4, 9);
select_lay.setFactory3DInfo(5, 8);
well_lay.setFactory3DInfo(13, 0);
cut_lay.setFactory3DInfo(3.5, 13);
via_lay.setFactory3DInfo(3, 19.15);
passivation_lay.setFactory3DInfo(5, 19.15);
polyCut_lay.setFactory3DInfo(0.75, 15.75);
activeCut_lay.setFactory3DInfo(3.5, 13);
// The CIF names
metal1_lay.setFactoryCIFLayer("CMF"); // Metal-1
metal2_lay.setFactoryCIFLayer("CMS"); // Metal-2
polysilicon_lay.setFactoryCIFLayer("CPG"); // Polysilicon
sActive_lay.setFactoryCIFLayer("CAA"); // S-Active
dActive_lay.setFactoryCIFLayer("CAA"); // D-Active
select_lay.setFactoryCIFLayer("CSG"); // Select
well_lay.setFactoryCIFLayer("CWG"); // Well
cut_lay.setFactoryCIFLayer("CC"); // Contact-Cut
via_lay.setFactoryCIFLayer("CVA"); // Via
passivation_lay.setFactoryCIFLayer("COG"); // Passivation
polyCut_lay.setFactoryCIFLayer("CCP"); // Poly-Cut
activeCut_lay.setFactoryCIFLayer("CCA"); // Active-Cut
// pseudoMetal1_lay.setFactoryCIFLayer(""); // Pseudo-Metal-1
// pseudoMetal2_lay.setFactoryCIFLayer(""); // Pseudo-Metal-2
// pseudoPolysilicon_lay.setFactoryCIFLayer(""); // Pseudo-Polysilicon
// pseudoSActive_lay.setFactoryCIFLayer(""); // Pseudo-S-Active
// pseudoDActive_lay.setFactoryCIFLayer(""); // Pseudo-D-Active
// pseudoSelect_lay.setFactoryCIFLayer(""); // Pseudo-Select
// pseudoWell_lay.setFactoryCIFLayer(""); // Pseudo-Well
//******************** ARCS ********************
/** Metal-1 arc */
ArcProto metal1_arc = newArcProto("Metal-1", 0, 3, ArcProto.Function.METAL1,
new Technology.ArcLayer(metal1_lay, 3, Poly.Type.FILLED)
);
metal1_arc.setFactoryFixedAngle(false);
metal1_arc.setCurvable();
metal1_arc.setFactoryExtended(false);
metal1_arc.setFactoryAngleIncrement(0);
/** Metal-2 arc */
ArcProto metal2_arc = newArcProto("Metal-2", 0, 3, ArcProto.Function.METAL2,
new Technology.ArcLayer(metal2_lay, 3, Poly.Type.FILLED)
);
// metal2_arc.setFunction(ArcProto.Function.METAL1);
metal2_arc.setFactoryFixedAngle(false);
metal2_arc.setCurvable();
metal2_arc.setFactoryExtended(false);
metal2_arc.setFactoryAngleIncrement(0);
/** Polysilicon arc */
ArcProto polysilicon_arc = newArcProto("Polysilicon", 0, 2, ArcProto.Function.POLY1,
new Technology.ArcLayer(polysilicon_lay, 2, Poly.Type.FILLED)
);
// polysilicon_arc.setFunction(ArcProto.Function.METAL1);
polysilicon_arc.setFactoryFixedAngle(false);
polysilicon_arc.setCurvable();
polysilicon_arc.setFactoryExtended(false);
polysilicon_arc.setFactoryAngleIncrement(0);
/** S-Active arc */
ArcProto sActive_arc = newArcProto("S-Active", 4, 6, ArcProto.Function.DIFFN,
new Technology.ArcLayer(sActive_lay, 2, Poly.Type.FILLED),
new Technology.ArcLayer(select_lay, 6, Poly.Type.FILLED)
);
sActive_arc.setFactoryFixedAngle(false);
sActive_arc.setCurvable();
sActive_arc.setFactoryExtended(false);
sActive_arc.setFactoryAngleIncrement(0);
/** D-Active arc */
ArcProto dActive_arc = newArcProto("D-Active", 8, 10, ArcProto.Function.DIFFP,
new Technology.ArcLayer(dActive_lay, 2, Poly.Type.FILLED),
new Technology.ArcLayer(well_lay, 10, Poly.Type.FILLED)
);
dActive_arc.setFactoryFixedAngle(false);
dActive_arc.setCurvable();
dActive_arc.setFactoryExtended(false);
dActive_arc.setFactoryAngleIncrement(0);
/** Substrate-Active arc */
ArcProto substrateActive_arc = newArcProto("Substrate-Active", 0, 2, ArcProto.Function.DIFFS,
new Technology.ArcLayer(dActive_lay, 2, Poly.Type.FILLED),
new Technology.ArcLayer(sActive_lay, 2, Poly.Type.FILLED)
);
substrateActive_arc.setFactoryFixedAngle(false);
substrateActive_arc.setCurvable();
substrateActive_arc.setFactoryExtended(false);
substrateActive_arc.setFactoryAngleIncrement(0);
/** Well arc */
ArcProto wellActive_arc = newArcProto("Well-Active", 4, 6, ArcProto.Function.DIFFW,
new Technology.ArcLayer(dActive_lay, 2, Poly.Type.FILLED),
new Technology.ArcLayer(sActive_lay, 2, Poly.Type.FILLED),
new Technology.ArcLayer(well_lay, 6, Poly.Type.FILLED),
new Technology.ArcLayer(select_lay, 6, Poly.Type.FILLED)
);
wellActive_arc.setFactoryFixedAngle(false);
wellActive_arc.setCurvable();
wellActive_arc.setFactoryExtended(false);
wellActive_arc.setFactoryAngleIncrement(0);
/** S-Transistor arc */
ArcProto sTransistor_arc = newArcProto("S-Transistor", 4, 6, ArcProto.Function.DIFFN,
new Technology.ArcLayer(dActive_lay, 2, Poly.Type.FILLED),
new Technology.ArcLayer(polysilicon_lay, 2, Poly.Type.FILLED),
new Technology.ArcLayer(select_lay, 6, Poly.Type.FILLED)
);
sTransistor_arc.setFactoryFixedAngle(false);
sTransistor_arc.setCurvable();
sTransistor_arc.setFactoryExtended(false);
sTransistor_arc.setFactoryAngleIncrement(0);
/** D-Transistor arc */
ArcProto dTransistor_arc = newArcProto("D-Transistor", 8, 10, ArcProto.Function.DIFFP,
new Technology.ArcLayer(dActive_lay, 2, Poly.Type.FILLED),
new Technology.ArcLayer(polysilicon_lay, 2, Poly.Type.FILLED),
new Technology.ArcLayer(well_lay, 10, Poly.Type.FILLED)
);
dTransistor_arc.setFactoryFixedAngle(false);
dTransistor_arc.setCurvable();
dTransistor_arc.setFactoryExtended(false);
dTransistor_arc.setFactoryAngleIncrement(0);
//******************** NODES ********************
/** Metal-1-Pin */
PrimitiveNode metal1Pin_node = PrimitiveNode.newInstance("Metal-1-Pin", this, 3, 3, null,
new Technology.NodeLayer []
{
new Technology.NodeLayer(metal1_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())})
});
metal1Pin_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, metal1Pin_node, new ArcProto [] {metal1_arc}, "metal-1", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
metal1Pin_node.setFunction(PrimitiveNode.Function.PIN);
metal1Pin_node.setSquare();
/** Metal-2-Pin */
PrimitiveNode metal2Pin_node = PrimitiveNode.newInstance("Metal-2-Pin", this, 3, 3, null,
new Technology.NodeLayer []
{
new Technology.NodeLayer(metal2_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())})
});
metal2Pin_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, metal2Pin_node, new ArcProto [] {metal2_arc}, "metal-2", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
metal2Pin_node.setFunction(PrimitiveNode.Function.PIN);
metal2Pin_node.setSquare();
/** Polysilicon-Pin */
PrimitiveNode polysiliconPin_node = PrimitiveNode.newInstance("Polysilicon-Pin", this, 2, 2, null,
new Technology.NodeLayer []
{
new Technology.NodeLayer(polysilicon_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())})
});
polysiliconPin_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, polysiliconPin_node, new ArcProto [] {polysilicon_arc}, "polysilicon", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
polysiliconPin_node.setFunction(PrimitiveNode.Function.PIN);
polysiliconPin_node.setSquare();
/** S-Active-Pin */
PrimitiveNode sActivePin_node = PrimitiveNode.newInstance("S-Active-Pin", this, 6, 6, new SizeOffset(2,2,2,2),
new Technology.NodeLayer []
{
new Technology.NodeLayer(sActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(2), EdgeV.makeCenter())}),
new Technology.NodeLayer(select_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())})
});
sActivePin_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, sActivePin_node, new ArcProto [] {sActive_arc}, "s-active", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
sActivePin_node.setFunction(PrimitiveNode.Function.PIN);
sActivePin_node.setSquare();
/** D-Active-Pin */
PrimitiveNode dActivePin_node = PrimitiveNode.newInstance("D-Active-Pin", this, 10, 10, new SizeOffset(4,4,4,4),
new Technology.NodeLayer []
{
new Technology.NodeLayer(dActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(4), EdgeV.makeCenter())}),
new Technology.NodeLayer(well_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())})
});
dActivePin_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, dActivePin_node, new ArcProto [] {dActive_arc}, "d-active", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
dActivePin_node.setFunction(PrimitiveNode.Function.PIN);
dActivePin_node.setSquare();
/** Substrate-Active-Pin */
PrimitiveNode substrateActivePin_node = PrimitiveNode.newInstance("Substrate-Active-Pin", this, 2, 2, null,
new Technology.NodeLayer []
{
new Technology.NodeLayer(dActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())}),
new Technology.NodeLayer(sActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())})
});
substrateActivePin_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, substrateActivePin_node, new ArcProto [] {substrateActive_arc}, "active", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
substrateActivePin_node.setFunction(PrimitiveNode.Function.PIN);
substrateActivePin_node.setSquare();
/** Well-Active-Pin */
PrimitiveNode wellActivePin_node = PrimitiveNode.newInstance("Well-Active-Pin", this, 6, 6, new SizeOffset(2,2,2,2),
new Technology.NodeLayer []
{
new Technology.NodeLayer(dActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(2), EdgeV.makeCenter())}),
new Technology.NodeLayer(sActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(2), EdgeV.makeCenter())}),
new Technology.NodeLayer(well_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())}),
new Technology.NodeLayer(select_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(1), EdgeV.makeCenter())})
});
wellActivePin_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, wellActivePin_node, new ArcProto [] {wellActive_arc}, "active", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
wellActivePin_node.setFunction(PrimitiveNode.Function.PIN);
wellActivePin_node.setSquare();
/** S-Transistor-Pin */
PrimitiveNode sTransistorPin_node = PrimitiveNode.newInstance("S-Transistor", this, 6, 6, new SizeOffset(2,2,2,2),
new Technology.NodeLayer []
{
new Technology.NodeLayer(sActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(2), EdgeV.makeCenter())}),
new Technology.NodeLayer(polysilicon_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(2), EdgeV.makeCenter())}),
new Technology.NodeLayer(select_lay, -1, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())})
});
sTransistorPin_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, sTransistorPin_node, new ArcProto [] {sTransistor_arc, sActive_arc, polysilicon_arc},
"s-trans", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
sTransistorPin_node.setFunction(PrimitiveNode.Function.PIN);
/** D-Transistor-Pin */
PrimitiveNode dTransistorPin_node = PrimitiveNode.newInstance("D-Transistor", this, 10, 10, new SizeOffset(4,4,4,4),
new Technology.NodeLayer []
{
new Technology.NodeLayer(dActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(4), EdgeV.makeCenter())}),
new Technology.NodeLayer(polysilicon_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(4), EdgeV.makeCenter())}),
new Technology.NodeLayer(well_lay, -1, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())})
});
dTransistorPin_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, dTransistorPin_node, new ArcProto [] {dTransistor_arc, dActive_arc, polysilicon_arc},
"d-trans", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
dTransistorPin_node.setFunction(PrimitiveNode.Function.PIN);
/** Metal-1-S-active-contact */
PrimitiveNode metal1SActiveCon_node = PrimitiveNode.newInstance("Metal-1-S-Active-Con", this, 10, 10, new SizeOffset(2,2,2,2),
new Technology.NodeLayer []
{
new Technology.NodeLayer(metal1_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(3), EdgeV.makeCenter())}),
new Technology.NodeLayer(sActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(2), EdgeV.makeCenter())}),
new Technology.NodeLayer(select_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())}),
new Technology.NodeLayer(activeCut_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromCenter(1), EdgeV.makeCenter())})
});
metal1SActiveCon_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, metal1SActiveCon_node, new ArcProto [] {sActive_arc, metal1_arc},
"metal-1-s-act", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
metal1SActiveCon_node.setFunction(PrimitiveNode.Function.CONTACT);
metal1SActiveCon_node.setSquare();
/** Metal-1-D-active-contact */
PrimitiveNode metal1DActiveCon_node = PrimitiveNode.newInstance("Metal-1-D-Active-Con", this, 14, 14, new SizeOffset(4,4,4,4),
new Technology.NodeLayer []
{
new Technology.NodeLayer(metal1_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(5), EdgeV.makeCenter())}),
new Technology.NodeLayer(dActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(4), EdgeV.makeCenter())}),
new Technology.NodeLayer(well_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())}),
new Technology.NodeLayer(activeCut_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromCenter(1), EdgeV.makeCenter())})
});
metal1DActiveCon_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, metal1DActiveCon_node, new ArcProto [] {dActive_arc, metal1_arc},
"metal-1-d-act", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
metal1DActiveCon_node.setFunction(PrimitiveNode.Function.CONTACT);
metal1DActiveCon_node.setSquare();
/** Metal-1-polysilicon-contact */
PrimitiveNode metal1PolyCon_node = PrimitiveNode.newInstance("Metal-1-Polysilicon-Con", this, 6, 6, null,
new Technology.NodeLayer []
{
new Technology.NodeLayer(metal1_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(1), EdgeV.makeCenter())}),
new Technology.NodeLayer(polysilicon_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())}),
new Technology.NodeLayer(polyCut_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromCenter(1), EdgeV.makeCenter())})
});
metal1PolyCon_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, metal1PolyCon_node, new ArcProto [] {polysilicon_arc, metal1_arc},
"metal-1-polysilicon", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
metal1PolyCon_node.setFunction(PrimitiveNode.Function.CONTACT);
metal1PolyCon_node.setSquare();
/** Metal-1-Metal-2-contact */
PrimitiveNode metal1Metal2Con_node = PrimitiveNode.newInstance("Metal-1-Metal-2-Con", this, 4, 4, null,
new Technology.NodeLayer []
{
new Technology.NodeLayer(metal1_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())}),
new Technology.NodeLayer(metal2_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())}),
new Technology.NodeLayer(via_lay, 0, Poly.Type.CIRCLE, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromCenter(1), EdgeV.makeCenter())})
});
metal1Metal2Con_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, metal1Metal2Con_node, new ArcProto [] {metal1_arc, metal2_arc},
"metal-1-metal-2", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
metal1Metal2Con_node.setFunction(PrimitiveNode.Function.CONTACT);
metal1Metal2Con_node.setSquare();
/** Metal-1-Well Contact */
PrimitiveNode metal1WellCon_node = PrimitiveNode.newInstance("Metal-1-Well-Con", this, 10, 10, new SizeOffset(2,2,2,2),
new Technology.NodeLayer []
{
new Technology.NodeLayer(metal1_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(5), EdgeV.makeCenter())}),
new Technology.NodeLayer(sActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(2), EdgeV.makeCenter())}),
new Technology.NodeLayer(well_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())}),
new Technology.NodeLayer(select_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(2), EdgeV.makeCenter())}),
new Technology.NodeLayer(activeCut_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromCenter(1), EdgeV.makeCenter())})
});
metal1WellCon_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, metal1WellCon_node, new ArcProto [] {metal1_arc, wellActive_arc},
"metal-1-well", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
metal1WellCon_node.setFunction(PrimitiveNode.Function.WELL);
metal1WellCon_node.setSquare();
/** Metal-1-Substrate Contact */
PrimitiveNode metal1SubstrateCon_node = PrimitiveNode.newInstance("Metal-1-Substrate-Con", this, 6, 6, null,
new Technology.NodeLayer []
{
new Technology.NodeLayer(metal1_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromRight(1), EdgeV.makeCenter())}),
new Technology.NodeLayer(sActive_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.makeRightEdge(), EdgeV.makeCenter())}),
new Technology.NodeLayer(activeCut_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, new Technology.TechPoint [] {
new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.makeCenter()),
new Technology.TechPoint(EdgeH.fromCenter(1), EdgeV.makeCenter())})
});
metal1SubstrateCon_node.addPrimitivePortsFixed(new PrimitivePort[]
{
PrimitivePort.newInstance(this, metal1SubstrateCon_node, new ArcProto [] {metal1_arc, substrateActive_arc},
"metal-1-substrate", 0,180, 0, PortCharacteristic.UNKNOWN,
EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
});
metal1SubstrateCon_node.setFunction(PrimitiveNode.Function.WELL);
metal1SubstrateCon_node.setSquare();
// /** Metal-1 node */
// PrimitiveNode metal1_node = PrimitiveNode.newInstance("Metal-1-Node", this, 4, 4, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(metal1_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// metal1_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, metal1_node, new ArcProto [] {metal1_arc}, "metal-1", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// metal1_node.setFunction(PrimitiveNode.Function.NODE);
// metal1_node.setHoldsOutline();
// metal1_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** Metal-2 node */
// PrimitiveNode metal2_node = PrimitiveNode.newInstance("Metal-2-Node", this, 4, 4, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(metal2_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// metal2_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, metal2_node, new ArcProto [] {metal2_arc}, "metal-2", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// metal2_node.setFunction(PrimitiveNode.Function.NODE);
// metal2_node.setHoldsOutline();
// metal2_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** Polysilicon node */
// PrimitiveNode polysilicon_node = PrimitiveNode.newInstance("Polysilicon-Node", this, 4, 4, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(polysilicon_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// polysilicon_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, polysilicon_node, new ArcProto [] {polysilicon_arc}, "polysilicon", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// polysilicon_node.setFunction(PrimitiveNode.Function.NODE);
// polysilicon_node.setHoldsOutline();
// polysilicon_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** Active node */
// PrimitiveNode active_node = PrimitiveNode.newInstance("Active-Node", this, 4, 4, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(sActive_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// active_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, active_node, new ArcProto [] {sActive_arc}, "active", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// active_node.setFunction(PrimitiveNode.Function.NODE);
// active_node.setHoldsOutline();
// active_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** D-Active node */
// PrimitiveNode d_active_node = PrimitiveNode.newInstance("D-Active-Node", this, 4, 4, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(dActive_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// d_active_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, d_active_node, new ArcProto [] {dActive_arc}, "active", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// d_active_node.setFunction(PrimitiveNode.Function.NODE);
// d_active_node.setHoldsOutline();
// d_active_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** Select node */
// PrimitiveNode select_node = PrimitiveNode.newInstance("Select-Node", this, 4, 4, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(select_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// select_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, select_node, new ArcProto [] {}, "select", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// select_node.setFunction(PrimitiveNode.Function.NODE);
// select_node.setHoldsOutline();
// select_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** Cut node */
// PrimitiveNode cut_node = PrimitiveNode.newInstance("Cut-Node", this, 2, 2, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(cut_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// cut_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, cut_node, new ArcProto [] {}, "cut", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// cut_node.setFunction(PrimitiveNode.Function.NODE);
// cut_node.setHoldsOutline();
// cut_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** Poly Cut node */
// PrimitiveNode polyCut_node = PrimitiveNode.newInstance("Poly-Cut-Node", this, 2, 2, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(polyCut_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// polyCut_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, polyCut_node, new ArcProto [] {}, "polycut", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// polyCut_node.setFunction(PrimitiveNode.Function.NODE);
// polyCut_node.setHoldsOutline();
// polyCut_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** Active Cut node */
// PrimitiveNode activeCut_node = PrimitiveNode.newInstance("Active-Cut-Node", this, 2, 2, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(activeCut_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// activeCut_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, activeCut_node, new ArcProto [] {}, "activecut", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// activeCut_node.setFunction(PrimitiveNode.Function.NODE);
// activeCut_node.setHoldsOutline();
// activeCut_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** Via node */
// PrimitiveNode via_node = PrimitiveNode.newInstance("Via-Node", this, 2, 2, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(via_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// via_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, via_node, new ArcProto [] {}, "via", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// via_node.setFunction(PrimitiveNode.Function.NODE);
// via_node.setHoldsOutline();
// via_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** Well node */
// PrimitiveNode well_node = PrimitiveNode.newInstance("Well-Node", this, 6, 6, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(well_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// well_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, well_node, new ArcProto [] {}, "well", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// well_node.setFunction(PrimitiveNode.Function.NODE);
// well_node.setHoldsOutline();
// well_node.setSpecialType(PrimitiveNode.POLYGONAL);
//
// /** Passivation node */
// PrimitiveNode passivation_node = PrimitiveNode.newInstance("Passivation-Node", this, 8, 8, null,
// new Technology.NodeLayer []
// {
// new Technology.NodeLayer(passivation_lay, 0, Poly.Type.FILLED, Technology.NodeLayer.BOX, Technology.TechPoint.makeFullBox())
// });
// passivation_node.addPrimitivePorts(new PrimitivePort[]
// {
// PrimitivePort.newInstance(this, passivation_node, new ArcProto [] {}, "passivation", 0,180, 0, PortCharacteristic.UNKNOWN,
// EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter())
// });
// passivation_node.setFunction(PrimitiveNode.Function.NODE);
// passivation_node.setHoldsOutline();
// passivation_node.setSpecialType(PrimitiveNode.POLYGONAL);
// The pure layer nodes
metal1_lay.makePureLayerNode("Metal-1-Node", 4.0, Poly.Type.FILLED, "metal-1", metal1_arc);
metal2_lay.makePureLayerNode("Metal-2-Node", 4.0, Poly.Type.FILLED, "metal-2", metal2_arc);
polysilicon_lay.makePureLayerNode("Polysilicon-Node", 4.0, Poly.Type.FILLED, "polysilicon", polysilicon_arc);
sActive_lay.makePureLayerNode("Active-Node", 4.0, Poly.Type.FILLED, "active", sActive_arc);
dActive_lay.makePureLayerNode("D-Active-Node", 4.0, Poly.Type.FILLED, "active", dActive_arc);
select_lay.makePureLayerNode("Select-Node", 4.0, Poly.Type.FILLED, "select");
cut_lay.makePureLayerNode("Cut-Node", 2.0, Poly.Type.FILLED, "cut");
polyCut_lay.makePureLayerNode("Poly-Cut-Node", 2.0, Poly.Type.FILLED, "polycut");
activeCut_lay.makePureLayerNode("Active-Cut-Node", 2.0, Poly.Type.FILLED, "activecut");
via_lay.makePureLayerNode("Via-Node", 2.0, Poly.Type.FILLED, "via");
well_lay.makePureLayerNode("Well-Node", 6.0, Poly.Type.FILLED, "well");
passivation_lay.makePureLayerNode("Passivation-Node", 8.0, Poly.Type.FILLED, "passivation");
// metal1_lay.setPureLayerNode(metal1_node); // Metal-1-Node
// metal2_lay.setPureLayerNode(metal2_node); // Metal-2-Node
// polysilicon_lay.setPureLayerNode(polysilicon_node); // Polysilicon-Node
// sActive_lay.setPureLayerNode(active_node); // Active-Node
// dActive_lay.setPureLayerNode(d_active_node); // D-Active-Node
// select_lay.setPureLayerNode(select_node); // Select-Node
// cut_lay.setPureLayerNode(cut_node); // Cut-Node
// polyCut_lay.setPureLayerNode(polyCut_node); // Poly-Cut-Node
// activeCut_lay.setPureLayerNode(activeCut_node); // Active-Cut-Node
// via_lay.setPureLayerNode(via_node); // Via-Node
// well_lay.setPureLayerNode(well_node); // Well-Node
// passivation_lay.setPureLayerNode(passivation_node); // Passivation-Node
// Information for palette
loadFactoryMenuPalette(RCMOS.class.getResource("rcmosMenu.xml"));
//Foundry
newFoundry(Foundry.Type.NONE, null);
};
}