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

📄 techeditwizarddata.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: TechEditWizardData.java * Create an Electric XML Technology from a simple numeric description of design rules * Written in Perl by Andrew Wewist, translated to Java by Steven Rubin. * * Copyright (c) 2008 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.tecEditWizard;import com.sun.electric.database.text.TextUtils;import com.sun.electric.database.geometry.*;import com.sun.electric.database.geometry.Poly;import com.sun.electric.tool.Job;import com.sun.electric.tool.io.FileType;import com.sun.electric.tool.user.dialogs.OpenFile;import com.sun.electric.technology.*;import java.awt.Color;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.LineNumberReader;import java.io.PrintWriter;import java.net.URL;import java.net.URLConnection;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;/** * Class to handle the "Technology Creation Wizard" dialog. */public class TechEditWizardData{	/************************************** THE DATA **************************************/	private String tech_name;	private String tech_description;	private int num_metal_layers;	private int stepsize;    private boolean pWellFlag = true; // to store if process is a pwell process or not. If true, Tech Creation Wizard will not create pwell layers    private boolean horizontalFlag = true; // to store if transistor gates are aligned horizontally. True by default    // DIFFUSION RULES	private WizardField diff_width = new WizardField();	private WizardField diff_poly_overhang = new WizardField();		// min. diff overhang from gate edge	private WizardField diff_contact_overhang = new WizardField();	// min. diff overhang contact	private WizardField diff_spacing = new WizardField();	// POLY RULES	private WizardField poly_width = new WizardField();	private WizardField poly_endcap = new WizardField();			// min. poly gate extension from edge of diffusion	private WizardField poly_spacing = new WizardField();	private WizardField poly_diff_spacing = new WizardField();		// min. spacing between poly and diffusion	// GATE RULES	private WizardField gate_length = new WizardField();			// min. transistor gate length	private WizardField gate_width = new WizardField();				// min. transistor gate width	private WizardField gate_spacing = new WizardField();			// min. gate to gate spacing on diffusion	private WizardField gate_contact_spacing = new WizardField();	// min. spacing from gate edge to contact inside diffusion	// CONTACT RULES	private WizardField contact_size = new WizardField();	private WizardField contact_spacing = new WizardField();    private WizardField contact_array_spacing = new WizardField();    private WizardField contact_metal_overhang_inline_only = new WizardField();	// metal overhang when overhanging contact from two sides only	private WizardField contact_metal_overhang_all_sides = new WizardField();	// metal overhang when surrounding contact	private WizardField contact_poly_overhang = new WizardField();				// poly overhang contact	private WizardField polycon_diff_spacing = new WizardField();				// spacing between poly-metal contact edge and diffusion	// WELL AND IMPLANT RULES	private WizardField nplus_width = new WizardField();	private WizardField nplus_overhang_diff = new WizardField();	private WizardField nplus_overhang_poly = new WizardField();	private WizardField nplus_spacing = new WizardField();	private WizardField pplus_width = new WizardField();	private WizardField pplus_overhang_diff = new WizardField();	private WizardField pplus_overhang_poly = new WizardField();	private WizardField pplus_spacing = new WizardField();	private WizardField nwell_width = new WizardField();	private WizardField nwell_overhang_diff_p = new WizardField();    private WizardField nwell_overhang_diff_n = new WizardField();    private WizardField nwell_spacing = new WizardField();	// METAL RULES	private WizardField [] metal_width;	private WizardField [] metal_spacing;	// VIA RULES	private WizardField [] via_size;	private WizardField [] via_spacing;	private WizardField [] via_array_spacing;	private WizardField [] via_overhang_inline;	// ANTENNA RULES	private double poly_antenna_ratio;	private double [] metal_antenna_ratio;	// GDS-II LAYERS	private int gds_diff_layer;	private int gds_poly_layer;	private int gds_nplus_layer;	private int gds_pplus_layer;	private int gds_nwell_layer;	private int gds_contact_layer;	private int [] gds_metal_layer;	private int [] gds_via_layer;	private int gds_marking_layer;		// Device marking layer	public TechEditWizardData()	{		stepsize = 100;		num_metal_layers = 2;		metal_width = new WizardField[num_metal_layers];		metal_spacing = new WizardField[num_metal_layers];		via_size = new WizardField[num_metal_layers-1];		via_spacing = new WizardField[num_metal_layers-1];		via_array_spacing = new WizardField[num_metal_layers-1];		via_overhang_inline = new WizardField[num_metal_layers-1];		metal_antenna_ratio = new double[num_metal_layers];		gds_metal_layer = new int[num_metal_layers];		gds_via_layer = new int[num_metal_layers-1];		for(int i=0; i<num_metal_layers; i++)		{			metal_width[i] = new WizardField();			metal_spacing[i] = new WizardField();		}		for(int i=0; i<num_metal_layers-1; i++)		{			via_size[i] = new WizardField();			via_spacing[i] = new WizardField();			via_array_spacing[i] = new WizardField();			via_overhang_inline[i] = new WizardField();		}	}	/************************************** ACCESSOR METHODS **************************************/	public String getTechName() { return tech_name; }	public void setTechName(String s) { tech_name = s; }	public String getTechDescription() { return tech_description; }	public void setTechDescription(String s) { tech_description = s; }	public int getStepSize() { return stepsize; }	public void setStepSize(int n) { stepsize = n; }    public int getNumMetalLayers() { return num_metal_layers; }	public void setNumMetalLayers(int n)	{		int smallest = Math.min(n, num_metal_layers);		WizardField [] new_metal_width = new WizardField[n];		for(int i=0; i<smallest; i++) new_metal_width[i] = metal_width[i];		for(int i=smallest; i<n; i++) new_metal_width[i] = new WizardField();		metal_width = new_metal_width;		WizardField [] new_metal_spacing = new WizardField[n];		for(int i=0; i<smallest; i++) new_metal_spacing[i] = metal_spacing[i];		for(int i=smallest; i<n; i++) new_metal_spacing[i] = new WizardField();		metal_spacing = new_metal_spacing;		WizardField [] new_via_size = new WizardField[n-1];		for(int i=0; i<smallest-1; i++) new_via_size[i] = via_size[i];		for(int i=smallest-1; i<n-1; i++) new_via_size[i] = new WizardField();		via_size = new_via_size;		WizardField [] new_via_spacing = new WizardField[n-1];		for(int i=0; i<smallest-1; i++) new_via_spacing[i] = via_spacing[i];		for(int i=smallest-1; i<n-1; i++) new_via_spacing[i] = new WizardField();		via_spacing = new_via_spacing;		WizardField [] new_via_array_spacing = new WizardField[n-1];		for(int i=0; i<smallest-1; i++) new_via_array_spacing[i] = via_array_spacing[i];		for(int i=smallest-1; i<n-1; i++) new_via_array_spacing[i] = new WizardField();		via_array_spacing = new_via_array_spacing;		WizardField [] new_via_overhang_inline = new WizardField[n-1];		for(int i=0; i<smallest-1; i++) new_via_overhang_inline[i] = via_overhang_inline[i];		for(int i=smallest-1; i<n-1; i++) new_via_overhang_inline[i] = new WizardField();		via_overhang_inline = new_via_overhang_inline;		double [] new_metal_antenna_ratio = new double[n];		for(int i=0; i<smallest; i++) new_metal_antenna_ratio[i] = metal_antenna_ratio[i];		metal_antenna_ratio = new_metal_antenna_ratio;		int [] new_gds_metal_layer = new int[n];		for(int i=0; i<smallest; i++) new_gds_metal_layer[i] = gds_metal_layer[i];		gds_metal_layer = new_gds_metal_layer;		int [] new_gds_via_layer = new int[n-1];		for(int i=0; i<smallest-1; i++) new_gds_via_layer[i] = gds_via_layer[i];		gds_via_layer = new_gds_via_layer;		num_metal_layers = n;	}    // Flags    boolean getPWellProcess() { return pWellFlag;}    void setPWellProcess(boolean b) { pWellFlag = b; }    boolean getHorizontalTransistors() { return horizontalFlag;}    void setHorizontalTransistors(boolean b) { horizontalFlag = b; }    // DIFFUSION RULES	WizardField getDiffWidth() { return diff_width; }	void setDiffWidth(WizardField v) { diff_width = v; }	WizardField getDiffPolyOverhang() { return diff_poly_overhang; }	void setDiffPolyOverhang(WizardField v) { diff_poly_overhang = v; }	WizardField getDiffContactOverhang() { return diff_contact_overhang; }	void setDiffContactOverhang(WizardField v) { diff_contact_overhang = v; }	WizardField getDiffSpacing() { return diff_spacing; }	void setDiffSpacing(WizardField v) { diff_spacing = v; }	// POLY RULES	WizardField getPolyWidth() { return poly_width; }	void setPolyWidth(WizardField v) { poly_width = v; }	WizardField getPolyEndcap() { return poly_endcap; }	void setPolyEndcap(WizardField v) { poly_endcap = v; }	WizardField getPolySpacing() { return poly_spacing; }	void setPolySpacing(WizardField v) { poly_spacing = v; }	WizardField getPolyDiffSpacing() { return poly_diff_spacing; }	void setPolyDiffSpacing(WizardField v) { poly_diff_spacing = v; }	// GATE RULES	WizardField getGateLength() { return gate_length; }	void setGateLength(WizardField v) { gate_length = v; }	WizardField getGateWidth() { return gate_width; }	void setGateWidth(WizardField v) { gate_width = v; }	WizardField getGateSpacing() { return gate_spacing; }	void setGateSpacing(WizardField v) { gate_spacing = v; }	WizardField getGateContactSpacing() { return gate_contact_spacing; }	void setGateContactSpacing(WizardField v) { gate_contact_spacing = v; }    // CONTACT RULES	WizardField getContactSize() { return contact_size; }	void setContactSize(WizardField v) { contact_size = v; }	WizardField getContactSpacing() { return contact_spacing; }	void setContactSpacing(WizardField v) { contact_spacing = v; }    WizardField getContactArraySpacing() { return contact_array_spacing; }	void setContactArraySpacing(WizardField v) { contact_array_spacing = v; }    WizardField getContactMetalOverhangInlineOnly() { return contact_metal_overhang_inline_only; }	void setContactMetalOverhangInlineOnly(WizardField v) { contact_metal_overhang_inline_only = v; }	WizardField getContactMetalOverhangAllSides() { return contact_metal_overhang_all_sides; }	void setContactMetalOverhangAllSides(WizardField v) { contact_metal_overhang_all_sides = v; }	WizardField getContactPolyOverhang() { return contact_poly_overhang; }	void setContactPolyOverhang(WizardField v) { contact_poly_overhang = v; }	WizardField getPolyconDiffSpacing() { return polycon_diff_spacing; }	void setPolyconDiffSpacing(WizardField v) { polycon_diff_spacing = v; }	// WELL AND IMPLANT RULES	WizardField getNPlusWidth() { return nplus_width; }	void setNPlusWidth(WizardField v) { nplus_width = v; }	WizardField getNPlusOverhangDiff() { return nplus_overhang_diff; }

⌨️ 快捷键说明

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