📄 oalefinsite.cpp
字号:
// *****************************************************************************// *****************************************************************************// LefInSite.cpp//// Functions to handle LEF SITE constructs for the 'lef2gn' translator.//// *****************************************************************************// Except as specified in the OpenAccess terms of use of Cadence or Silicon// Integration Initiative, this material may not be copied, modified,// re-published, uploaded, executed, or distributed in any way, in any medium,// in whole or in part, without prior written permission from Cadence.//// Copyright 2002-2005 Cadence Design Systems, Inc.// All Rights Reserved.//// $Author: mhahn $// $Revision: 1.34 $// $Date: 2005/01/04 03:26:23 $// $State: Exp $// *****************************************************************************// *****************************************************************************#include "oaLefDef.h"BEGIN_LEFDEF_NAMESPACE// *****************************************************************************// LefInSite::LefInSite()// LefInSite::~LefInSite()//// This is the constructor for the LefInSite class. // *****************************************************************************LefInSite::LefInSite(LefIn &translator): siteDefType(oacCoreSiteDefType), siteDef(NULL), lefSite(NULL), lefIn(translator){ translator.lefInSite = this;}LefInSite::~LefInSite(){}// *****************************************************************************// LefInSite::parse()//// This function handles the 'SITE' LEF construct.// Creates a new siteDef object in the techDB.// If the specified site already exists, it will be overwritten in techDB.// *****************************************************************************voidLefInSite::parse(lefiSite *data){ lefSite = data; parseClass(); siteDef = oaSiteDef::find(lefIn.tech(), lefSite->name()); if (siteDef) { siteDef->setType(siteDefType); return; } if (lefSite->hasRowPattern()) { createArraySite(); } else { createSite(); } parseSymmetry();} // *****************************************************************************// LefInSite::parseClass()//// This function handles site CLASS attribute// *****************************************************************************voidLefInSite::parseClass(){ siteDefType = oacCoreSiteDefType; if (!strcmp(lefSite->siteClass(), "PAD")) { siteDefType = oacPadSiteDefType; }} // *****************************************************************************// LefInSite::parseSymmetry()//// This function handles site SYMMETRY attribute// *****************************************************************************voidLefInSite::parseSymmetry(){ if (lefSite->hasXSymmetry()) { siteDef->setSymmetricInX(true); } if (lefSite->hasYSymmetry()) { siteDef->setSymmetricInY(true); } if (lefSite->has90Symmetry()) { siteDef->setSymmetricInRot(true); }} // *****************************************************************************// LefInSite::createSite()//// This function creates the oaSiteDef for this LEF site.// *****************************************************************************voidLefInSite::createSite(){ siteDef = oaScalarSiteDef::create(lefIn.tech(), lefSite->name(), siteDefType, lefIn.uuToDBU(lefSite->sizeX()), lefIn.uuToDBU(lefSite->sizeY()));}// *****************************************************************************// LefInSite::createArraySite()//// This function creates an oaArraySiteDef for this LEF site.// *****************************************************************************voidLefInSite::createArraySite(){ oaSitePattern pattern; oaTransform xform(0, 0); for (int i = 0; i < lefSite->numSites(); i++) { oaSiteDef *site = oaSiteDef::find(lefIn.tech(), lefSite->siteName(i)); if (!site) { throw LefDefError(cSiteNotFound, lefSite->name(), lefSite->siteName(i)); } oaBox box(0, 0, site->getWidth(), site->getHeight()); oaOrient orient = lefIn.getOrient(lefSite->siteOrient(i)); oaSiteRef siteRef; box.transform(oaTransform(orient)); siteRef.siteName() = lefSite->siteName(i); siteRef.transform() = xform; siteRef.transform().orient() = orient; siteRef.transform().xOffset() -= box.left(); siteRef.transform().yOffset() -= box.bottom(); pattern.append(siteRef); xform.xOffset() += box.getWidth(); } siteDef = oaArraySiteDef::create(lefIn.tech(), lefSite->name(), siteDefType, pattern);}END_LEFDEF_NAMESPACE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -