📄 oaverilogoutdesign.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 + -