/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: GeneralInfo.java * Technology Editor, general factors information * Written by Steven M. Rubin, Sun Microsystems. * * Copyright (c) 2005 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.tool.user.tecEdit; import com.sun.electric.database.hierarchy.Cell; import com.sun.electric.database.text.TextUtils; import com.sun.electric.database.topology.NodeInst; import com.sun.electric.database.variable.Variable; import com.sun.electric.technology.Xml; import java.awt.Color; /** * This class defines general information about a technology in the Technology Editor. */ public class GeneralInfo extends Info { /** the short name of the technology */ String shortName; /** true if technology is "non-electrical" */ boolean nonElectrical; /** the scale factor of the technology */ double scale; /** is scale factor relvant */ boolean scaleRelevant; /** factory resolution */ double resolution; /** default foundry name of the technology */ String defaultFoundry; /** default number of metals */ int defaultNumMetals; /** the full description of the technology */ String description; /** minimum resistance/capacitance */ double minRes, minCap; /** max series resistance */ double maxSeriesResistance; /** gate shrinkage for the technology */ double gateShrinkage; /** true to include gates in resistance calc */ boolean includeGateInResistance; /** true to include ground in parasitics */ boolean includeGround; /** Logical effort gate capacitance preference. */double gateCapacitance; /** Logical effort wire ratio preference. */ double wireRatio; /** Logical effort diff alpha preference. */ double diffAlpha; /** the transparent colors in the technology */ Color [] transparentColors; /** spice level 1 header */ String [] spiceLevel1Header; /** spice level 2 header */ String [] spiceLevel2Header; /** spice level 3 header */ String [] spiceLevel3Header; /** spacing of connected polys */ double [] conDist; /** spacing of non-connected polys */ double [] unConDist; /** menu palette */ Xml.MenuPalette menuPalette; static SpecialTextDescr [] genTextTable = { new SpecialTextDescr(0, 12, TECHSHORTNAME), new SpecialTextDescr(0, 9, TECHSCALE), new SpecialTextDescr(0, 6, TECHFOUNDRY), new SpecialTextDescr(0, 3, TECHDEFMETALS), new SpecialTextDescr(0, 0, TECHDESCRIPT), new SpecialTextDescr(0, -3, TECHSPICEMINRES), new SpecialTextDescr(0, -6, TECHSPICEMINCAP), new SpecialTextDescr(0, -9, TECHMAXSERIESRES), new SpecialTextDescr(0, -12, TECHGATESHRINK), new SpecialTextDescr(0, -15, TECHGATEINCLUDED), new SpecialTextDescr(0, -18, TECHGROUNDINCLUDED), new SpecialTextDescr(0, -21, TECHTRANSPCOLORS), }; /** * Method to build the appropriate descriptive information for a layer into * cell "np". The color is "colorindex"; the stipple array is in "stip"; the * layer style is in "style", the CIF layer is in "ciflayer"; the function is * in "functionindex"; the Calma GDS-II layer is in "gds"; the SPICE resistance is in "spires", * the SPICE capacitance is in "spicap", the SPICE edge capacitance is in "spiecap", * the 3D height is in "height3d", and the 3D thickness is in "thick3d". */ void generate(Cell np) { // load up the structure with the current values loadTableEntry(genTextTable, TECHSHORTNAME, shortName); loadTableEntry(genTextTable, TECHSCALE, Double.valueOf(scale)); loadTableEntry(genTextTable, TECHRESOLUTION, Double.valueOf(resolution)); loadTableEntry(genTextTable, TECHFOUNDRY, defaultFoundry); loadTableEntry(genTextTable, TECHDEFMETALS, Integer.valueOf(defaultNumMetals)); loadTableEntry(genTextTable, TECHDESCRIPT, description); loadTableEntry(genTextTable, TECHSPICEMINRES, Double.valueOf(minRes)); loadTableEntry(genTextTable, TECHSPICEMINCAP, Double.valueOf(minCap)); loadTableEntry(genTextTable, TECHMAXSERIESRES, Double.valueOf(maxSeriesResistance)); loadTableEntry(genTextTable, TECHGATESHRINK, Double.valueOf(gateShrinkage)); loadTableEntry(genTextTable, TECHGATEINCLUDED, Boolean.valueOf(includeGateInResistance)); loadTableEntry(genTextTable, TECHGROUNDINCLUDED, Boolean.valueOf(includeGround)); loadTableEntry(genTextTable, TECHTRANSPCOLORS, transparentColors); // now create those text objects createSpecialText(np, genTextTable); } /** * Method to get the transparent color information from a NodeInst. * @param ni the NodeInst to examine. * @return an array of Color values. Returns null if no such data exists on the NodeInst. */ public static Color[] getTransparentColors(NodeInst ni) { int opt = Manipulate.getOptionOnNode(ni); if (opt != TECHTRANSPCOLORS) return null; Variable var = ni.getVar(TRANSLAYER_KEY); String transparentColorsStr = (String)var.getObject(); int colon = transparentColorsStr.indexOf(':'); if (colon >= 0) transparentColorsStr = transparentColorsStr.substring(colon + 1); if (var == null) return null; Color [] colors = TextUtils.getTransparentColors(transparentColorsStr); return colors; } static String makeTransparentColorsLine(Color [] trans) { String str = "The Transparent Colors: "; for(int j=0; j<trans.length; j++) { if (j != 0) str += " /"; str += " " + trans[j].getRed() + "," + trans[j].getGreen() + "," + trans[j].getBlue(); } return str; } }