📄 techeditwizarddata.java
字号:
void setNPlusOverhangDiff(WizardField v) { nplus_overhang_diff = v; } WizardField getNPlusOverhangPoly() { return nplus_overhang_poly; } void setNPlusOverhangPoly(WizardField v) { nplus_overhang_poly = v; } WizardField getNPlusSpacing() { return nplus_spacing; } void setNPlusSpacing(WizardField v) { nplus_spacing = v; } WizardField getPPlusWidth() { return pplus_width; } void setPPlusWidth(WizardField v) { pplus_width = v; } WizardField getPPlusOverhangDiff() { return pplus_overhang_diff; } void setPPlusOverhangDiff(WizardField v) { pplus_overhang_diff = v; } WizardField getPPlusOverhangPoly() { return pplus_overhang_poly; } void setPPlusOverhangPoly(WizardField v) { pplus_overhang_poly = v; } WizardField getPPlusSpacing() { return pplus_spacing; } void setPPlusSpacing(WizardField v) { pplus_spacing = v; } WizardField getNWellWidth() { return nwell_width; } void setNWellWidth(WizardField v) { nwell_width = v; } WizardField getNWellOverhangDiffP() { return nwell_overhang_diff_p; } void setNWellOverhangDiffP(WizardField v) { nwell_overhang_diff_p = v; } WizardField getNWellOverhangDiffN() { return nwell_overhang_diff_n; } void setNWellOverhangDiffN(WizardField v) { nwell_overhang_diff_n = v; } WizardField getNWellSpacing() { return nwell_spacing; } void setNWellSpacing(WizardField v) { nwell_spacing = v; } // METAL RULES WizardField [] getMetalWidth() { return metal_width; } void setMetalWidth(int met, WizardField value) { metal_width[met] = value; } WizardField [] getMetalSpacing() { return metal_spacing; } void setMetalSpacing(int met, WizardField value) { metal_spacing[met] = value; } // VIA RULES WizardField [] getViaSize() { return via_size; } void setViaSize(int via, WizardField value) { via_size[via] = value; } WizardField [] getViaSpacing() { return via_spacing; } void setViaSpacing(int via, WizardField value) { via_spacing[via] = value; } WizardField [] getViaArraySpacing() { return via_array_spacing; } void setViaArraySpacing(int via, WizardField value) { via_array_spacing[via] = value; } WizardField [] getViaOverhangInline() { return via_overhang_inline; } void setViaOverhangInline(int via, WizardField value) { via_overhang_inline[via] = value; } // ANTENNA RULES public double getPolyAntennaRatio() { return poly_antenna_ratio; } void setPolyAntennaRatio(double v) { poly_antenna_ratio = v; } public double [] getMetalAntennaRatio() { return metal_antenna_ratio; } void setMetalAntennaRatio(int met, double value) { metal_antenna_ratio[met] = value; } // GDS-II LAYERS int getGDSDiff() { return gds_diff_layer; } void setGDSDiff(int l) { gds_diff_layer = l; } int getGDSPoly() { return gds_poly_layer; } void setGDSPoly(int l) { gds_poly_layer = l; } int getGDSNPlus() { return gds_nplus_layer; } void setGDSNPlus(int l) { gds_nplus_layer = l; } int getGDSPPlus() { return gds_pplus_layer; } void setGDSPPlus(int l) { gds_pplus_layer = l; } int getGDSNWell() { return gds_nwell_layer; } void setGDSNWell(int l) { gds_nwell_layer = l; } int getGDSContact() { return gds_contact_layer; } void setGDSContact(int l) { gds_contact_layer = l; } int [] getGDSMetal() { return gds_metal_layer; } void setGDSMetal(int met, int l) { gds_metal_layer[met] = l; } int [] getGDSVia() { return gds_via_layer; } void setGDSVia(int via, int l) { gds_via_layer[via] = l; } int getGDSMarking() { return gds_marking_layer; } void setGDSMarking(int l) { gds_marking_layer = l; } private String errorInData() { // check the General data if (tech_name == null || tech_name.length() == 0) return "General panel: No technology name"; if (stepsize == 0) return "General panel: Invalid unit size"; // check the Active data if (diff_width.v == 0) return "Active panel: Invalid width"; // check the Poly data if (poly_width.v == 0) return "Poly panel: Invalid width"; // check the Gate data if (gate_width.v == 0) return "Gate panel: Invalid width"; if (gate_length.v == 0) return "Gate panel: Invalid length"; // check the Contact data if (contact_size.v == 0) return "Contact panel: Invalid size"; // check the Well/Implant data if (nplus_width.v == 0) return "Well/Implant panel: Invalid NPlus width"; if (pplus_width.v == 0) return "Well/Implant panel: Invalid PPlus width"; if (nwell_width.v == 0) return "Well/Implant panel: Invalid NWell width"; // check the Metal data for(int i=0; i<num_metal_layers; i++) if (metal_width[i].v == 0) return "Metal panel: Invalid Metal-" + (i+1) + " width"; // check the Via data for(int i=0; i<num_metal_layers-1; i++) if (via_size[i].v == 0) return "Via panel: Invalid Via-" + (i+1) + " size"; return null; } /************************************** IMPORT RAW NUMBERS FROM DISK **************************************/ /** * Method to import data from a file to this object. * @return true on success; false on failure. */ boolean importData() { String fileName = OpenFile.chooseInputFile(FileType.ANY, "Technology Wizard File"); if (fileName == null) return false; return importData(fileName); } /** * Method to import data from a given file to this object. It is also in the regression so * keep the access. * @param fileName the name of the file to import. * @return true on success; false on failure. */ public boolean importData(String fileName) { URL url = TextUtils.makeURLToFile(fileName); try { URLConnection urlCon = url.openConnection(); InputStreamReader is = new InputStreamReader(urlCon.getInputStream()); LineNumberReader lineReader = new LineNumberReader(is); for(;;) { String buf = lineReader.readLine(); if (buf == null) break; buf = buf.trim(); if (buf.length() == 0 || buf.startsWith("#")) continue; // parse the assignment if (buf.startsWith("$") || buf.startsWith("@")) { int spacePos = buf.indexOf(' '); int equalsPos = buf.indexOf('='); if (equalsPos < 0) { Job.getUserInterface().showErrorMessage("Missing '=' on line " + lineReader.getLineNumber(), "Syntax Error In Technology File"); break; } if (spacePos < 0) spacePos = equalsPos; else spacePos = Math.min(spacePos, equalsPos); String varName = buf.substring(1, spacePos); int semiPos = buf.indexOf(';'); if (semiPos < 0) { Job.getUserInterface().showErrorMessage("Missing ';' on line " + lineReader.getLineNumber(), "Syntax Error In Technology File"); break; } equalsPos++; while (equalsPos < semiPos && buf.charAt(equalsPos) == ' ') equalsPos++; String varValue = buf.substring(equalsPos, semiPos); // now figure out what to assign if (varName.equalsIgnoreCase("tech_libname")) { } else if (varName.equalsIgnoreCase("tech_name")) setTechName(stripQuotes(varValue)); else if (varName.equalsIgnoreCase("tech_description")) setTechDescription(stripQuotes(varValue)); else if (varName.equalsIgnoreCase("num_metal_layers")) setNumMetalLayers(TextUtils.atoi(varValue)); else if (varName.equalsIgnoreCase("pwell_process")) setPWellProcess(Boolean.valueOf(varValue)); else if (varName.equalsIgnoreCase("horizontal_transistors")) setHorizontalTransistors(Boolean.valueOf(varValue)); else if (varName.equalsIgnoreCase("stepsize")) setStepSize(TextUtils.atoi(varValue)); else if (varName.equalsIgnoreCase("diff_width")) diff_width.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("diff_width_rule")) diff_width.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("diff_poly_overhang")) diff_poly_overhang.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("diff_poly_overhang_rule")) diff_poly_overhang.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("diff_contact_overhang")) diff_contact_overhang.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("diff_contact_overhang_rule")) diff_contact_overhang.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("diff_spacing")) diff_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("diff_spacing_rule")) diff_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("poly_width")) poly_width.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("poly_width_rule")) poly_width.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("poly_endcap")) poly_endcap.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("poly_endcap_rule")) poly_endcap.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("poly_spacing")) poly_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("poly_spacing_rule")) poly_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("poly_diff_spacing")) poly_diff_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("poly_diff_spacing_rule")) poly_diff_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("gate_length")) gate_length.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("gate_length_rule")) gate_length.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("gate_width")) gate_width.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("gate_width_rule")) gate_width.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("gate_spacing")) gate_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("gate_spacing_rule")) gate_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("gate_contact_spacing")) gate_contact_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("gate_contact_spacing_rule")) gate_contact_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("contact_size")) contact_size.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("contact_size_rule")) contact_size.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("contact_spacing")) contact_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("contact_spacing_rule")) contact_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("contact_array_spacing")) contact_array_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("contact_array_spacing_rule")) contact_array_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("contact_metal_overhang_inline_only")) contact_metal_overhang_inline_only.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("contact_metal_overhang_inline_only_rule")) contact_metal_overhang_inline_only.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("contact_metal_overhang_all_sides")) contact_metal_overhang_all_sides.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("contact_metal_overhang_all_sides_rule")) contact_metal_overhang_all_sides.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("contact_poly_overhang")) contact_poly_overhang.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("contact_poly_overhang_rule")) contact_poly_overhang.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("polycon_diff_spacing")) polycon_diff_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("polycon_diff_spacing_rule")) polycon_diff_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("nplus_width")) nplus_width.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("nplus_width_rule")) nplus_width.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("nplus_overhang_diff")) nplus_overhang_diff.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("nplus_overhang_diff_rule")) nplus_overhang_diff.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("nplus_overhang_poly")) nplus_overhang_poly.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("nplus_overhang_poly_rule")) nplus_overhang_poly.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("nplus_spacing")) nplus_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("nplus_spacing_rule")) nplus_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("pplus_width")) pplus_width.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("pplus_width_rule")) pplus_width.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("pplus_overhang_diff")) pplus_overhang_diff.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("pplus_overhang_diff_rule")) pplus_overhang_diff.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("pplus_overhang_poly")) pplus_overhang_poly.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("pplus_overhang_poly_rule")) pplus_overhang_poly.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("pplus_spacing")) pplus_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("pplus_spacing_rule")) pplus_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("nwell_width")) nwell_width.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("nwell_width_rule")) nwell_width.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("nwell_overhang_diff_p")) nwell_overhang_diff_p.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("nwell_overhang_diff_rule_p")) nwell_overhang_diff_p.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("nwell_overhang_diff_n")) nwell_overhang_diff_n.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("nwell_overhang_diff_rule_n")) nwell_overhang_diff_n.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("nwell_spacing")) nwell_spacing.v = TextUtils.atof(varValue); else if (varName.equalsIgnoreCase("nwell_spacing_rule")) nwell_spacing.rule = stripQuotes(varValue); else if (varName.equalsIgnoreCase("metal_width")) fillWizardArray(varValue, metal_width, num_metal_layers, false); else if (varName.equalsIgnoreCase("metal_width_rule")) fillWizardArray(varValue, metal_width, num_metal_layers, true); else if (varName.equalsIgnoreCase("metal_spacing")) fillWizardArray(varValue, metal_spacing, num_metal_layers, false); else if (varName.equalsIgnoreCase("metal_spacing_rule")) fillWizardArray(varValue, metal_spacing, num_metal_layers, true); else if (varName.equalsIgnoreCase("via_size")) fillWizardArray(varValue, via_size, num_metal_layers-1, false); else if (varName.equalsIgnoreCase("via_size_rule")) fillWizardArray(varValue, via_size, num_metal_layers-1, true); else if (varName.equalsIgnoreCase("via_spacing")) fillWizardArray(varValue, via_spacing, num_metal_layers-1, false); else if (varName.equalsIgnoreCase("via_spacing_rule")) fillWizardArray(varValue, via_spacing, num_metal_layers-1, true); else if (varName.equalsIgnoreCase("via_array_spacing")) fillWizardArray(varValue, via_array_spacing, num_metal_layers-1, false); else if (varName.equalsIgnoreCase("via_array_spacing_rule")) fillWizardArray(varValue, via_array_spacing, num_metal_layers-1, true); else if (varName.equalsIgnoreCase("via_overhang_inline")) fillWizardArray(varValue, via_overhang_inline, num_metal_layers-1, false); else if (varName.equalsIgnoreCase("via_overhang_inline_rule")) fillWizardArray(varValue, via_overhang_inline, num_metal_layers-1, true); else if (varName.equalsIgnoreCase("poly_antenna_ratio")) setPolyAntennaRatio(TextUtils.atof(varValue)); else if (varName.equalsIgnoreCase("metal_antenna_ratio")) metal_antenna_ratio = makeDoubleArray(varValue); else if (varName.equalsIgnoreCase("gds_diff_layer")) setGDSDiff(TextUtils.atoi(varValue)); else if (varName.equalsIgnoreCase("gds_poly_layer")) setGDSPoly(TextUtils.atoi(varValue)); else if (varName.equalsIgnoreCase("gds_nplus_layer")) setGDSNPlus(TextUtils.atoi(varValue)); else if (varName.equalsIgnoreCase("gds_pplus_layer")) setGDSPPlus(TextUtils.atoi(varValue)); else if (varName.equalsIgnoreCase("gds_nwell_layer")) setGDSNWell(TextUtils.atoi(varValue)); else if (varName.equalsIgnoreCase("gds_contact_layer")) setGDSContact(TextUtils.atoi(varValue)); else if (varName.equalsIgnoreCase("gds_metal_layer")) gds_metal_layer = makeIntArray(varValue); else if (varName.equalsIgnoreCase("gds_via_layer")) gds_via_layer = makeIntArray(varValue); else if (varName.equalsIgnoreCase("gds_marking_layer")) setGDSMarking(TextUtils.atoi(varValue)); else { Job.getUserInterface().showErrorMessage("Unknown keyword '" + varName + "' on line " + lineReader.getLineNumber(), "Syntax Error In Technology File"); break; } } } lineReader.close(); } catch (IOException e) { System.out.println("Error reading " + fileName); return false; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -