/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: PortProto.java * * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. * * 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.database.prototype; import com.sun.electric.database.id.PortProtoId; import com.sun.electric.database.text.Name; import com.sun.electric.technology.PrimitivePort; import com.sun.electric.technology.ArcProto; /** * The PortProto interface defines a type of PortInst. * It is be implemented as PrimitivePort (for primitives from Technologies) * or as Export (for cells in Libraries). * <P> * Every port in the database appears as one <I>prototypical</I> object and many <I>instantiative</I> objects. * Thus, for a PrimitivePort such as the "poly-left" port on a CMOS P-transistor there is one object (called a PrimitivePort, which is a PortProto) * that describes the transistor prototype and there are many objects (called PortInsts), * one for every port on an instance of that transistor in a circuit. * Similarly, for every Export, there is one object (called an Export, which is a PortProto) * that describes the Export on a Cell and there are many objects (also called PortInsts) * for every port on a use of that Cell in some other Cell. * PrimitivePorts are statically created and placed in the Technology objects, * but complex Exports are created by the tools and placed in Library objects. * <P> * A PortProto has a descriptive name, which may be overridden by another PortProto * at a higher level in the schematic or layout hierarchy. * The PortProto also has a parent cell, characteristics, and more. */ public interface PortProto { /** Method to return PortProtoId of this PortProto. * PortProtoId identifies PortProto independently of threads. * @return PortProtoId of this PortProto. */ public PortProtoId getId(); /** * Method to get the index of this PortProto. * This is a zero-based index of ports on the NodeProto. * @return the index of this PortProto. */ public int getPortIndex(); /** * Method to return the name key of this PortProto. * @return the Name key of this PortProto. */ public Name getNameKey(); /** * Method to return the name of this PortProto. * @return the name of this PortProto. */ public String getName(); /** * Method to return the parent NodeProto of this PortProto. * @return the parent NodeProto of this PortProto. */ public NodeProto getParent(); /** * Method to return the PortCharacteristic of this PortProto. * @return the PortCharacteristic of this PortProto. */ public PortCharacteristic getCharacteristic(); /** * Method to determine whether this PortProto is of type Power. * This is determined by either having the proper Characteristic, or by * having the proper name (starting with "vdd", "vcc", "pwr", or "power"). * @return true if this PortProto is of type Power. */ public boolean isPower(); /** * Method to determine whether this PortProto is of type Ground. * This is determined by either having the proper PortCharacteristic, or by * having the proper name (starting with "vss", "gnd", or "ground"). * @return true if this PortProto is of type Ground. */ public boolean isGround(); /** * method to return the base-level port that this PortProto is created from. * For a PrimitivePort, it simply returns itself. * For an Export, it returns the base port of its sub-port, the port on the NodeInst * from which the Export was created. * @return the base-level port that this PortProto is created from. */ public PrimitivePort getBasePort(); /** * Method to return true if the specified ArcProto can connect to this PortProto. * @param arc the ArcProto to test for connectivity. * @return true if this PortProto can connect to the ArcProto, false if it can't. */ public boolean connectsTo(ArcProto arc); }