コード例 #1
0
 virtual void visit(AstVarRef* nodep, AstNUser*) {
     // Any variable
     UndrivenVarEntry* entryp = getEntryp (nodep->varp());
     bool fdrv = nodep->lvalue() && nodep->varp()->attrFileDescr();  // FD's are also being read from
     if (m_markBoth || nodep->lvalue()) entryp->drivenWhole();
     if (m_markBoth || !nodep->lvalue() || fdrv) entryp->usedWhole();
 }
コード例 #2
0
 virtual void visit(AstSel* nodep, AstNUser*) {
     AstVarRef* varrefp = nodep->fromp()->castVarRef();
     AstConst* constp = nodep->lsbp()->castConst();
     if (varrefp && constp && !constp->num().isFourState()) {
         UndrivenVarEntry* entryp = getEntryp (varrefp->varp());
         int lsb = constp->toUInt();
         if (m_markBoth || varrefp->lvalue()) entryp->drivenBit(lsb, nodep->width());
         if (m_markBoth || !varrefp->lvalue()) entryp->usedBit(lsb, nodep->width());
     } else {
         // else other varrefs handled as unknown mess in AstVarRef
         nodep->iterateChildren(*this);
     }
 }
コード例 #3
0
ファイル: V3Undriven.cpp プロジェクト: jiexu/verilator
    virtual void visit(AstVarRef* nodep, AstNUser*) {
	// Any variable
	for (int usr=1; usr<(m_alwaysp?3:2); ++usr) {
	    UndrivenVarEntry* entryp = getEntryp (nodep->varp(), usr);
	    bool fdrv = nodep->lvalue() && nodep->varp()->attrFileDescr();  // FD's are also being read from
	    if (m_markBoth || nodep->lvalue()) {
		if (usr==2 && m_alwaysp && entryp->isUsedNotDrivenAny()) {
		    UINFO(9," Full bus.  Entryp="<<(void*)entryp<<endl);
		    warnAlwCombOrder(nodep);
		}
		entryp->drivenWhole();
	    }
	    if (m_markBoth || !nodep->lvalue() || fdrv) entryp->usedWhole();
	}
    }
コード例 #4
0
 // VISITORS
 virtual void visit(AstVar* nodep, AstNUser*) {
     UndrivenVarEntry* entryp = getEntryp (nodep);
     if (nodep->isInput()
             || nodep->isSigPublic() || nodep->isSigUserRWPublic()
             || (m_taskp && (m_taskp->dpiImport() || m_taskp->dpiExport()))) {
         entryp->drivenWhole();
     }
     if (nodep->isOutput()
             || nodep->isSigPublic() || nodep->isSigUserRWPublic()
             || nodep->isSigUserRdPublic()
             || (m_taskp && (m_taskp->dpiImport() || m_taskp->dpiExport()))) {
         entryp->usedWhole();
     }
     // Discover variables used in bit definitions, etc
     nodep->iterateChildren(*this);
 }
コード例 #5
0
ファイル: V3Undriven.cpp プロジェクト: jiexu/verilator
    virtual void visit(AstSel* nodep, AstNUser*) {
	AstVarRef* varrefp = nodep->fromp()->castVarRef();
	AstConst* constp = nodep->lsbp()->castConst();
	if (varrefp && constp && !constp->num().isFourState()) {
	    for (int usr=1; usr<(m_alwaysp?3:2); ++usr) {
		UndrivenVarEntry* entryp = getEntryp (varrefp->varp(), usr);
		int lsb = constp->toUInt();
		if (m_markBoth || varrefp->lvalue()) {
		    // Don't warn if already driven earlier as "a=0; if(a) a=1;" is fine.
		    if (usr==2 && m_alwaysp && entryp->isUsedNotDrivenBit(lsb, nodep->width())) {
			UINFO(9," Select.  Entryp="<<(void*)entryp<<endl);
			warnAlwCombOrder(varrefp);
		    }
		    entryp->drivenBit(lsb, nodep->width());
		}
		if (m_markBoth || !varrefp->lvalue()) entryp->usedBit(lsb, nodep->width());
	    }
	} else {
	    // else other varrefs handled as unknown mess in AstVarRef
	    nodep->iterateChildren(*this);
	}
    }
コード例 #6
0
ファイル: V3Undriven.cpp プロジェクト: torc-isi/torc
    virtual void visit(AstVarRef* nodep, AstNUser*) {
	// Any variable
	UndrivenVarEntry* entryp = getEntryp (nodep->varp());
	if (m_markBoth || nodep->lvalue()) entryp->drivenWhole();
	if (m_markBoth || !nodep->lvalue()) entryp->usedWhole();
    }