431 lines
16 KiB
C++
431 lines
16 KiB
C++
// *****************************************************************************
|
|
// *****************************************************************************
|
|
// Copyright 2013, Cadence Design Systems
|
|
//
|
|
// This file is part of the Cadence LEF/DEF Open Source
|
|
// Distribution, Product Version 5.8.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
// implied. See the License for the specific language governing
|
|
// permissions and limitations under the License.
|
|
//
|
|
// For updates, support, or to become part of the LEF/DEF Community,
|
|
// check www.openeda.org for details.
|
|
//
|
|
// $Author: dell $
|
|
// $Revision: #1 $
|
|
// $Date: 2017/06/06 $
|
|
// $State: $
|
|
// *****************************************************************************
|
|
// *****************************************************************************
|
|
|
|
#ifndef defiPinCap_h
|
|
#define defiPinCap_h
|
|
|
|
|
|
#include "defiKRDefs.hpp"
|
|
#include "defiMisc.hpp"
|
|
#include <stdio.h>
|
|
|
|
BEGIN_LEFDEF_PARSER_NAMESPACE
|
|
|
|
class defrData;
|
|
|
|
class defiPinCap {
|
|
public:
|
|
|
|
void setPin(int p);
|
|
void setCap(double d);
|
|
|
|
int pin() const;
|
|
double cap() const;
|
|
|
|
void print(FILE* f) const;
|
|
|
|
protected:
|
|
int pin_; // pin num
|
|
double cap_; // capacitance
|
|
};
|
|
|
|
|
|
// 5.5
|
|
class defiPinAntennaModel {
|
|
public:
|
|
defiPinAntennaModel(defrData *data);
|
|
void Init();
|
|
|
|
~defiPinAntennaModel();
|
|
void clear();
|
|
void Destroy();
|
|
|
|
void setAntennaModel(int oxide);
|
|
void addAPinGateArea(int value, const char* layer);
|
|
void addAPinMaxAreaCar(int value, const char* layer);
|
|
void addAPinMaxSideAreaCar(int value, const char* layer);
|
|
void addAPinMaxCutCar(int value, const char* layer);
|
|
|
|
char* antennaOxide() const;
|
|
|
|
int hasAPinGateArea() const; // ANTENNAPINGATEAREA
|
|
int numAPinGateArea() const;
|
|
int APinGateArea(int index) const;
|
|
int hasAPinGateAreaLayer(int index) const;
|
|
const char* APinGateAreaLayer(int index) const;
|
|
|
|
int hasAPinMaxAreaCar() const; // ANTENNAPINMAXAREACAR
|
|
int numAPinMaxAreaCar() const;
|
|
int APinMaxAreaCar(int index) const;
|
|
int hasAPinMaxAreaCarLayer(int index) const;
|
|
const char* APinMaxAreaCarLayer(int index) const;
|
|
|
|
int hasAPinMaxSideAreaCar() const; // ANTENNAPINMAXSIDEAREACAR
|
|
int numAPinMaxSideAreaCar() const;
|
|
int APinMaxSideAreaCar(int index) const;
|
|
int hasAPinMaxSideAreaCarLayer(int index) const;
|
|
const char* APinMaxSideAreaCarLayer(int index) const;
|
|
|
|
int hasAPinMaxCutCar() const; // ANTENNAPINMAXCUTCAR
|
|
int numAPinMaxCutCar() const;
|
|
int APinMaxCutCar(int index) const;
|
|
int hasAPinMaxCutCarLayer(int index) const;
|
|
const char* APinMaxCutCarLayer(int index) const;
|
|
|
|
protected:
|
|
char* oxide_;
|
|
|
|
int numAPinGateArea_; // 5.4
|
|
int APinGateAreaAllocated_;
|
|
int* APinGateArea_; // 5.4 AntennaPinGateArea
|
|
char** APinGateAreaLayer_; // 5.4 Layer
|
|
|
|
int numAPinMaxAreaCar_; // 5.4
|
|
int APinMaxAreaCarAllocated_;
|
|
int* APinMaxAreaCar_; // 5.4 AntennaPinMaxAreaCar
|
|
char** APinMaxAreaCarLayer_; // 5.4 Layer
|
|
|
|
int numAPinMaxSideAreaCar_; // 5.4
|
|
int APinMaxSideAreaCarAllocated_;
|
|
int* APinMaxSideAreaCar_; // 5.4 AntennaPinMaxSideAreaCar
|
|
char** APinMaxSideAreaCarLayer_; // 5.4 Layer
|
|
|
|
int numAPinMaxCutCar_; // 5.4
|
|
int APinMaxCutCarAllocated_;
|
|
int* APinMaxCutCar_; // 5.4 AntennaPinMaxCutCar
|
|
char** APinMaxCutCarLayer_; // 5.4 Layer
|
|
|
|
defrData *defData;
|
|
};
|
|
|
|
class defiPinPort { // 5.7
|
|
public:
|
|
defiPinPort(defrData *data);
|
|
void Init();
|
|
|
|
~defiPinPort();
|
|
|
|
void clear();
|
|
|
|
void addLayer(const char* layer);
|
|
void addLayerSpacing(int minSpacing);
|
|
void addLayerMask(int mask);
|
|
void addLayerDesignRuleWidth(int effectiveWidth);
|
|
void addLayerPts(int xl, int yl, int xh, int yh);
|
|
void addPolygon(const char* layerName);
|
|
void addPolySpacing(int minSpacing);
|
|
void addPolyMask(int mask);
|
|
void addPolyDesignRuleWidth(int effectiveWidth);
|
|
void addPolygonPts(defiGeometries* geom);
|
|
void addVia(const char* via, int viaX, int viaY, int color = 0);
|
|
void setPlacement(int typ, int x, int y, int orient);
|
|
|
|
int numLayer() const;
|
|
const char* layer(int index) const;
|
|
void bounds(int index, int* xl, int* yl, int* xh, int* yh) const;
|
|
int hasLayerSpacing(int index) const;
|
|
int hasLayerDesignRuleWidth(int index) const;
|
|
int layerSpacing(int index) const;
|
|
int layerMask(int index) const;
|
|
int layerDesignRuleWidth(int index) const;
|
|
int numPolygons() const;
|
|
const char* polygonName(int index) const;
|
|
defiPoints getPolygon(int index) const;
|
|
int hasPolygonSpacing(int index) const;
|
|
int hasPolygonDesignRuleWidth(int index) const;
|
|
int polygonSpacing(int index) const;
|
|
int polygonDesignRuleWidth(int index) const;
|
|
int polygonMask(int index) const;
|
|
int numVias() const;
|
|
const char* viaName(int index) const;
|
|
int viaPtX (int index) const;
|
|
int viaPtY (int index) const;
|
|
int viaTopMask (int index) const;
|
|
int viaCutMask (int index) const;
|
|
int viaBottomMask (int index) const;
|
|
int hasPlacement() const;
|
|
int isPlaced() const;
|
|
int isCover() const;
|
|
int isFixed() const;
|
|
int placementX() const;
|
|
int placementY() const;
|
|
int orient() const;
|
|
const char* orientStr() const;
|
|
|
|
protected:
|
|
int layersAllocated_;
|
|
int numLayers_;
|
|
char** layers_;
|
|
int *layerMinSpacing_;
|
|
int *layerEffectiveWidth_;
|
|
int *xl_, *yl_, *xh_, *yh_;
|
|
int *layerMask_;
|
|
int polysAllocated_;
|
|
int numPolys_;
|
|
char** polygonNames_;
|
|
int *polyMinSpacing_;
|
|
int *polyMask_;
|
|
int *polyEffectiveWidth_;
|
|
defiPoints** polygons_;
|
|
int viasAllocated_;
|
|
int numVias_;
|
|
char** viaNames_;
|
|
int *viaX_;
|
|
int *viaY_;
|
|
int *viaMask_;
|
|
char placeType_;
|
|
int x_, y_;
|
|
char orient_;
|
|
|
|
defrData *defData;
|
|
};
|
|
|
|
class defiPin {
|
|
public:
|
|
defiPin(defrData *data);
|
|
void Init();
|
|
|
|
~defiPin();
|
|
void Destroy();
|
|
|
|
void Setup(const char* pinName, const char* netName);
|
|
void setDirection(const char* dir);
|
|
void setUse(const char* use);
|
|
// 5.6 setLayer is changed to addLayer due to multiple LAYER are allowed
|
|
// in 5.6
|
|
void addLayer(const char* layer);
|
|
void addLayerMask(int mask); // 5.8
|
|
void addLayerSpacing(int minSpacing); // 5.6
|
|
void addLayerDesignRuleWidth(int effectiveWidth); // 5.6
|
|
void addLayerPts(int xl, int yl, int xh, int yh);
|
|
void addPolygon(const char* layerName); // 5.6
|
|
void addPolyMask(int mask); // 5.8
|
|
void addPolySpacing(int minSpacing); // 5.6
|
|
void addPolyDesignRuleWidth(int effectiveWidth); // 5.6
|
|
void addPolygonPts(defiGeometries* geom); // 5.6
|
|
void setNetExpr(const char* netExpr); // 5.6
|
|
void setSupplySens(const char* pinName); // 5.6
|
|
void setGroundSens(const char* pinName); // 5.6
|
|
void setPlacement(int typ, int x, int y, int orient);
|
|
void setSpecial();
|
|
void addAntennaModel(int oxide); // 5.5
|
|
void addAPinPartialMetalArea(int value, const char* layer);
|
|
void addAPinPartialMetalSideArea(int value, const char* layer);
|
|
void addAPinGateArea(int value, const char* layer);
|
|
void addAPinDiffArea(int value, const char* layer);
|
|
void addAPinMaxAreaCar(int value, const char* layer);
|
|
void addAPinMaxSideAreaCar(int value, const char* layer);
|
|
void addAPinPartialCutArea(int value, const char* layer);
|
|
void addAPinMaxCutCar(int value, const char* layer);
|
|
void addVia(const char* via, int viaX, int viaY, int color = 0); // 5.7
|
|
// 5.7 port statements, which may have LAYER, POLYGON, &| VIA
|
|
void addPort(); // 5.7
|
|
void addPortLayer(const char* layer); // 5.7
|
|
void addPortLayerSpacing(int minSpacing); // 5.7
|
|
void addPortLayerDesignRuleWidth(int effectiveWidth); // 5.7
|
|
void addPortLayerPts(int xl, int yl, int xh, int yh); // 5.7
|
|
void addPortLayerMask(int color); // 5.8
|
|
void addPortPolygon(const char* layerName); // 5.7
|
|
void addPortPolySpacing(int minSpacing); // 5.7
|
|
void addPortPolyDesignRuleWidth(int effectiveWidth); // 5.7
|
|
void addPortPolygonPts(defiGeometries* geom); // 5.7
|
|
void addPortPolyMask(int color); // 5.8
|
|
void addPortVia(const char* via, int viaX, int viaY, int color = 0); // 5.7
|
|
void setPortPlacement(int typ, int x, int y, int orient); // 5.7 - 5.8
|
|
|
|
void clear();
|
|
|
|
void changePinName(const char* pinName); // For OA to modify the pinName
|
|
|
|
const char* pinName() const;
|
|
const char* netName() const;
|
|
// optional parts
|
|
int hasDirection() const;
|
|
int hasUse() const;
|
|
int hasLayer() const;
|
|
int hasPlacement() const;
|
|
int isUnplaced() const;
|
|
int isPlaced() const;
|
|
int isCover() const;
|
|
int isFixed() const;
|
|
int placementX() const;
|
|
int placementY() const;
|
|
const char* direction() const;
|
|
const char* use() const;
|
|
int numLayer() const;
|
|
const char* layer(int index) const;
|
|
void bounds(int index, int* xl, int* yl, int* xh, int* yh) const;
|
|
int layerMask(int index) const; // 5.8
|
|
int hasLayerSpacing(int index) const; // 5.6
|
|
int hasLayerDesignRuleWidth(int index) const; // 5.6
|
|
int layerSpacing(int index) const; // 5.6
|
|
int layerDesignRuleWidth(int index) const; // 5.6
|
|
int numPolygons() const; // 5.6
|
|
const char* polygonName(int index) const; // 5.6
|
|
defiPoints getPolygon(int index) const; // 5.6
|
|
int polygonMask(int index) const; // 5.8
|
|
int hasPolygonSpacing(int index) const; // 5.6
|
|
int hasPolygonDesignRuleWidth(int index) const; // 5.6
|
|
int polygonSpacing(int index) const; // 5.6
|
|
int polygonDesignRuleWidth(int index) const; // 5.6
|
|
int hasNetExpr() const; // 5.6
|
|
int hasSupplySensitivity() const; // 5.6
|
|
int hasGroundSensitivity() const; // 5.6
|
|
const char* netExpr() const; // 5.6
|
|
const char* supplySensitivity() const; // 5.6
|
|
const char* groundSensitivity() const; // 5.6
|
|
int orient() const;
|
|
const char* orientStr() const;
|
|
int hasSpecial() const;
|
|
int numVias() const; // 5.7
|
|
const char* viaName(int index) const; // 5.7
|
|
int viaTopMask(int index) const; // 5.8
|
|
int viaCutMask(int index) const; // 5.8
|
|
int viaBottomMask(int index) const; // 5.8
|
|
int viaPtX (int index) const; // 5.7
|
|
int viaPtY (int index) const; // 5.7
|
|
|
|
// 5.4
|
|
int hasAPinPartialMetalArea() const; // ANTENNAPINPARTIALMETALAREA
|
|
int numAPinPartialMetalArea() const;
|
|
int APinPartialMetalArea(int index) const;
|
|
int hasAPinPartialMetalAreaLayer(int index) const;
|
|
const char* APinPartialMetalAreaLayer(int index) const;
|
|
|
|
int hasAPinPartialMetalSideArea() const; // ANTENNAPINPARTIALMETALSIDEAREA
|
|
int numAPinPartialMetalSideArea() const;
|
|
int APinPartialMetalSideArea(int index) const;
|
|
int hasAPinPartialMetalSideAreaLayer(int index) const;
|
|
const char* APinPartialMetalSideAreaLayer(int index) const;
|
|
|
|
int hasAPinDiffArea() const; // ANTENNAPINDIFFAREA
|
|
int numAPinDiffArea() const;
|
|
int APinDiffArea(int index) const;
|
|
int hasAPinDiffAreaLayer(int index) const;
|
|
const char* APinDiffAreaLayer(int index) const;
|
|
|
|
int hasAPinPartialCutArea() const; // ANTENNAPINPARTIALCUTAREA
|
|
int numAPinPartialCutArea() const;
|
|
int APinPartialCutArea(int index) const;
|
|
int hasAPinPartialCutAreaLayer(int index) const;
|
|
const char* APinPartialCutAreaLayer(int index) const;
|
|
|
|
// 5.5
|
|
int numAntennaModel() const;
|
|
defiPinAntennaModel* antennaModel(int index) const;
|
|
|
|
// 5.7
|
|
int hasPort() const;
|
|
int numPorts() const;
|
|
defiPinPort* pinPort(int index) const;
|
|
void print(FILE* f) const;
|
|
|
|
protected:
|
|
int pinNameLength_; // allocated size of pin name
|
|
char* pinName_;
|
|
int netNameLength_; // allocated size of net name
|
|
char* netName_;
|
|
char hasDirection_;
|
|
char hasUse_;
|
|
char placeType_;
|
|
char orient_; // orient 0-7
|
|
int useLength_; // allocated size of length
|
|
char* use_;
|
|
int directionLength_; // allocated size of direction
|
|
char* direction_;
|
|
char** layers_; // 5.6, changed to array
|
|
int *xl_, *yl_, *xh_, *yh_; // 5.6, changed to arrays
|
|
int *layerMinSpacing_; // 5.6, SPACING in LAYER
|
|
int *layerEffectiveWidth_; // 5.6, DESIGNRULEWIDTH in LAYER
|
|
int layersAllocated_; // 5.6
|
|
int numLayers_; // 5.6
|
|
int *layerMask_; // 5.8
|
|
char** polygonNames_; // 5.6 layerName for POLYGON
|
|
int *polyMinSpacing_; // 5.6, SPACING in POLYGON
|
|
int *polyEffectiveWidth_; // 5.6, DESIGNRULEWIDTH in POLYGON
|
|
int *polyMask_; // 5.8
|
|
int numPolys_; // 5.6
|
|
int polysAllocated_; // 5.6
|
|
defiPoints** polygons_; // 5.6
|
|
int x_, y_; // placement
|
|
int hasSpecial_;
|
|
int numVias_; // 5.7
|
|
int viasAllocated_; // 5.7
|
|
char** viaNames_; // 5.7
|
|
int *viaX_; // 5.7
|
|
int *viaY_; // 5.7
|
|
int *viaMask_; // 5.8
|
|
int numPorts_; // 5.7
|
|
int portsAllocated_; // 5.7
|
|
defiPinPort ** pinPort_; // 5.7
|
|
|
|
// 5.5 AntennaModel
|
|
int numAntennaModel_;
|
|
int antennaModelAllocated_;
|
|
defiPinAntennaModel** antennaModel_;
|
|
|
|
int numAPinPartialMetalArea_; // 5.4
|
|
int APinPartialMetalAreaAllocated_;
|
|
int* APinPartialMetalArea_; // 5.4 AntennaPinPartialMetalArea
|
|
char** APinPartialMetalAreaLayer_; // 5.4 Layer
|
|
|
|
int numAPinPartialMetalSideArea_; // 5.4
|
|
int APinPartialMetalSideAreaAllocated_;
|
|
int* APinPartialMetalSideArea_; // 5.4 AntennaPinPartialMetalSideArea
|
|
char** APinPartialMetalSideAreaLayer_; // 5.4 Layer
|
|
|
|
int numAPinDiffArea_; // 5.4
|
|
int APinDiffAreaAllocated_;
|
|
int* APinDiffArea_; // 5.4 AntennaPinDiffArea
|
|
char** APinDiffAreaLayer_; // 5.4 Layer
|
|
|
|
int numAPinPartialCutArea_; // 5.4
|
|
int APinPartialCutAreaAllocated_;
|
|
int* APinPartialCutArea_; // 5.4 AntennaPinPartialCutArea
|
|
char** APinPartialCutAreaLayer_; // 5.4 Layer
|
|
|
|
int netExprLength_; // 5.6
|
|
char hasNetExpr_; // 5.6
|
|
char* netExpr_; // 5.6
|
|
int supplySensLength_; // 5.6
|
|
char hasSupplySens_; // 5.6
|
|
char* supplySens_; // 5.6
|
|
int groundSensLength_; // 5.6
|
|
char hasGroundSens_; // 5.6
|
|
char* groundSens_; // 5.6
|
|
|
|
defrData *defData;
|
|
};
|
|
|
|
END_LEFDEF_PARSER_NAMESPACE
|
|
|
|
USE_LEFDEF_PARSER_NAMESPACE
|
|
|
|
#endif
|