diff --git a/simulators/c++2/src_simulator/BusMaster.h b/simulators/c++2/src_simulator/BusMaster.h index ab1ed73a3e4490d84a36441d592fa886daf39aba..8b677cdc99ae8ac3fbf835de129df670f2775521 100644 --- a/simulators/c++2/src_simulator/BusMaster.h +++ b/simulators/c++2/src_simulator/BusMaster.h @@ -72,7 +72,7 @@ public: void reset(){ _nextTransaction=0; _lastSimTime=-1; - _nextBus=0; + _nextBus=_busArray[0]; _contentionDelay=0; _noTransactions=0; } @@ -98,6 +98,7 @@ public: void addTransaction(){ //_addTransFlag++; + //std::cout << _name << ": add Trans\n"; //std::cout << _name << ": trans added on Bus: " << _nextBus->toString() << std::endl; _nextBus->addTransaction(); _nextTransaction=0; diff --git a/simulators/c++2/src_simulator/CPU.cpp b/simulators/c++2/src_simulator/CPU.cpp index b98df8c4b60e071e1a6dee659ad5b635955ab4d2..812db4eb7be14f3dcd8189b5bdfe5aa35fcfb604 100644 --- a/simulators/c++2/src_simulator/CPU.cpp +++ b/simulators/c++2/src_simulator/CPU.cpp @@ -201,22 +201,32 @@ bool CPU::addTransaction(){ //Slave* aLastSlave=_nextTransaction->getChannel()->getNextSlave(_nextTransaction); BusMaster* aFollowingMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); if (aFollowingMaster==0){ + //std::cout << "1\n"; aFinish=true; BusMaster* aTempMaster =_nextTransaction->getChannel()->getFirstMaster(_nextTransaction); + //std::cout << "2\n"; Slave* aTempSlave= _nextTransaction->getChannel()->getNextSlave(_nextTransaction); + //std::cout << "3\n"; aTempMaster->addBusContention(_nextTransaction->getStartTime()-max(_endSchedule,_nextTransaction->getRunnableTime())); while (aTempMaster!=0){ + //std::cout << "3a\n"; aTempMaster->addTransaction(); + //std::cout << "3b\n"; aTempSlave->addTransaction(_nextTransaction); + //std::cout << "4\n"; aTempMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); + //std::cout << "5\n"; aTempSlave= _nextTransaction->getChannel()->getNextSlave(_nextTransaction); } + //std::cout << "6\n"; }else{ //std::cout << _name << " bus transaction next round" << std::endl; _masterNextTransaction=aFollowingMaster; + //std::cout << "7\n"; _masterNextTransaction->registerTransaction(_nextTransaction); aFinish=false; } + //std::cout << "8\n"; } if (aFinish){ #ifdef DEBUG_CPU