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

📄 oalefinsite.cpp

📁 openaccess读def,lef文件所用的源代码
💻 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 + -