本文整理汇总了C++中Gate::outWire方法的典型用法代码示例。如果您正苦于以下问题:C++ Gate::outWire方法的具体用法?C++ Gate::outWire怎么用?C++ Gate::outWire使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Gate
的用法示例。
在下文中一共展示了Gate::outWire方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: logicSim
void Circuit::logicSim( Pattern* PatternSet )
{
AssignPiValue( PatternSet );
for(unsigned i = 0 ; i < topologicalSequence.size() ; ++i)
{
int gateID = topologicalSequence[i];
Gate targetGate = gate(gateID);
// PI = 1, PO = 2, CUT = 3, CUT_BAR = 4, TIE0 = 5, TIE1 = 6, NORMAL = 7, REMOVED = 8, UNUSED = 0
int finalValue = value[targetGate.inWire(0)];
for(unsigned j = 1 ; j < targetGate.numInWire() ; ++j)
{
int inWireID = targetGate.inWire(j);
//assert(level[wire(inWireID).preGate()] <= level[gateID]);
int inValue = value[inWireID];
switch(targetGate.typeID())
{
case 1:
case 2:
finalValue = inValue;
break;
case 3:
case 4:
finalValue = finalValue & inValue;
break;
case 5:
case 6:
finalValue = finalValue | inValue;
break;
case 7:
case 8:
finalValue = finalValue ^ inValue;
break;
default:
cout << "strange gate type id: " << targetGate.typeID() << endl;
exit(0);
}
}
switch(targetGate.typeID())
{
case 1:
case 4:
case 6:
case 8:
finalValue = ~ finalValue;
break;
default:
break;
}
///cout<< finalValue<<endl;
Wire fanoutWire = wire( targetGate.outWire() );
if( fanoutWire.type() != "CUT" && fanoutWire.type() != "CUT_BAR" )
{
wire( targetGate.outWire() ).setValueSet( finalValue );
value[ targetGate.outWire() ] = finalValue;
}
}
return;
}
示例2: setLevel
bool Circuit::setLevel()
{
// read pi
vector<int> pi;
for(unsigned i = 0 ; i < numWire() ; ++i)
{
Wire piWire = wire(i);
if(piWire.type() == "PI")
pi.push_back(i);
}
// all gate not visit yet
queue<int> gates;
vector<int> visitCount(numGate() , 0);
for(unsigned i = 0 ; i < pi.size() ; ++i)
{
Wire piWire = wire(pi[i]);
// push fanout gates to queue
for(unsigned j = 0 ; j < piWire.numPosGate() ; ++j)
{
int posGateID = piWire.posGate(j);
gates.push(posGateID);
}
}
// set level of gates
level.assign(numGate() , -1);
// visit all gates
while(!gates.empty())
{
int gateID = gates.front();
gates.pop();
Gate visitedGate = gate(gateID);
visitCount[gateID]++;
if(visitCount[gateID] != (int)visitedGate.numInWire())
continue;
// calculate level
int maxSubLevel = 0;
for(unsigned i = 0 ; i < visitedGate.numInWire() ; ++i)
{
Wire inWire = wire(visitedGate.inWire(i));
int preGateID = inWire.preGate();
//cout<< preGateID;
maxSubLevel = max(maxSubLevel , level[preGateID]);
//cout<<'\t'<< maxSubLevel<<endl;
}
level[gateID] = maxSubLevel + 1;
gate(gateID).setLevel( maxSubLevel +1 );
// push fanout gates to queue
Wire outWire = wire(visitedGate.outWire());
for(unsigned j = 0 ; j < outWire.numPosGate() ; ++j)
{
int posGateID = outWire.posGate(j);
gates.push(posGateID);
}
}
// sequence
for(unsigned i = 0 ; i < numGate() ; ++i)
topologicalSequence.push_back(i);
sort(topologicalSequence.begin() , topologicalSequence.end() , levelCompare);
if(value.size() == 0)
value.assign(numWire() , 0);
//if(cutPoint.size() == 0)
// cutPoint.assign(numWire() , 0);
return true;
}