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

📄 oaverilogoutdesign.cpp

📁 openaccess与verilog互相转化时所用的源代码
💻 CPP
字号:
// *****************************************************************************// *****************************************************************************// oaVerilogOutDesign.cpp//// This file contains the implementation of the	oaVerilogOutDesign class.//// *****************************************************************************// 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	istributed in any way, in any medium,// in whole or in part,	without	prior written permission from Cadence.////		  Copyright 2003-2005 Cadence Design	Systems, Inc.//			     All Rights	Reserved.////  $Author: shaun $//  $Revision: 1.5 $//  $Date: 2005/07/09 17:27:54 $//  $State: Exp $// *****************************************************************************// *****************************************************************************#include "oaVerilogOutTest.h"// *****************************************************************************// oaVerilogOutDesign::oaVerilogOutDesign()//// This is the constructor for the oaVerilogOutDesign class.// *****************************************************************************oaVerilogOutDesign::oaVerilogOutDesign(const oaString &name):   oaVerilogOutTest(name){}// *****************************************************************************// oaVerilogOutDesign::buildData()//// This function builds the data for the test.// *****************************************************************************voidoaVerilogOutDesign::buildData(){    oaLib   *lib = oaLib::create(libN, libStr);    // Define the leaf level design.    oaDesign	    *leafDesign = oaDesign::open(libN, oaScalarName(ns, "leaf"),						 oaScalarName(ns, "abstract"),						 oaViewType::get(oacNetlist),						 'w');    oaModule	    *leafModule = oaModule::create(leafDesign, 						   oaScalarName(ns, "leaf"));    oaModScalarNet  *leafNetA = oaModScalarNet::create(leafModule, 						   oaScalarName(ns, "A"));    oaModScalarTerm *leafTermA = oaModScalarTerm::create(leafNetA,							 oaScalarName(ns, "A"),							 oacInputTermType);    oaModScalarNet  *leafNetQ = oaModScalarNet::create(leafModule, 						       oaScalarName(ns, "Q"));    oaModScalarTerm *leafTermQ = oaModScalarTerm::create(leafNetQ,							 oaScalarName(ns, "Q"),							 oacOutputTermType);    leafDesign->setTopModule(leafModule);    leafDesign->save();    // Define the mid level design.    oaDesign	    *midDesign = oaDesign::open(libN, oaScalarName(ns, "mid"),						oaScalarName(ns, "netlist"),						oaViewType::get(oacNetlist),						'w');    oaModule	    *midModule = oaModule::create(midDesign, 						  oaScalarName(ns, "mid"));    oaModScalarNet  *midNetB = oaModScalarNet::create(midModule, 						      oaScalarName(ns, "B"));    oaModScalarTerm *midTermB = oaModScalarTerm::create(midNetB, 							oaScalarName(ns, "B"), 							oacInputTermType);    oaModScalarNet  *midNetR = oaModScalarNet::create(midModule, 						      oaScalarName(ns, "R"));    oaModScalarTerm *midTermR = oaModScalarTerm::create(midNetR, 							oaScalarName(ns, "R"), 							oacInputTermType);    oaModScalarInst *leafInst = oaModScalarInst::create(midModule, leafDesign,							oaScalarName(ns, "I0"));    oaModInstTerm::create(midNetB, leafInst, leafTermA);    oaModInstTerm::create(midNetR, leafInst, leafTermQ);    midDesign->setTopModule(midModule);    midDesign->save();    // Define the top level design.    oaDesign	    *topDesign = oaDesign::open(libN, cellN, viewN,						oaViewType::get(oacNetlist),						'w');    oaModule	    *topModule = oaModule::create(topDesign, cellN);    oaModScalarNet  *topNetC = oaModScalarNet::create(topModule, 						      oaScalarName(ns, "C"));    oaModScalarNet  *topNetS = oaModScalarNet::create(topModule, 						      oaScalarName(ns, "S"));    oaModScalarInst *midInst = oaModScalarInst::create(topModule, midDesign,						       oaScalarName(ns, "I1"));    oaModInstTerm::create(topNetC, midInst, oaScalarName(ns, "B"));    oaModInstTerm::create(topNetS, midInst, oaScalarName(ns, "R"));    oaModScalarInst *leafInst1 = oaModScalarInst::create(topModule, leafDesign,						         oaScalarName(ns, "I2"));    oaModInstTerm::create(topNetC, leafInst1, oaScalarName(ns, "A"));    oaModInstTerm::create(topNetS, leafInst1, oaScalarName(ns, "Q"));    topDesign->setTopModule(topModule);    topDesign->save();    leafDesign->close();    midDesign->close();    topDesign->close();}// *****************************************************************************// oaVerilogOutDesign::test()//// This method is the main entry point for the test.// *****************************************************************************oaBooleanoaVerilogOutDesign::test(){    preTest();    openOutputFile();    const oaString  outFile("temp.v");    MsgAdapter	    msgs;    try {	buildData();	VerilogOut  writer(msgs);	OptionsOut  &writerOptions = writer.getOptions();	writerOptions.getMsgAdapter()->setOutFile(NULL);	writerOptions.setFileName(outFile);	writerOptions.setLibName(libStr);	writerOptions.setCellName(cellStr);	writerOptions.setViewName(viewStr);	writerOptions.enableRecursiveDesign();	writerOptions.enableProduceLeaf(false);	writer.write();    }    catch(Error    &verr) {	tout.print(verr.getMsg());	throw;    }    catch(oaException	 &oaErr) {	tout.print((const char*) oaErr.getMsg());	throw;    }    catch(...) {	tout.print("Caught an exception that was not handled by the writer.\n");	throw;    }    FILE    *moduleFP = fopen((const char*) outFile, "r");    if (moduleFP) {	char buf[128];	while (fgets(buf, 127, moduleFP)) {	    tout.printLine(buf);	}	fclose(moduleFP);    } else {	tout.printLine("Unable to open the output file, %s\n",		       (const char*) outFile);    }    closeOutputFile();    cleanup(libStr);    return compareOutputByName(getName());}

⌨️ 快捷键说明

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