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

📄 instance.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
字号:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: Instance.java * Written by Jonathan Gainsley, Sun Microsystems. * * Copyright (c) 2003 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. * * Created on November 11, 2003, 4:00 PM */package com.sun.electric.tool.logicaleffort;import com.sun.electric.database.hierarchy.Nodable;import com.sun.electric.database.text.TextUtils;import com.sun.electric.database.variable.VarContext;import java.util.ArrayList;import java.util.Iterator;/** * An Instance represents a logical effort node. * * <p>This should only be used in the context of the Logical Effort Tool. * * @author  gainsley */public class Instance {    /** name of Instance */                         private String name;    /** type of LEGate */                           private Instance.Type type;    /** step-up assigned to this gate */            private float leSU;    /** size (drive strength) of this gate */       private float leX;    /** used for levelizing the design */           private int level;    /** all other pins of Instance */               private ArrayList<Pin> pins;    /** Context */                                  private VarContext context;    /** parallel group number (0 is no group) */    private int parallelGroup;    /** m-factor */                                 private double mfactor;    /** Nodable this instance derived from */       private Nodable no;    /** Type is a typesafe enum class that describes the type of Instance this is */    protected static class Type {        private final String name;        private Type(String name) { this.name = name; }        public String toString() { return name; }        /** NotSizeable */  protected static final Type STATICGATE = new Type("Static Gate");        /** NotSizeable */  protected static final Type LOAD = new Type("Load");        /** NotSizeable */  protected static final Type WIRE = new Type("Wire");        /** LeGate */       protected static final Type LEGATE = new Type("LE Gate");        /** LeKeeper */     protected static final Type LEKEEPER = new Type("LE Keeper");        /** NotSizeable */  protected static final Type CAPACITOR = new Type("Capacitor");    }        /** Creates a new instance of Instance */    protected Instance(String name, Instance.Type type, float leSU, float leX, Nodable no) {        this.name = name;        this.type = type;        this.leSU = leSU;        this.leX = leX;        this.level = 0;        this.no = no;        this.parallelGroup = 0;        this.mfactor = 1;        pins = new ArrayList<Pin>();    }            /** Return list of bidirectional pins; */    protected ArrayList<Pin> getAllPins() { return pins; }    /** Get output pins */    protected ArrayList<Pin> getOutputPins() { return Pin.getOutputPins(pins); }            /** Get input pins */    protected ArrayList getInputPins() { return Pin.getInputPins(pins); }        /** Get inout pins */    protected ArrayList getInoutPins() { return Pin.getInoutPins(pins); }        /** True if this is a sizable gate */    protected boolean isLeGate() {        if (type == Type.LEGATE || type == Type.LEKEEPER)            return true;        return false;    }    /** True if this is a gate */    protected boolean isGate() {        if (type == Type.LEGATE || type == Type.LEKEEPER || type == Type.STATICGATE)            return true;        return false;    }    /** Get Type of leGate */    protected Instance.Type getType() { return type; }	/** Get name of gate */	protected String getName() { return name; }    /** Get the level of the gate */    protected int getLevel() { return level; }    /** Set the level of the gate */    protected void setLevel(int level) { this.level = level; }    /** Get the step-up/delay */    protected float getLeSU() { return leSU; }    /** Set the step-up/delay */    protected void setLeSU(float leSU) { this.leSU = leSU; }    /** Get the size of the gate */    protected float getLeX() { return leX; }    /** Set the size of the gate */    protected void setLeX(float LeX) { this.leX = LeX; }    /** Get VarContext */    protected VarContext getContext() { return context; }    /** Set VarContext */    protected void setContext(VarContext context) { this.context = context; }    /** Get the Nodable */    protected Nodable getNodable() { return no; }    /** Get parallelGroup */    protected int getParallelGroup() { return parallelGroup; }    /** Set parallelGroup */    protected void setParallelGroup(int group) { parallelGroup = group; }    /** Get mfactor */    protected double getMfactor() { return mfactor; }    /** Set mfactor */    protected void setMfactor(double m) { mfactor = m; }    /** Set the pin list */    protected void setPins(ArrayList<Pin> pins) {         this.pins = pins;        if (!isLeGate()) return;        // run some checks if this is an LEGATE        // check that there is only one output pin for an leGate        int outputPinCount = 0;        StringBuffer err = new StringBuffer("LETool leGate '"+name+"' error: more than one output pin: ");        for (Pin p : pins) {            if (p.getDir() == Pin.Dir.OUTPUT) {                outputPinCount++;                err.append(p.getName()+", ");            }        }        if (outputPinCount == 0)            System.out.println("LETool leGate '"+name+"' error: no output pin, or no 'le' logical effort defined on output pin");        if (outputPinCount > 1)            System.out.println(err.substring(0, err.length()-2));    }    protected void print() {        System.out.println(type.toString()+": "+name);        System.out.println("    Size    \t= "+leX);        System.out.println("    Step-up \t= "+leSU);        System.out.println("    Level   \t= "+level);        System.out.println("    Parallel Group\t= "+parallelGroup);        System.out.println("    M Factor\t= "+mfactor);    }    protected void printShortInfo() {        if (mfactor > 1)            System.out.println(type.toString()+": Size="+TextUtils.formatDouble(leX*mfactor, 2)+" (M="+                    TextUtils.formatDouble(mfactor, 1)+"), "+name);        else            System.out.println(type.toString()+": Size="+TextUtils.formatDouble(leX, 2)+", "+name);    }    protected float printLoadInfo(Pin pin, float alpha) {        StringBuffer buf = new StringBuffer();        buf.append(type.toString());        buf.append("\t"+name);        buf.append("\tSize="+TextUtils.formatDouble(leX*mfactor, 2));        buf.append("\tLE="+TextUtils.formatDouble(pin.getLE(), 2));        buf.append("\tM="+TextUtils.formatDouble(mfactor, 2));        float load;        if (pin.getDir() == Pin.Dir.OUTPUT) {            load = (float)(leX*pin.getLE()*mfactor*alpha);            buf.append("\tAlpha="+alpha);            buf.append("\tLoad="+TextUtils.formatDouble(load, 2));        } else {            load = (float)(leX*pin.getLE()*mfactor);            buf.append("\tLoad="+TextUtils.formatDouble(load, 2));        }        System.out.println(buf.toString());        return load;    }}

⌨️ 快捷键说明

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