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

📄 techeditwizarddata.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		{			if (i > 0) pw.print(", ");			pw.print("\"" + via_overhang_inline[i].rule + "\"");		}		pw.println(");");		pw.println();		pw.println("######  ANTENNA RULES  #####");		pw.println("$poly_antenna_ratio = " + TextUtils.formatDouble(poly_antenna_ratio) + ";");		pw.print("@metal_antenna_ratio = (");		for(int i=0; i<num_metal_layers; i++)		{			if (i > 0) pw.print(", ");			pw.print(TextUtils.formatDouble(metal_antenna_ratio[i]));		}		pw.println(");");		pw.println();		pw.println("######  GDS-II LAYERS  #####");		pw.println("$gds_diff_layer = " + gds_diff_layer + ";");		pw.println("$gds_poly_layer = " + gds_poly_layer + ";");		pw.println("$gds_nplus_layer = " + gds_nplus_layer + ";");		pw.println("$gds_pplus_layer = " + gds_pplus_layer + ";");		pw.println("$gds_nwell_layer = " + gds_nwell_layer + ";");		pw.println("$gds_contact_layer = " + gds_contact_layer + ";");		pw.print("@gds_metal_layer = (");		for(int i=0; i<num_metal_layers; i++)		{			if (i > 0) pw.print(", ");			pw.print(gds_metal_layer[i]);		}		pw.println(");");		pw.print("@gds_via_layer = (");		for(int i=0; i<num_metal_layers-1; i++)		{			if (i > 0) pw.print(", ");			pw.print(gds_via_layer[i]);		}		pw.println(");");		pw.println();		pw.println("## Device marking layer");		pw.println("$gds_marking_layer = " + gds_marking_layer + ";");		pw.println();		pw.println("# End of techfile");	}	/************************************** WRITE XML FILE **************************************/	void writeXML()	{		String errorMessage = errorInData();		if (errorMessage != null)		{			Job.getUserInterface().showErrorMessage("ERROR: " + errorMessage,				"Missing Technology Data");			return;		}		String fileName = OpenFile.chooseOutputFile(FileType.XML, "Technology XML File", "Technology.xml");		if (fileName == null) return;		try		{            dumpXMLFile(fileName);		} catch (IOException e)		{			System.out.println("Error writing XML file");			return;		}	}    /**     * Method to create the XML version of a PrimitiveNode representing a pin     * @return     */    private Xml.PrimitiveNode makeXmlPrimitivePin(List<Xml.PrimitiveNode> nodes, String name, double size,                                                  SizeOffset so, Xml.NodeLayer... list)    {        List<Xml.NodeLayer> nodesList = new ArrayList<Xml.NodeLayer>(list.length);        List<Xml.PrimitivePort> nodePorts = new ArrayList<Xml.PrimitivePort>();        List<String> portNames = new ArrayList<String>();        for (Xml.NodeLayer lb : list)        {            if (lb == null) continue; // in case the pwell layer off            nodesList.add(lb);        }        portNames.add(name);        nodePorts.add(makeXmlPrimitivePort(name.toLowerCase(), 0, 180, 0, null, 0, 0, 0, 0, portNames));        return makeXmlPrimitive(nodes, name + "-Pin", PrimitiveNode.Function.PIN, size, size, 0, 0,                so, nodesList, nodePorts, null, true);    }    /**     * Method to creat the XML version of a PrimitiveNode representing a contact     * @return     */    private Xml.PrimitiveNode makeXmlPrimitiveCon(List<Xml.PrimitiveNode> nodes, String name, double size,                                                  SizeOffset so, List<String> portNames, Xml.NodeLayer... list)    {        List<Xml.NodeLayer> nodesList = new ArrayList<Xml.NodeLayer>(list.length);        List<Xml.PrimitivePort> nodePorts = new ArrayList<Xml.PrimitivePort>();        for (Xml.NodeLayer lb : list)        {            if (lb == null) continue; // in case the pwell layer off            nodesList.add(lb);        }        nodePorts.add(makeXmlPrimitivePort(name.toLowerCase(), 0, 180, 0, null, 0, 0, 0, 0, portNames));        return makeXmlPrimitive(nodes, name + "-Con", PrimitiveNode.Function.CONTACT, size, size, 0, 0,                so, nodesList, nodePorts, null, false);    }    /**     * Method to create the XML version of a PrimitiveNode     * @return     */    private Xml.PrimitiveNode makeXmlPrimitive(List<Xml.PrimitiveNode> nodes,                                               String name, PrimitiveNode.Function function,                                               double width, double height,                                               double ppLeft, double ppBottom,                                               SizeOffset so, List<Xml.NodeLayer> nodeLayers,                                               List<Xml.PrimitivePort> nodePorts,                                               PrimitiveNode.NodeSizeRule nodeSizeRule, boolean isArcsShrink)    {        Xml.PrimitiveNode n = new Xml.PrimitiveNode();        n.name = name;        n.function = function;        n.shrinkArcs = isArcsShrink;//        n.square = isSquare();//        n.canBeZeroSize = isCanBeZeroSize();//        n.wipes = isWipeOn1or2();//        n.lockable = isLockedPrim();//        n.edgeSelect = isEdgeSelect();//        n.skipSizeInPalette = isSkipSizeInPalette();//        n.notUsed = isNotUsed();//        n.lowVt = isNodeBitOn(PrimitiveNode.LOWVTBIT);//        n.highVt = isNodeBitOn(PrimitiveNode.HIGHVTBIT);//        n.nativeBit  = isNodeBitOn(PrimitiveNode.NATIVEBIT);//        n.od18 = isNodeBitOn(PrimitiveNode.OD18BIT);//        n.od25 = isNodeBitOn(PrimitiveNode.OD25BIT);//        n.od33 = isNodeBitOn(PrimitiveNode.OD33BIT);//        PrimitiveNode.NodeSizeRule nodeSizeRule = getMinSizeRule();//        EPoint minFullSize = nodeSizeRule != null ?//            EPoint.fromLambda(0.5*nodeSizeRule.getWidth(), 0.5*nodeSizeRule.getHeight()) ://            EPoint.fromLambda(0.5*getDefWidth(), 0.5*getDefHeight());         EPoint minFullSize = EPoint.fromLambda(0.5*width, 0.5*height);        EPoint topLeft = EPoint.fromLambda(ppLeft, ppBottom + height);        EPoint size =  EPoint.fromLambda(width, height);        double getDefWidth = width, getDefHeight = height;        if (function == PrimitiveNode.Function.PIN && isArcsShrink) {//            assert getNumPorts() == 1;//            assert nodeSizeRule == null;//            PrimitivePort pp = getPort(0);//            assert pp.getLeft().getMultiplier() == -0.5 && pp.getRight().getMultiplier() == 0.5 && pp.getBottom().getMultiplier() == -0.5 && pp.getTop().getMultiplier() == 0.5;//            assert pp.getLeft().getAdder() == -pp.getRight().getAdder() && pp.getBottom().getAdder() == -pp.getTop().getAdder();            minFullSize = EPoint.fromLambda(ppLeft, ppBottom);        }//            DRCTemplate nodeSize = xmlRules.getRule(pnp.getPrimNodeIndexInTech(), DRCTemplate.DRCRuleType.NODSIZ);//        SizeOffset so = getProtoSizeOffset();        if (so != null &&            (so.getLowXOffset() == 0 && so.getHighXOffset() == 0 &&                so.getLowYOffset() == 0 && so.getHighYOffset() == 0))            so = null;        n.sizeOffset = so;//        if (!minFullSize.equals(EPoint.ORIGIN))//            n.diskOffset = minFullSize;//        if (so != null) {//            EPoint p2 = EPoint.fromGrid(//                    minFullSize.getGridX() - ((so.getLowXGridOffset() + so.getHighXGridOffset()) >> 1),//                    minFullSize.getGridY() - ((so.getLowYGridOffset() + so.getHighYGridOffset()) >> 1));//            n.diskOffset.put(Integer.valueOf(1), minFullSize);//            n.diskOffset.put(Integer.valueOf(2), p2);//            n.diskOffset.put(Integer.valueOf(2), minFullSize);//        }//        n.defaultWidth.addLambda(DBMath.round(getDefWidth)); // - 2*minFullSize.getLambdaX());//        n.defaultHeight.addLambda(DBMath.round(getDefHeight)); // - 2*minFullSize.getLambdaY());        ERectangle baseRectangle = ERectangle.fromGrid(topLeft.getGridX(), topLeft.getGridY(),            size.getGridX(), size.getGridY());/*        n.nodeBase = baseRectangle;*///        List<Technology.NodeLayer> nodeLayers = Arrays.asList(getLayers());//        List<Technology.NodeLayer> electricalNodeLayers = nodeLayers;//        if (getElectricalLayers() != null)//            electricalNodeLayers = Arrays.asList(getElectricalLayers());        boolean isSerp = false; //getSpecialType() == PrimitiveNode.SERPTRANS;        if (nodeLayers != null)            n.nodeLayers.addAll(nodeLayers);//        int m = 0;//        for (Technology.NodeLayer nld: electricalNodeLayers) {//            int j = nodeLayers.indexOf(nld);//            if (j < 0) {//                n.nodeLayers.add(nld.makeXml(isSerp, minFullSize, false, true));//                continue;//            }//            while (m < j)//                n.nodeLayers.add(nodeLayers.get(m++).makeXml(isSerp, minFullSize, true, false));//            n.nodeLayers.add(nodeLayers.get(m++).makeXml(isSerp, minFullSize, true, true));//        }//        while (m < nodeLayers.size())//            n.nodeLayers.add(nodeLayers.get(m++).makeXml(isSerp, minFullSize, true, false));//        for (Iterator<PrimitivePort> pit = getPrimitivePorts(); pit.hasNext(); ) {//            PrimitivePort pp = pit.next();//            n.ports.add(pp.makeXml(minFullSize));//        }        n.specialType = PrimitiveNode.NORMAL; // getSpecialType();//        if (getSpecialValues() != null)//            n.specialValues = getSpecialValues().clone();        if (nodeSizeRule != null) {            n.nodeSizeRule = new Xml.NodeSizeRule();            n.nodeSizeRule.width = nodeSizeRule.getWidth();            n.nodeSizeRule.height = nodeSizeRule.getHeight();            n.nodeSizeRule.rule = nodeSizeRule.getRuleName();        }//        n.spiceTemplate = "";//getSpiceTemplate();        // ports        n.ports.addAll(nodePorts);        nodes.add(n);        return n;    }    /**     * Method to create the XML version of a ArcProto     * @param name     * @param function     * @return     */    private Xml.ArcProto makeXmlArc(List<Xml.ArcProto> arcs, String name, com.sun.electric.technology.ArcProto.Function function,                                    double ant, Xml.ArcLayer ... arcLayers)    {        Xml.ArcProto a = new Xml.ArcProto();        a.name = name;        a.function = function;        a.wipable = true;//        a.curvable = false;//        a.special = false;//        a.notUsed = false;//        a.skipSizeInPalette = false;//        a.elibWidthOffset = getLambdaElibWidthOffset();        a.extended = true;        a.fixedAngle = true;        a.angleIncrement = 90;        a.antennaRatio = DBMath.round(ant);        for (Xml.ArcLayer al: arcLayers)        {            if (al == null) continue; // in case the pwell layer off            a.arcLayers.add(al);        }        arcs.add(a);        return a;    }    /**     * Method to create the XML version of a Layer.     * @return     */    private Xml.Layer makeXmlLayer(List<Xml.Layer> layers, Map<Xml.Layer, WizardField> layer_width, String name,                                   Layer.Function function, int extraf, EGraphics graph, char cifLetter,                                   WizardField width, boolean pureLayerNode, boolean pureLayerPortArc) {        Xml.Layer l = new Xml.Layer();        l.name = name;        l.function = function;        l.extraFunction = extraf;        l.desc = graph;        l.thick3D = 1;        l.height3D = 1;        l.mode3D = "NONE";        l.factor3D = 1;        l.cif = "C" + cifLetter + cifLetter;

⌨️ 快捷键说明

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