当前位置: 首页>>代码示例>>C++>>正文


C++ AstCFunc::cname方法代码示例

本文整理汇总了C++中AstCFunc::cname方法的典型用法代码示例。如果您正苦于以下问题:C++ AstCFunc::cname方法的具体用法?C++ AstCFunc::cname怎么用?C++ AstCFunc::cname使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AstCFunc的用法示例。


在下文中一共展示了AstCFunc::cname方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: emitSymImp

void EmitCSyms::emitSymImp() {
    UINFO(6,__FUNCTION__<<": "<<endl);
    string filename = v3Global.opt.makeDir()+"/"+symClassName()+".cpp";
    AstCFile* cfilep = newCFile(filename, true/*slow*/, true/*source*/);
    cfilep->support(true);
    V3OutCFile cf (filename);
    m_ofp = &cf;
    ofp()->putsHeader();
    puts("// DESCR" "IPTION: Verilator output: Symbol table implementation internals\n");
    puts("\n");

    // Includes
    puts("#include \""+symClassName()+".h\"\n");
    for (AstNodeModule* nodep = v3Global.rootp()->modulesp(); nodep; nodep=nodep->nextp()->castNodeModule()) {
    puts("#include \""+modClassName(nodep)+".h\"\n");
    }

    //puts("\n// GLOBALS\n");

    puts("\n// FUNCTIONS\n");
    puts(symClassName()+"::"+symClassName()+"("+topClassName()+"* topp, const char* namep)\n");
    puts("\t// Setup locals\n");
    puts("\t: __Vm_namep(namep)\n");	// No leak, as we get destroyed when the top is destroyed
    puts("\t, __Vm_activity(false)\n");
    puts("\t, __Vm_didInit(false)\n");
    puts("\t// Setup submodule names\n");
    char comma=',';
    for (vector<ScopeModPair>::iterator it = m_scopes.begin(); it != m_scopes.end(); ++it) {
    AstScope* scopep = it->first;  AstNodeModule* modp = it->second;
    if (modp->isTop()) {
    } else {
        ofp()->printf("\t%c %-30s ", comma, scopep->nameDotless().c_str());
        puts("(Verilated::catName(topp->name(),");
        // The "." is added by catName
        putsQuoted(scopep->prettyName());
        puts("))\n");
        comma=',';
    }
    }
    puts("{\n");

    puts("// Pointer to top level\n");
    puts("TOPp = topp;\n");
    puts("// Setup each module's pointers to their submodules\n");
    for (vector<ScopeModPair>::iterator it = m_scopes.begin(); it != m_scopes.end(); ++it) {
    AstScope* scopep = it->first;  AstNodeModule* modp = it->second;
    if (!modp->isTop()) {
        string arrow = scopep->name();
        string::size_type pos;
        while ((pos=arrow.find(".")) != string::npos) {
        arrow.replace(pos, 1, "->");
        }
        if (arrow.substr(0,5) == "TOP->") arrow.replace(0,5,"TOPp->");
        ofp()->printf("%-30s ", arrow.c_str());
        puts(" = &");
        puts(scopep->nameDotless()+";\n");
    }
    }

    puts("// Setup each module's pointer back to symbol table (for public functions)\n");
    puts("TOPp->__Vconfigure(this, true);\n");
    for (vector<ScopeModPair>::iterator it = m_scopes.begin(); it != m_scopes.end(); ++it) {
    AstScope* scopep = it->first;  AstNodeModule* modp = it->second;
    if (!modp->isTop()) {
        // first is used by AstCoverDecl's call to __vlCoverInsert
        bool first = !modp->user1();
        modp->user1(true);
        puts(scopep->nameDotless()+".__Vconfigure(this, "
         +(first?"true":"false")
         +");\n");
    }
    }

    puts("// Setup scope names\n");
    for (ScopeNames::iterator it = m_scopeNames.begin(); it != m_scopeNames.end(); ++it) {
    puts("__Vscope_"+it->second.m_symName+".configure(this,name(),");
    putsQuoted(it->second.m_prettyName);
    puts(");\n");
    }

    if (v3Global.dpi()) {
    puts("// Setup export functions\n");
    puts("for (int __Vfinal=0; __Vfinal<2; __Vfinal++) {\n");
    for (ScopeFuncs::iterator it = m_scopeFuncs.begin(); it != m_scopeFuncs.end(); ++it) {
        AstScopeName* scopep = it->second.m_scopep;
        AstCFunc* funcp = it->second.m_funcp;
        AstNodeModule* modp = it->second.m_modp;
        if (funcp->dpiExport()) {
        puts("__Vscope_"+scopep->scopeSymName()+".exportInsert(__Vfinal,");
        putsQuoted(funcp->cname());
        puts(", (void*)(&");
        puts(modClassName(modp));
        puts("::");
        puts(funcp->name());
        puts("));\n");
        }
    }
    // It would be less code if each module inserted its own variables.
    // Someday.  For now public isn't common.
    for (ScopeVars::iterator it = m_scopeVars.begin(); it != m_scopeVars.end(); ++it) {
//.........这里部分代码省略.........
开发者ID:duythanhphan,项目名称:verilator,代码行数:101,代码来源:V3EmitCSyms.cpp

示例2: emitSymHdr

void EmitCSyms::emitSymHdr() {
    UINFO(6,__FUNCTION__<<": "<<endl);
    string filename = v3Global.opt.makeDir()+"/"+symClassName()+".h";
    newCFile(filename, true/*slow*/, false/*source*/);
    V3OutCFile hf (filename);
    m_ofp = &hf;

    ofp()->putsHeader();
    puts("// DESCR" "IPTION: Verilator output: Symbol table internal header\n");
    puts("//\n");
    puts("// Internal details; most calling programs do not need this header\n");
    puts("\n");

    puts("#ifndef _"+symClassName()+"_H_\n");
    puts("#define _"+symClassName()+"_H_\n");
    puts("\n");

    if (optSystemPerl()) puts("#include \"systemperl.h\"\n");
    else if (optSystemC()) puts("#include \"systemc.h\"\n");

    if (optSystemPerl() || optSystemC()) {
    puts("#include \"verilated_sc.h\"\n");
    }
    if (v3Global.needHeavy()) {
    puts("#include \"verilated_heavy.h\"\n");
    } else {
    puts("#include \"verilated.h\"\n");
    }

    // for
    puts("\n// INCLUDE MODULE CLASSES\n");
    for (AstNodeModule* nodep = v3Global.rootp()->modulesp(); nodep; nodep=nodep->nextp()->castNodeModule()) {
    puts("#include \""+modClassName(nodep)+".h\"\n");
    }

    if (v3Global.dpi()) {
    puts ("\n// DPI TYPES for DPI Export callbacks (Internal use)\n");
    map<string,int> types;  // Remove duplicates and sort
    for (ScopeFuncs::iterator it = m_scopeFuncs.begin(); it != m_scopeFuncs.end(); ++it) {
        AstCFunc* funcp = it->second.m_funcp;
        if (funcp->dpiExport()) {
        string cbtype = v3Global.opt.prefix()+"__Vcb_"+funcp->cname()+"_t";
        types["typedef void (*"+cbtype+") ("+cFuncArgs(funcp)+");\n"] = 1;
        }
    }
    for (map<string,int>::iterator it = types.begin(); it != types.end(); ++it) {
        puts(it->first);
    }
    }

    puts("\n// SYMS CLASS\n");
    puts((string)"class "+symClassName()+" : public VerilatedSyms {\n");
    ofp()->putsPrivate(false);  // public:

    puts("\n// LOCAL STATE\n");
    ofp()->putAlign(V3OutFile::AL_AUTO, sizeof(vluint64_t));
    puts("const char* __Vm_namep;\n");	// Must be before subcells, as constructor order needed before _vlCoverInsert.
    ofp()->putAlign(V3OutFile::AL_AUTO, sizeof(bool));
    puts("bool\t__Vm_activity;\t\t///< Used by trace routines to determine change occurred\n");
    ofp()->putAlign(V3OutFile::AL_AUTO, sizeof(bool));
    puts("bool\t__Vm_didInit;\n");

    ofp()->putAlign(V3OutFile::AL_AUTO, sizeof(vluint64_t));
    puts("\n// SUBCELL STATE\n");
    for (vector<ScopeModPair>::iterator it = m_scopes.begin(); it != m_scopes.end(); ++it) {
    AstScope* scopep = it->first;  AstNodeModule* modp = it->second;
    if (modp->isTop()) {
        ofp()->printf("%-30s ", (modClassName(modp)+"*").c_str());
        puts(scopep->nameDotless()+"p;\n");
    }
    else {
        ofp()->printf("%-30s ", (modClassName(modp)+"").c_str());
        puts(scopep->nameDotless()+";\n");
    }
    }

    puts("\n// COVERAGE\n");
    if (m_coverBins) {
    ofp()->putAlign(V3OutFile::AL_AUTO, sizeof(uint32_t));
    puts("uint32_t\t__Vcoverage["); puts(cvtToStr(m_coverBins)); puts("];\n");
    }

    puts("\n// SCOPE NAMES\n");
    for (ScopeNames::iterator it = m_scopeNames.begin(); it != m_scopeNames.end(); ++it) {
    puts("VerilatedScope __Vscope_"+it->second.m_symName+";\n");
    }

    puts("\n// CREATORS\n");
    puts(symClassName()+"("+topClassName()+"* topp, const char* namep);\n");
    puts((string)"~"+symClassName()+"() {};\n");

    puts("\n// METHODS\n");
    puts("inline const char* name() { return __Vm_namep; }\n");
    puts("inline bool getClearActivity() { bool r=__Vm_activity; __Vm_activity=false; return r;}\n");
    if (v3Global.opt.savable() ) {
    puts("void __Vserialize(VerilatedSerialize& os);\n");
    puts("void __Vdeserialize(VerilatedDeserialize& os);\n");
    }
    puts("\n");
    puts("} VL_ATTR_ALIGNED(64);\n");
//.........这里部分代码省略.........
开发者ID:duythanhphan,项目名称:verilator,代码行数:101,代码来源:V3EmitCSyms.cpp


注:本文中的AstCFunc::cname方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。