diff --git a/build.txt b/build.txt index 899d2c43f2dccc5c3253225b7e233d8351664536..b3fe745b31585769d17fc7ee582695183da6eece 100644 --- a/build.txt +++ b/build.txt @@ -1 +1 @@ -13049 \ No newline at end of file +13057 \ No newline at end of file diff --git a/simulators/c++2/src_simulator/app/TMLChannel.cpp b/simulators/c++2/src_simulator/app/TMLChannel.cpp index 0f2bb5bafd489365fcb12cee6dd3c2f40bc99552..f014e8ad81c0a84b0febf39ba0187dff5f60e502 100755 --- a/simulators/c++2/src_simulator/app/TMLChannel.cpp +++ b/simulators/c++2/src_simulator/app/TMLChannel.cpp @@ -67,7 +67,7 @@ BusMaster* TMLChannel::getNextMaster(TMLTransaction* iTrans){ } BusMaster* TMLChannel::getFirstMaster(TMLTransaction* iTrans){ - std::cout<<"get First master"<<std::endl; + //std::cout<<"get First master"<<std::endl; //if (iTrans->getCommand()->getTask()==_writeTask){ //std::cout << "fima 1\n"; if (_masters==0 || _slaves==0 || _numberOfHops==0 ) {return 0;} diff --git a/simulators/c++2/src_simulator/app/TMLTask.cpp b/simulators/c++2/src_simulator/app/TMLTask.cpp index 4df24602a0f495474707dfdaf820d651f6f31b93..44e942fdc466cf5631547629bd0f7f8916d380eb 100755 --- a/simulators/c++2/src_simulator/app/TMLTask.cpp +++ b/simulators/c++2/src_simulator/app/TMLTask.cpp @@ -362,7 +362,7 @@ unsigned int TMLTask::getState() const{ } TMLTransaction* TMLTask::getNextTransaction(TMLTime iEndSchedule) const{ - std::cout<<"TMLTask get next trans"<<std::endl; + //std::cout<<"TMLTask get next trans"<<std::endl; return (_currCommand==0)?0:_currCommand->getCurrTransaction(); //return (_currCommand==0 || _isScheduled)?0:_currCommand->getCurrTransaction(); } diff --git a/simulators/c++2/src_simulator/app/TMLWriteCommand.cpp b/simulators/c++2/src_simulator/app/TMLWriteCommand.cpp index 8f8a4c9a6b52da35d10a128ed9dd7ed2b8631923..7001e2e016529efcf98a6367fa1a4e5788682a9d 100755 --- a/simulators/c++2/src_simulator/app/TMLWriteCommand.cpp +++ b/simulators/c++2/src_simulator/app/TMLWriteCommand.cpp @@ -50,13 +50,13 @@ TMLWriteCommand::TMLWriteCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLeng } void TMLWriteCommand::execute(){ - std::cout << "in write " << _channel << "\n"; - std::cout << "Length of write:" << _length << std::endl; + //std::cout << "in write " << _channel << "\n"; + //std::cout << "Length of write:" << _length << std::endl; _channel->write(); //std::cout << "channel not zero\n"; - std::cout << _currTransaction->getVirtualLength() << " samples written\n"; + //std::cout << _currTransaction->getVirtualLength() << " samples written\n"; _progress+=_currTransaction->getVirtualLength(); - std::cout << "WriteCommand progress: " << _progress << std::endl << std::endl; + //std::cout << "WriteCommand progress: " << _progress << std::endl << std::endl; //_task->setEndLastTransaction(_currTransaction->getEndTime()); _task->addTransaction(_currTransaction); //std::cout << "Trans written: " << _currTransaction->toString() << "\n"; diff --git a/simulators/c++2/src_simulator/app/TMLbrbwChannel.cpp b/simulators/c++2/src_simulator/app/TMLbrbwChannel.cpp index 16017733dcb7a02a18e3027c8047d1f11fde2845..2b6d56954494eb0ed6cf5b32c9401f48d4985450 100755 --- a/simulators/c++2/src_simulator/app/TMLbrbwChannel.cpp +++ b/simulators/c++2/src_simulator/app/TMLbrbwChannel.cpp @@ -61,7 +61,7 @@ void TMLbrbwChannel::testRead(TMLTransaction* iTrans){ } void TMLbrbwChannel::write(){ -std::cout<<"write!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<std::endl; + //std::cout<<"write!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<std::endl; #ifdef LOSS_ENABLED if (_maxNbOfLosses > _nbOfLosses){ TMLLength aLostBytes = _writeTrans->getVirtualLength() * _lossRate + _lossRemainder; @@ -70,12 +70,12 @@ std::cout<<"write!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<std::endl; //aLostBytes /= 100; aLostBytes = min(aLostBytes/100, _maxNbOfLosses - _nbOfLosses); _content += _writeTrans->getVirtualLength() - aLostBytes; - std::cout << "Bytes to write: " << _writeTrans->getVirtualLength()-aLostBytes << "\n"; - std::cout << "Bytes lost: " << aLostBytes << "\n"; + //std::cout << "Bytes to write: " << _writeTrans->getVirtualLength()-aLostBytes << "\n"; + //std::cout << "Bytes lost: " << aLostBytes << "\n"; _nbOfLosses += aLostBytes; } else { #endif - std::cout << "write all " << _writeTrans->getVirtualLength() << "\n"; + //std::cout << "write all " << _writeTrans->getVirtualLength() << "\n"; _content+=_writeTrans->getVirtualLength(); #ifdef LOSS_ENABLED } diff --git a/simulators/c++2/src_simulator/arch/Bus.cpp b/simulators/c++2/src_simulator/arch/Bus.cpp index ecafa4852a429a55971104ec7f6d6b956349f31f..4f5e782a26cde7b62ae7cf6a223701fbd53c6e19 100644 --- a/simulators/c++2/src_simulator/arch/Bus.cpp +++ b/simulators/c++2/src_simulator/arch/Bus.cpp @@ -91,7 +91,7 @@ void Bus::schedule(){ //Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions bool Bus::addTransaction(TMLTransaction* iTransToBeAdded){ - std::cout << "Bus add trans ####" << _nextTransaction << "\n"; + //std::cout << "Bus add trans ####" << _nextTransaction << "\n"; _endSchedule = _nextTransaction->getEndTime(); //std::cout << "set end time to " << _endSchedule << "\n"; //_transactList.push_back(_nextTransaction); @@ -107,7 +107,7 @@ bool Bus::addTransaction(TMLTransaction* iTransToBeAdded){ #endif _nextTransaction = 0; _schedulingNeeded=true; - std::cout << "End Bus add trans\n"; + //std::cout << "End Bus add trans\n"; return true; } @@ -257,14 +257,14 @@ void Bus::latencies2XML(std::ostringstream& glob, unsigned int id1, unsigned int //Returns the next signal change (for vcd output) void Bus::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ - std::cout<<"bus getnext"<<std::endl; + //std::cout<<"bus getnext"<<std::endl; //std::ostringstream outp; //std::cout << _transactList.size() << " elements in List of " << _name << std::endl; if (iInit){ _posTrasactListVCD=_transactList.begin(); _previousTransEndTime=0; _vcdOutputState=INIT_BUS; - std::cout<<"bus init"<<std::endl; + //std::cout<<"bus init"<<std::endl; } if (_posTrasactListVCD == _transactList.end()){ //outp << VCD_PREFIX << vcdValConvert(END_IDLE_BUS) << "bus" << _ID; @@ -272,13 +272,13 @@ void Bus::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ //oNoMoreTrans=true; //return _previousTransEndTime; new (oSigData) SignalChangeData(END_IDLE_BUS, _previousTransEndTime, this); - std::cout<<"bus end "<<std::endl; + //std::cout<<"bus end "<<std::endl; }else{ TMLTransaction* aCurrTrans=*_posTrasactListVCD; //oNoMoreTrans=false; switch (_vcdOutputState){ case END_READ_BUS: - std::cout<<"BUS END_READ_BUS"<<std::endl; + //std::cout<<"BUS END_READ_BUS"<<std::endl; do{ _previousTransEndTime=(*_posTrasactListVCD)->getEndTime(); _posTrasactListVCD++; @@ -297,7 +297,7 @@ void Bus::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ //return _previousTransEndTime; break; case END_WRITE_BUS: - std::cout<<"BUS END_WRTIE_BUS"<<std::endl; + //std::cout<<"BUS END_WRTIE_BUS"<<std::endl; do{ _previousTransEndTime=(*_posTrasactListVCD)->getEndTime(); _posTrasactListVCD++; @@ -316,7 +316,7 @@ void Bus::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ //return _previousTransEndTime; break; case INIT_BUS: - std::cout<<"BUS INIT_BUS"<<std::endl; + //std::cout<<"BUS INIT_BUS"<<std::endl; if (aCurrTrans->getStartTimeOperation()!=0){ _vcdOutputState=END_IDLE_BUS; //outp << VCD_PREFIX << vcdValConvert(END_IDLE_BUS) << "bus" << _ID; @@ -326,7 +326,7 @@ void Bus::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ return; } case END_IDLE_BUS: - std::cout<<"BUS END_IDLE_BUS"<<std::endl; + //std::cout<<"BUS END_IDLE_BUS"<<std::endl; if (aCurrTrans->getCommand()->getTask()==aCurrTrans->getChannel()->getBlockedReadTask()){ _vcdOutputState=END_READ_BUS; new (oSigData) SignalChangeData(END_READ_BUS, aCurrTrans->getStartTimeOperation(), this); diff --git a/simulators/c++2/src_simulator/arch/CPU.cpp b/simulators/c++2/src_simulator/arch/CPU.cpp index 7eb14f6474a3de5ef686b9c814ad4caaf953ad75..980964ea42163a533d969b32c66daa15efc7f2ca 100644 --- a/simulators/c++2/src_simulator/arch/CPU.cpp +++ b/simulators/c++2/src_simulator/arch/CPU.cpp @@ -51,7 +51,7 @@ double CPU::averageLoad (unsigned int n) const{ _maxEndTime=max(_maxEndTime,_endTime); } } - std::cout<<"max end time is "<<_maxEndTime<<std::endl; + //std::cout<<"max end time is "<<_maxEndTime<<std::endl; for( TransactionList::const_iterator i = _transactList.begin(); i != _transactList.end(); ++i ) { if( (*i)->getTransactCoreNumber() == n ){ _averageLoad += (*i)->getEndTime() - (*i)->getStartTime(); @@ -124,8 +124,8 @@ void CPU::schedule2HTML(std::ofstream& myfile) const { TMLTime aCurrTime = 0; for( TransactionList::const_iterator i = _transactList.begin(); i != _transactList.end(); ++i ) { - std::cout<<"get transaction core number is: "<<(*i)->getTransactCoreNumber()<<std::endl; - std::cout<<"time : "<<_cycleTime<<std::endl; + //std::cout<<"get transaction core number is: "<<(*i)->getTransactCoreNumber()<<std::endl; + //std::cout<<"time : "<<_cycleTime<<std::endl; //std::cout << "CPU:calcSTL: html of CPU " << _name << ": " << (*i)->toString() << std::endl; if( (*i)->getTransactCoreNumber() == this->_cycleTime ){ TMLTransaction* aCurrTrans = *i; diff --git a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp index 308aaa8c2286f21377e0a3e3d518daee42b8b7f3..4028e122f6ba5486a59d096e248af328fc89befc 100644 --- a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp +++ b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp @@ -110,13 +110,13 @@ void MultiCoreCPU::initCore(){ TMLTime MultiCoreCPU::getMinEndSchedule(){ TMLTime minTime=multiCore[0]; for( TMLTime i = 0; i < multiCore.size(); i++){ - std::cout<<"core number is: "<<i<<" end schedule is "<<multiCore[i]<<std::endl; + //std::cout<<"core number is: "<<i<<" end schedule is "<<multiCore[i]<<std::endl; if( minTime >= multiCore[i]){ minTime=multiCore[i]; coreNumber=i; } } - std::cout<<"in getMinEndSchedule core number is "<<coreNumber<<std::endl; + //std::cout<<"in getMinEndSchedule core number is "<<coreNumber<<std::endl; return minTime; } @@ -149,12 +149,12 @@ std::cout<<"getNextTransaction"<<_name<<std::endl; } void MultiCoreCPU::calcStartTimeLength(TMLTime iTimeSlice){ -std::cout<<"calcStartTimeLength"<<_name<<std::endl; + //std::cout<<"calcStartTimeLength"<<_name<<std::endl; #ifdef DEBUG_CPU std::cout << "CPU:calcSTL: scheduling decision of CPU " << _name << ": " << _nextTransaction->toString() << std::endl; #endif #ifdef BUS_ENABLED -std::cout << "CPU:calcSTL: scheduling decision of CPU " << _name << ": " << _nextTransaction->toString() << std::endl; + std::cout << "CPU:calcSTL: scheduling decision of CPU " << _name << ": " << _nextTransaction->toString() << std::endl; //std::cout << " " << std::endl; TMLChannel* aChannel=_nextTransaction->getCommand()->getChannel(0); //std::cout << "after get channel " << std::endl; diff --git a/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp b/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp index d528b73267a381e33a9940b623bef4e6dd2938a9..346ac1b21c0a9b2e4f7b4e6a10ebf24bad5c318a 100644 --- a/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp +++ b/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp @@ -197,7 +197,7 @@ double SchedulableDevice::averageLoad() const{ TMLTime _endTime= (*i)->getEndTime(); _maxEndTime=max(_maxEndTime,_endTime); } - std::cout<<"max end time is "<<_maxEndTime<<std::endl; + //std::cout<<"max end time is "<<_maxEndTime<<std::endl; for( TransactionList::const_iterator i = _transactList.begin(); i != _transactList.end(); ++i ) { _averageLoad += (*i)->getEndTime() - (*i)->getStartTime(); @@ -264,9 +264,9 @@ void SchedulableDevice::schedule2HTML(std::ofstream& myfile) const { TMLTime aCurrTime = 0; for( TransactionList::const_iterator i = _transactList.begin(); i != _transactList.end(); ++i ) { - std::cout<<"get transaction core number is: "<<(*i)->getTransactCoreNumber()<<std::endl; - std::cout<<"time : "<<_cycleTime<<std::endl; - std::cout << "CPU:calcSTL: html of CPU " << _name << ": " << (*i)->toString() << std::endl; + //std::cout<<"get transaction core number is: "<<(*i)->getTransactCoreNumber()<<std::endl; + //std::cout<<"time : "<<_cycleTime<<std::endl; + //std::cout << "CPU:calcSTL: html of CPU " << _name << ": " << (*i)->toString() << std::endl; //if( (*i)->getTransactCoreNumber() == this->_cycleTime ){ TMLTransaction* aCurrTrans = *i; unsigned int aBlanks = aCurrTrans->getStartTime() - aCurrTime; diff --git a/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp b/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp index 1051283fa3ff1b8a1d477aa5b49225452dc60e8f..9eb8cd517eddf5cd4e3d1e009902f9671cb8f7af 100644 --- a/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp +++ b/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp @@ -88,7 +88,7 @@ SingleCoreCPU::~SingleCoreCPU(){ } TMLTransaction* SingleCoreCPU::getNextTransaction(){ -std::cout<<"getNextTransaction!!!!!"<<std::endl; + //std::cout<<"getNextTransaction!!!!!"<<std::endl; #ifdef BUS_ENABLED if (_masterNextTransaction==0 || _nextTransaction==0){ return _nextTransaction; @@ -120,23 +120,23 @@ void SingleCoreCPU::calcStartTimeLength(TMLTime iTimeSlice){ std::cout << "CPU:calcSTL: scheduling decision of CPU " << _name << ": " << _nextTransaction->toString() << std::endl; #endif #ifdef BUS_ENABLED - std::cout << "CPU:calcSTL: scheduling decision of CPU " << _name << ": " << _nextTransaction->toString() << std::endl; - std::cout << "get channel " << std::endl; + //std::cout << "CPU:calcSTL: scheduling decision of CPU " << _name << ": " << _nextTransaction->toString() << std::endl; + //std::cout << "get channel " << std::endl; TMLChannel* aChannel=_nextTransaction->getCommand()->getChannel(0); - std::cout << "after get channel " << std::endl; + //std::cout << "after get channel " << std::endl; if (aChannel==0) { //std::cout << "no channel " << std::endl; _masterNextTransaction=0; } else { - std::cout << "get bus " << std::endl; + //std::cout << "get bus " << std::endl; _masterNextTransaction= getMasterForBus(aChannel->getFirstMaster(_nextTransaction)); - std::cout << "after get first bus " << std::endl; + //std::cout << "after get first bus " << std::endl; if (_masterNextTransaction!=0){ - std::cout << "before register transaction at bus " << _masterNextTransaction->toString() << std::endl; + //std::cout << "before register transaction at bus " << _masterNextTransaction->toString() << std::endl; _masterNextTransaction->registerTransaction(_nextTransaction); - std::cout << "Transaction registered at bus " << _masterNextTransaction->toString() << std::endl; + //std::cout << "Transaction registered at bus " << _masterNextTransaction->toString() << std::endl; } else { - std::cout << " NO MASTER NEXT TRANSACTION " << std::endl; + //std::cout << " NO MASTER NEXT TRANSACTION " << std::endl; } } #endif @@ -144,7 +144,7 @@ void SingleCoreCPU::calcStartTimeLength(TMLTime iTimeSlice){ TMLTime aStartTime = max(_endSchedule,_nextTransaction->getRunnableTime()); TMLTime aReminder = aStartTime % _timePerCycle; if (aReminder!=0) aStartTime+=_timePerCycle - aReminder; - std::cout << "CPU: set start time in CPU=" << aStartTime << " Reminder=" << aReminder <<"\n"; + //std::cout << "CPU: set start time in CPU=" << aStartTime << " Reminder=" << aReminder <<"\n"; _nextTransaction->setStartTime(aStartTime); @@ -174,7 +174,7 @@ void SingleCoreCPU::calcStartTimeLength(TMLTime iTimeSlice){ } void SingleCoreCPU::truncateAndAddNextTransAt(TMLTime iTime){ - std::cout<<"cpu truncatenextTransct"<<std::endl; + //std::cout<<"cpu truncatenextTransct"<<std::endl; //std::cout << "CPU:schedule BEGIN " << _name << "+++++++++++++++++++++++++++++++++\n"; //return truncateNextTransAt(iTime); //not a problem if scheduling does not take place at time when transaction is actually truncated, tested @@ -234,10 +234,10 @@ TMLTime SingleCoreCPU::truncateNextTransAt(TMLTime iTime){ } bool SingleCoreCPU::addTransaction(TMLTransaction* iTransToBeAdded){ -std::cout<<"addTransaction"<<std::endl; + //std::cout<<"addTransaction"<<std::endl; bool aFinish; //TMLTransaction* aTransCopy=0; - std::cout << "*************** LOOKING for master of" << _nextTransaction->toString() << std::endl; + //std::cout << "*************** LOOKING for master of" << _nextTransaction->toString() << std::endl; if (_masterNextTransaction==0){ aFinish=true; #ifdef DEBUG_CPU @@ -251,31 +251,31 @@ std::cout<<"addTransaction"<<std::endl; //std::cout << "*************** LOOKING for master of" << _nextTransaction->toString() << std::endl; BusMaster* aFollowingMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); if (aFollowingMaster==0){ - std::cout << "1\n"; + //std::cout << "1\n"; aFinish=true; //aTransCopy = new TMLTransaction(*_nextTransaction); //_nextTransaction = aTransCopy; BusMaster* aTempMaster = getMasterForBus(_nextTransaction->getChannel()->getFirstMaster(_nextTransaction)); - std::cout << "2\n"; + //std::cout << "2\n"; Slave* aTempSlave= _nextTransaction->getChannel()->getNextSlave(_nextTransaction); - std::cout << "3\n"; + //std::cout << "3\n"; aTempMaster->addBusContention(_nextTransaction->getStartTime()-max(_endSchedule,_nextTransaction->getRunnableTime())); while (aTempMaster!=0){ - std::cout << "3a\n"; + //std::cout << "3a\n"; aTempMaster->addTransaction(_nextTransaction); - std::cout << "3b\n"; + //std::cout << "3b\n"; //if (aTempSlave!=0) aTempSlave->addTransaction(_nextTransaction); if (aTempSlave!=0) aTempSlave->addTransaction(_nextTransaction); //NEW - std::cout << "4\n"; + //std::cout << "4\n"; aTempMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); - std::cout << "5\n"; + //std::cout << "5\n"; aTempSlave= _nextTransaction->getChannel()->getNextSlave(_nextTransaction); } - std::cout << "6\n"; + //std::cout << "6\n"; } else { - std::cout << _name << " bus transaction next round" << std::endl; + //std::cout << _name << " bus transaction next round" << std::endl; _masterNextTransaction=aFollowingMaster; - std::cout << "7\n"; + //std::cout << "7\n"; _masterNextTransaction->registerTransaction(_nextTransaction); aFinish=false; } @@ -311,7 +311,7 @@ std::cout<<"addTransaction"<<std::endl; void SingleCoreCPU::schedule(){ //std::cout <<"Hello\n"; - std::cout << "CPU:schedule BEGIN " << _name << "+++++++++++++++++++++++++++++++++\n"; + //std::cout << "CPU:schedule BEGIN " << _name << "+++++++++++++++++++++++++++++++++\n"; TMLTime aTimeSlice = _scheduler->schedule(_endSchedule); //_schedulingNeeded=false; 05/05/11 //std::cout << "1\n"; @@ -334,7 +334,7 @@ void SingleCoreCPU::schedule(){ } //std::cout << "5\n"; if (_nextTransaction!=0 && aOldTransaction != _nextTransaction) calcStartTimeLength(aTimeSlice); - std::cout << "CPU:schedule END " << _name << "+++++++++++++++++++++++++++++++++\n"; + //std::cout << "CPU:schedule END " << _name << "+++++++++++++++++++++++++++++++++\n"; } //std::string SingleCoreCPU::toString() const{ @@ -542,7 +542,7 @@ void SingleCoreCPU::streamBenchmarks(std::ostream& s) const{ s << TAG_CPUo << " id=\"" << _ID << "\" name=\"" << _name << "\">" << std::endl; if (_simulatedTime!=0) s << TAG_UTILo << (static_cast<float>(_busyCycles)/static_cast<float>(_simulatedTime)) << TAG_UTILc; s << TAG_ENERGYo << ( (_simulatedTime/_timePerCycle)*_static_consumPerCycle) + ((_busyCycles/_timePerCycle)*_dynamic_consumPerCycle) << TAG_ENERGYc; - std::cout<< "power consumption "<< ((_simulatedTime/_timePerCycle)*_static_consumPerCycle) + ((_busyCycles/_timePerCycle)*_dynamic_consumPerCycle)<< std::endl; + //std::cout<< "power consumption "<< ((_simulatedTime/_timePerCycle)*_static_consumPerCycle) + ((_busyCycles/_timePerCycle)*_dynamic_consumPerCycle)<< std::endl; for(BusMasterList::const_iterator i=_busMasterList.begin(); i != _busMasterList.end(); ++i) (*i)->streamBenchmarks(s); s << TAG_CPUc; diff --git a/simulators/c++2/src_simulator/arch/WorkloadSource.h b/simulators/c++2/src_simulator/arch/WorkloadSource.h index 9857e43c85851472f3c40a0184648a0251b73d31..185a914f4d1e68fc6c8df648a99b5b51a8746801 100644 --- a/simulators/c++2/src_simulator/arch/WorkloadSource.h +++ b/simulators/c++2/src_simulator/arch/WorkloadSource.h @@ -64,7 +64,7 @@ public: WorkloadSource(Priority iPriority, WorkloadSource** aSourceArray, unsigned int iNbOfSources): _priority(iPriority), _srcArraySpecified(true){ for (unsigned int i=0;i<iNbOfSources;i++){ addWorkloadSource(aSourceArray[i]); - std::cout << "Workload source added " << aSourceArray[i]->toString() << "\n"; + //std::cout << "Workload source added " << aSourceArray[i]->toString() << "\n"; } delete[] aSourceArray; } diff --git a/simulators/c++2/src_simulator/sim/Simulator.cpp b/simulators/c++2/src_simulator/sim/Simulator.cpp index c9cfadf7977e8fea96e2c527ca1e957149b679fa..201ddc0e1edd930c9324685036ab5e530d12fa97 100644 --- a/simulators/c++2/src_simulator/sim/Simulator.cpp +++ b/simulators/c++2/src_simulator/sim/Simulator.cpp @@ -443,7 +443,7 @@ std::cout<<"schedule2HTML--------------------------------------***************** //for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ for(unsigned int j = 0; j < (*i)->getAmoutOfCore(); j++) { - std::cout<<"core number is "<<(*i)->getAmoutOfCore()<<std::endl; + //std::cout<<"core number is "<<(*i)->getAmoutOfCore()<<std::endl; (*i)->schedule2HTML(myfile); (*i)->showPieChart(myfile); (*i)->setCycleTime((*i)->getCycleTime()+1); @@ -459,8 +459,8 @@ std::cout<<"schedule2HTML--------------------------------------***************** (*j)->setStartFlagHTML(true); for(TaskList::const_iterator i = (*j)->getTaskList().begin(); i != (*j)->getTaskList().end(); ++i){ (*j)->setHtmlCurrTask(*i); - std::cout<<"begin fpga html "<<(*j)->toShortString()<<std::endl; - std::cout<<"task is !!!!!"<<(*i)->toString()<<std::endl; + //std::cout<<"begin fpga html "<<(*j)->toShortString()<<std::endl; + //std::cout<<"task is !!!!!"<<(*i)->toString()<<std::endl; (*j)->schedule2HTML(myfile); (*j)->setStartFlagHTML(false); } @@ -674,14 +674,17 @@ bool Simulator::simulate(TMLTransaction*& oLastTrans){ #endif _simComp->setStopFlag(false,""); for(TaskList::const_iterator i=_simComp->getTaskList().begin(); i!=_simComp->getTaskList().end();i++){ + //std::cout << "task preparation:" << (*i)->toString() << std::endl; + //if ((*i)->getCurrCommand()!=0) std::cout<<(*i)->getCurrCommand()->toString() << std::endl; if ((*i)->getCurrCommand()!=0) (*i)->getCurrCommand()->prepare(true); + //std::cout << "task preparation done:" << (*i)->toString() << std::endl; } #ifdef EBRDD_ENABLED for(EBRDDList::const_iterator i=_simComp->getEBRDDIterator(false); i!=_simComp->getEBRDDIterator(true);i++){ if ((*i)->getCurrCommand()!=0) (*i)->getCurrCommand()->prepare(); } #endif - std::cout<<"simulate"<<std::endl; + //std::cout<<"simulate"<<std::endl; for_each(_simComp->getCPUList().begin(), _simComp->getCPUList().end(),std::mem_fun(&CPU::schedule)); for_each(_simComp->getFPGAList().begin(), _simComp->getFPGAList().end(),std::mem_fun(&FPGA::schedule)); @@ -693,15 +696,15 @@ bool Simulator::simulate(TMLTransaction*& oLastTrans){ #endif while ( transLET!=0 && !_simComp->getStopFlag()){ - std::cout<<"come in cpu"<<std::endl; + //std::cout<<"come in cpu"<<std::endl; #ifdef DEBUG_KERNEL std::cout << "kernel:simulate: scheduling decision: " << transLET->toString() << std::endl; #endif commandLET=transLET->getCommand(); - std::cout<<"device is "<<deviceLET->getName()<<std::endl; + //std::cout<<"device is "<<deviceLET->getName()<<std::endl; bool x = deviceLET->addTransaction(0); - std::cout<<"in simulator end addTransactin"<<std::endl; + //std::cout<<"in simulator end addTransactin"<<std::endl; #ifdef DEBUG_KERNEL std::cout << "kernel:simulate: AFTER add trans: " << x << std::endl; #endif @@ -719,7 +722,7 @@ bool Simulator::simulate(TMLTransaction*& oLastTrans){ depFPGA=depTask->getFPGA(); if(depCPU){ - std::cout<<"lets start cpu"<<std::endl; + //std::cout<<"lets start cpu"<<std::endl; if (depCPU!=deviceLET){ #ifdef DEBUG_KERNEL std::cout << "kernel:simulate: Tasks running on different CPUs" << std::endl; @@ -817,7 +820,7 @@ bool Simulator::simulate(TMLTransaction*& oLastTrans){ #endif } oLastTrans=transLET; - std::cout<<"task is !!!!!"<<oLastTrans->toString()<<std::endl; + //std::cout<<"task is !!!!!"<<oLastTrans->toString()<<std::endl; transLET=getTransLowestEndTime(deviceLET); } diff --git a/src/main/java/tmltranslator/TMLActivity.java b/src/main/java/tmltranslator/TMLActivity.java index 03594e919a5a9ddb4f88ac548bfaf0e4f3a57b95..2c291a1fa8521488b66b8c507a9ba747938ab488 100755 --- a/src/main/java/tmltranslator/TMLActivity.java +++ b/src/main/java/tmltranslator/TMLActivity.java @@ -149,7 +149,7 @@ public class TMLActivity extends TMLElement { return found; } - private void replaceAllNext(TMLActivityElement _oldE, TMLActivityElement _newE) { + public void replaceAllNext(TMLActivityElement _oldE, TMLActivityElement _newE) { TMLActivityElement tmlae; for (int i = 0; i < elements.size(); i++) { tmlae = elements.elementAt(i); diff --git a/src/main/java/tmltranslator/TMLActivityElement.java b/src/main/java/tmltranslator/TMLActivityElement.java index a223aab70097113122d13aec1f2fadb77c10cc08..a0511572ad70fc96d572a2d6bf45e96f2e043b68 100755 --- a/src/main/java/tmltranslator/TMLActivityElement.java +++ b/src/main/java/tmltranslator/TMLActivityElement.java @@ -50,7 +50,7 @@ import java.util.Vector; * @version 1.0 23/11/2005 * @author Ludovic APVRILLE */ -public abstract class TMLActivityElement extends TMLElement{ +public abstract class TMLActivityElement extends TMLElement { protected Vector<TMLActivityElement> nexts; public SecurityPattern securityPattern; private String value=""; diff --git a/src/main/java/tmltranslator/TMLChannel.java b/src/main/java/tmltranslator/TMLChannel.java index 9fbfa817c0dfc703dae014d020969828dbdd01d6..d321d1793036006d85672899e9bf7c1b7a48ea58 100755 --- a/src/main/java/tmltranslator/TMLChannel.java +++ b/src/main/java/tmltranslator/TMLChannel.java @@ -84,7 +84,7 @@ public class TMLChannel extends TMLCommunicationElement { private String SP = " "; private int priority; - private int vc = -1; + private int vc = 0; public ArrayList<TMLTask> originalOriginTasks = new ArrayList<TMLTask>(); public ArrayList<TMLTask> originalDestinationTasks = new ArrayList<TMLTask>(); @@ -191,6 +191,7 @@ public class TMLChannel extends TMLCommunicationElement { public int getNumberOfSamples() { return nbOfSamples;} public void setVC(int vc) { + TraceManager.addDev("Setting VC to " + vc + " for channel " + getName()); this.vc = vc; } @@ -517,9 +518,13 @@ public class TMLChannel extends TMLCommunicationElement { String s = TAB + "CHANNEL" + SP + name + CR; if (isBasicChannel()) { s += TAB2 + "Origin task: " + originTask.getName() + CR; - s += TAB2 + "Origin port: " + originPort.getName() + CR; + if (originPort != null) { + s += TAB2 + "Destination port: " + originPort.getName() + CR; + } s += TAB2 + "Destination task: " + destinationTask.getName() + CR; - s += TAB2 + "Destination port: " + destinationPort.getName() + CR; + if (destinationPort != null) { + s += TAB2 + "Destination port: " + destinationPort.getName() + CR; + } } if (isAForkChannel()) { s += TAB2 + "Origin task: " + originTasks.get(0).getName() + CR; diff --git a/src/main/java/tmltranslator/TMLChoice.java b/src/main/java/tmltranslator/TMLChoice.java index 9a2f7aa31caeb755effb7fcc1dc08faf3de9560e..465412eac9d8302add1931d00c42432ed068ac88 100755 --- a/src/main/java/tmltranslator/TMLChoice.java +++ b/src/main/java/tmltranslator/TMLChoice.java @@ -58,7 +58,14 @@ public class TMLChoice extends TMLActivityElement{ } public void addGuard(String _g) { - guards.add(_g); + String g = _g.trim(); + if(!(g.startsWith("["))) { + g = "[" + g; + } + if(!(g.endsWith("]"))) { + g = g + "]"; + } + guards.add(g); } public int getNbGuard() { diff --git a/src/main/java/tmltranslator/TMLError.java b/src/main/java/tmltranslator/TMLError.java index e839315cca2f3190977b3dad040a71b9a9969383..50f7c42a2714647f65e21264fb7aa3f683546605 100755 --- a/src/main/java/tmltranslator/TMLError.java +++ b/src/main/java/tmltranslator/TMLError.java @@ -68,4 +68,22 @@ public class TMLError { public TMLError(int _type) { type = _type; } + + public String toString() { + String ret = ""; + ret += message + "."; + if (task != null) { + ret += " Task: " + task.getName(); + } + if (element != null) { + ret += " Activity element: " + element.getName(); + } + if (referenceObject != null) { + ret += " Reference: " + referenceObject.toString(); + } + + return ret; + } + + } \ No newline at end of file diff --git a/src/main/java/tmltranslator/TMLMapping.java b/src/main/java/tmltranslator/TMLMapping.java index 9ed708160bb39b0a605a2b3c3bd854141357a497..a586ba0b187f46f669c1e6d2efc57b1c4aa7adfb 100755 --- a/src/main/java/tmltranslator/TMLMapping.java +++ b/src/main/java/tmltranslator/TMLMapping.java @@ -855,7 +855,7 @@ public class TMLMapping<E> { TraceManager.addDev("\n\nFORKTASK is mapped: " + task.getName()); } } else { - TraceManager.addDev("Non fork task found: " + task.getName()); + //TraceManager.addDev("Non fork task found: " + task.getName()); } if (task.getName().startsWith("JOINTASK_")) { if (!isTaskMapped(task)) { diff --git a/src/main/java/tmltranslator/TMLModeling.java b/src/main/java/tmltranslator/TMLModeling.java index 59b987ddc942840c93979dff1253bd8d401d1d77..49a9a81230e9d7df01737e9ae6d34b628bf1ff71 100755 --- a/src/main/java/tmltranslator/TMLModeling.java +++ b/src/main/java/tmltranslator/TMLModeling.java @@ -697,6 +697,37 @@ public class TMLModeling<E> { return null; } + + public List<TMLElement> getAllElementsWithName(String name) { + Vector<TMLElement> elts = new Vector<>(); + + for(TMLTask task: tasks) { + if (task.getName().compareTo(name) == 0) { + elts.add(task); + } + } + + for(TMLChannel ch: channels) { + if (ch.getName().compareTo(name) == 0) { + elts.add(ch); + } + } + + for(TMLEvent evt: events) { + if (evt.getName().compareTo(name) == 0) { + elts.add(evt); + } + } + + for(TMLRequest req: requests) { + if (req.getName().compareTo(name) == 0) { + elts.add(req); + } + } + + return elts; + } + public List<TMLTask> getTasks() { return tasks; } @@ -753,7 +784,7 @@ public class TMLModeling<E> { list.add(ch); } for (TMLTask task: ch.getOriginTasks()){ - if (task ==t){ + if (task == t){ list.add(ch); } } diff --git a/src/main/java/tmltranslator/TMLSyntaxChecking.java b/src/main/java/tmltranslator/TMLSyntaxChecking.java index 6d01fbb7b1dd4c49455234dcd870fd126bbb91f2..3f935dfef75c002f787cb4027d5f29d141e78695 100755 --- a/src/main/java/tmltranslator/TMLSyntaxChecking.java +++ b/src/main/java/tmltranslator/TMLSyntaxChecking.java @@ -48,10 +48,7 @@ import myutil.TraceManager; import tmltranslator.tomappingsystemc2.DiploSimulatorCodeGenerator; import java.io.StringReader; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; +import java.util.*; /** @@ -77,6 +74,8 @@ public class TMLSyntaxChecking { private final String TIME_UNIT_ERROR = "unknown time unit"; private final String NO_NEXT_OPERATOR_ERROR = "No next operator"; private final String SAME_PORT_NAME = "Two ports have the same name"; + private final String WRONG_PARAMS = "The number of params is not compatible"; + private final String DUPLICATE_NAMES = "Two elements have the same name"; private final String TOO_MANY_MEMORIES = "Channel is mapped on more than one memory"; private final String INVALID_CHANNEL_PATH = "Channel path is invalid"; @@ -117,6 +116,7 @@ public class TMLSyntaxChecking { TraceManager.addDev("Checking syntax of TML Mapping/ Modeling"); if (!syntaxCheckForMappingOnly) { + checkDuplicateNames(); checkReadAndWriteInChannelsEventsAndRequests(); @@ -207,6 +207,41 @@ public class TMLSyntaxChecking { } } + + public void checkDuplicateNames() { + List<TMLElement> elts; + + for(TMLTask task: tmlm.getTasks()) { + elts = tmlm.getAllElementsWithName(task.getName()); + if (elts.size() > 1) { + addError(null, null, DUPLICATE_NAMES + ": invalid task name " + task.getName(), TMLError.ERROR_STRUCTURE); + } + } + + for(TMLChannel ch: tmlm.getChannels()) { + elts = tmlm.getAllElementsWithName(ch.getName()); + if (elts.size() > 1) { + addError(null, null, DUPLICATE_NAMES + ": invalid channel name " + ch.getName(), TMLError.ERROR_STRUCTURE); + } + } + + for(TMLEvent evt: tmlm.getEvents()) { + elts = tmlm.getAllElementsWithName(evt.getName()); + if (elts.size() > 1) { + addError(null, null, DUPLICATE_NAMES + ": invalid event name " + evt.getName(), TMLError.ERROR_STRUCTURE); + } + } + + for(TMLRequest req: tmlm.getRequests()) { + elts = tmlm.getAllElementsWithName(req.getName()); + if (elts.size() > 1) { + addError(null, null, DUPLICATE_NAMES + ": invalid request name " + req.getName(), TMLError.ERROR_STRUCTURE); + } + } + + + } + //added by minh hiep public void checkAValidPortName() { List<TMLChannel> tmlChannels = tmlm.getChannels(); @@ -340,12 +375,16 @@ public class TMLSyntaxChecking { } if (elt instanceof TMLSendEvent) { - evt = ((TMLSendEvent) elt).getEvent(); - if (evt.isBasicEvent()) { - //TraceManager.addDev("send evt= " + evt.getName() + " task=" + t.getName() + " origin=" + evt.getOriginTask().getName()); - if (evt.getOriginTask() != t) { - addError(t, elt, evt.getName() + ": " + WRONG_ORIGIN_EVENT, TMLError.ERROR_BEHAVIOR); + //TraceManager.addDev("In Task " + t.getName() + " = " + evt); + if (evt == null) { + addError(t, elt, "Null event in SendEvt of Task " + t.getName(), TMLError.ERROR_BEHAVIOR); + } else { + if (evt.isBasicEvent()) { + //TraceManager.addDev("send evt= " + evt.getName() + " task=" + t.getName() + " origin=" + evt.getOriginTask().getName()); + if (evt.getOriginTask() != t) { + addError(t, elt, evt.getName() + ": " + WRONG_ORIGIN_EVENT, TMLError.ERROR_BEHAVIOR); + } } } } @@ -452,14 +491,24 @@ public class TMLSyntaxChecking { } else if (elt instanceof TMLSendEvent) { tmlase = (TMLSendEvent) elt; evt = tmlase.getEvent(); - for (j = 0; j < tmlase.getNbOfParams(); j++) { - action = tmlase.getParam(j); - if ((action != null) && (action.length() > 0)) { - type = evt.getType(j); - if ((type == null) || (type.getType() == TMLType.NATURAL)) { - parsing(t, elt, "actionnat", action); - } else { - parsing(t, elt, "actionbool", action); + + if (evt == null) { + addError(t, elt, "Empty event in Sendevent of task " + t.getTaskName(), TMLError.ERROR_BEHAVIOR); + } else if (tmlase.getNbOfParams() != evt.getNbOfParams()) { + addError(t, elt, WRONG_PARAMS + " between event " + evt.getName() + + " (nb:" + evt.getNbOfParams() + + ") and send event (nb:" + tmlase.getNbOfParams() + ") in task " + t.getTaskName(), TMLError.ERROR_BEHAVIOR); + } else { + + for (j = 0; j < tmlase.getNbOfParams(); j++) { + action = tmlase.getParam(j); + if ((action != null) && (action.length() > 0)) { + type = evt.getType(j); + if ((type == null) || (type.getType() == TMLType.NATURAL)) { + parsing(t, elt, "actionnat", action); + } else { + parsing(t, elt, "actionbool", action); + } } } } @@ -467,26 +516,35 @@ public class TMLSyntaxChecking { } else if (elt instanceof TMLWaitEvent) { tmlwe = (TMLWaitEvent) elt; evt = tmlwe.getEvent(); - //TraceManager.addDev("Nb of params of wait event:" + tmlwe.getNbOfParams()); - for (j = 0; j < tmlwe.getNbOfParams(); j++) { - action = tmlwe.getParam(j).trim(); - if ((action != null) && (action.length() > 0)) { - if (!(Conversion.isId(action))) { - addError(t, elt, SYNTAX_ERROR_VARIABLE_EXPECTED + " in expression " + action, TMLError.ERROR_BEHAVIOR); - } else { - // Declared variable? - attr = t.getAttributeByName(action); - if (attr == null) { - addError(t, elt, UNDECLARED_VARIABLE + ": " + action + " in expression " + action, TMLError.ERROR_BEHAVIOR); - TraceManager.addDev("1 In task: " + t.getName() + " extended name:" + t.getNameExtension()); + //TraceManager.addDev("Nb of params of wait event:" + tmlwe.getNbOfParams() + " task=" + t.getTaskName()); + + + if (tmlwe.getNbOfParams() != evt.getNbOfParams()) { + addError(t, elt, WRONG_PARAMS + " between event " + evt.getName() + + " (nb:" + evt.getNbOfParams() + + ") and wait event (nb:" + tmlwe.getNbOfParams() + ") in task " + t.getTaskName(), TMLError.ERROR_BEHAVIOR); + } else { + + for (j = 0; j < tmlwe.getNbOfParams(); j++) { + action = tmlwe.getParam(j).trim(); + if ((action != null) && (action.length() > 0)) { + if (!(Conversion.isId(action))) { + addError(t, elt, SYNTAX_ERROR_VARIABLE_EXPECTED + " in expression " + action, TMLError.ERROR_BEHAVIOR); } else { - //TraceManager.addDev("Nb of params:" + tmlwe.getEvent().getNbOfParams() + " j:" + j); - if (tmlwe.getEvent().getType(j).getType() == 0) { - TraceManager.addDev("0"); - } - if (attr.getType().getType() != tmlwe.getEvent().getType(j).getType()) { - TraceManager.addDev("Type0:" + attr.getType().getType() + " type1:" + tmlwe.getEvent().getType(j).getType()); - addError(t, elt, VARIABLE_ERROR + " :" + action + " in expression " + action, TMLError.ERROR_BEHAVIOR); + // Declared variable? + attr = t.getAttributeByName(action); + if (attr == null) { + addError(t, elt, UNDECLARED_VARIABLE + ": " + action + " in expression " + action, TMLError.ERROR_BEHAVIOR); + TraceManager.addDev("1 In task: " + t.getName() + " extended name:" + t.getNameExtension()); + } else { + //TraceManager.addDev("Nb of params:" + tmlwe.getEvent().getNbOfParams() + " j:" + j); + if (tmlwe.getEvent().getType(j).getType() == 0) { + TraceManager.addDev("0"); + } + if (attr.getType().getType() != tmlwe.getEvent().getType(j).getType()) { + TraceManager.addDev("Type0:" + attr.getType().getType() + " type1:" + tmlwe.getEvent().getType(j).getType()); + addError(t, elt, VARIABLE_ERROR + " :" + action + " in expression " + action, TMLError.ERROR_BEHAVIOR); + } } } } @@ -740,12 +798,13 @@ public class TMLSyntaxChecking { // Then we find the corresponding CPUs for (TMLTask task : tasks) { //We collect all the CPUs - //TraceManager.addDev("Collecting all CPUs of task: " + task.getTaskName()); + TraceManager.addDev("Collecting all CPUs of task: " + task.getTaskName()); for (HwExecutionNode origin : mapping.getAllHwExecutionNodesOfTask(task)) { // And then we check the paths between node and all the nodes of ch for (HwCommunicationNode destination : mapping.getAllCommunicationNodesOfChannel(ch)) { - //TraceManager.addDev("Computing path between " + origin + " and " + destination); + TraceManager.addDev("Computing path between " + origin.getName() + " and " + destination.getName()); if (!mapping.checkPath(origin, destination)) { + TraceManager.addDev("Checking checkPathToMemoryFromCPU: Adding error"); addError(null, null, INVALID_CHANNEL_PATH + ": " + ch.getName(), TMLError.ERROR_STRUCTURE); return; } @@ -756,11 +815,13 @@ public class TMLSyntaxChecking { } private void checkPathToMemoryFromAllHwCommNode(TMLChannel ch) { + TraceManager.addDev("Checking checkPathToMemoryFromAllHwCommNode"); HwMemory mem = mapping.getMemoryOfChannel(ch); if (mem != null) { for (HwCommunicationNode origin : mapping.getAllCommunicationNodesOfChannel(ch)) { if (origin != mem) { if (!mapping.checkPath(origin, mem)) { + TraceManager.addDev("Checking checkPathToMemoryFromAllHwCommNode: Adding error"); addError(null, null, INVALID_CHANNEL_PATH + ": " + ch.getName(), TMLError.ERROR_STRUCTURE); return; } diff --git a/src/main/java/tmltranslator/TMLTask.java b/src/main/java/tmltranslator/TMLTask.java index bb9240e9a11e8fb18690106d801ce52762e82823..aed8f53460e78f0640902f589b9781867baef02b 100755 --- a/src/main/java/tmltranslator/TMLTask.java +++ b/src/main/java/tmltranslator/TMLTask.java @@ -113,6 +113,16 @@ public class TMLTask extends TMLElement { attributes.add(_tmla); } + + public void addAttributeIfApplicable(TMLAttribute _tmla) { + for(TMLAttribute att: attributes) { + if (att.getName().compareTo(_tmla.getName()) == 0) { + return; + } + } + attributes.add(_tmla); + } + public List<TMLAttribute> getAttributes() { return attributes; } @@ -379,9 +389,9 @@ public class TMLTask extends TMLElement { writeTMLChannelsList.add(_ch); } - public List<TMLChannel> getTMLChannels() { + /*public List<TMLChannel> getTMLChannels() { return new ArrayList<TMLChannel>(channelsList); - } + }*/ public List<TMLChannel> getReadTMLChannels() { return new ArrayList<TMLChannel>(readTMLChannelsList); diff --git a/src/main/java/tmltranslator/TMLTextSpecification.java b/src/main/java/tmltranslator/TMLTextSpecification.java index 299508698f43bbd7bf2d16e38470c19ca1e667c2..5a9ceb9ece52b2435600fa63c1e9d44725f74c02 100755 --- a/src/main/java/tmltranslator/TMLTextSpecification.java +++ b/src/main/java/tmltranslator/TMLTextSpecification.java @@ -353,6 +353,9 @@ public class TMLTextSpecification<E> { String sb = ""; sb += "//Local variables" + CR; + //TraceManager.addDev("Making activity of task:" + task.getTaskName()); + + for (TMLAttribute attr : task.getAttributes()) { sb += TMLType.getStringType(attr.getType().getType()) + SP + attr.getName(); if ((attr.getInitialValue() != null) && (attr.getInitialValue().length() > 0)) { diff --git a/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java b/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java index d7cf9c87fbcb54d25fdaef7d71a51b4e31589cde..9503391ce5f079731be73462270fccbbdb918c75 100644 --- a/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java +++ b/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java @@ -439,6 +439,9 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator param = ""; } + TraceManager.addDev("\nDetermining routing of " + channel.getName() + ":"); + TraceManager.addDev(channel.toString()); + String ret = determineRouting(tmlmapping.getHwNodeOf(channel.getOriginTask()), tmlmapping.getHwNodeOf(channel.getDestinationTask()), elem); //TraceManager.addDev("------> Routing = " + ret); @@ -654,6 +657,8 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator final List<TMLEvent> events = new ArrayList<TMLEvent>(tmlmodeling.getEvents(task)); final List<TMLRequest> requests = new ArrayList<TMLRequest>(tmlmodeling.getRequests(task)); + //TraceManager.addDev("Handling task=" + task.getTaskName()); + final MappedSystemCTask mst = new MappedSystemCTask(task, channels, events, requests, tmlmapping, mappedChannels, mappedOnCPU); tasks.add(mst); @@ -724,11 +729,18 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator int masterCount = 0; boolean reverse = reverseIn; + String pathS = ""; + for(HwCommunicationNode nodeS: path){ + pathS += nodeS.getName() + " "; + } + //TraceManager.addDev("Path=" + pathS); + if (reverseIn) { slaves.str += ",static_cast<Slave*>(0)"; } else { //firstPart=startNode.getName() + "0"; firstNode = startNode; + //TraceManager.addDev("1. First node=" + firstNode); } for (final HwCommunicationNode commElem : path) { @@ -737,12 +749,14 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator final String memoryInstName = namesGen.memoryInstanceName((HwMemory) commElem); slaves.str += ",static_cast<Slave*>(" + memoryInstName + "),static_cast<Slave*>(" + memoryInstName + ")"; firstNode = null; + //TraceManager.addDev("2. First node=" + firstNode); // firstPart = ""; } else { if (reverse) { if (firstNode == null) { // if ( firstPart.length()==0 ){ firstNode = commElem; + //TraceManager.addDev("3. First node=" + firstNode); // firstPart=commElem.getName(); } else { masters.str += "," + namesGen.busMasterInstanceName(commElem, 0, (HwBus) firstNode); @@ -750,12 +764,14 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator masterCount++; slaves.str += ",static_cast<Slave*>(" + namesGen.communicationNodeInstanceName(commElem, 0) + ")"; firstNode = null; + //TraceManager.addDev("4. First node=" + firstNode); //firstPart=""; } } else { if (firstNode == null) { // if ( firstPart.length()==0 ){ firstNode = commElem; + //TraceManager.addDev("5. First node=" + firstNode); slaves.str += ",static_cast<Slave*>(" + namesGen.communicationNodeInstanceName(commElem, 0) + ")"; // firstPart = commElem.getName(); // slaves.str+= ",static_cast<Slave*>(" + firstPart + ")"; @@ -764,6 +780,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator // masters.str+= "," + firstPart + "_" + commElem.getName() + "_Master"; masterCount++; firstNode = null; + //TraceManager.addDev("6. First node=" + firstNode); // firstPart=""; } } @@ -771,6 +788,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator } if (reverse) { + //TraceManager.addDev("REVERSE. First node=" + firstNode); masters.str += "," + namesGen.busMasterInstanceName(destNode, 0, (HwBus) firstNode); // masters.str+= "," + destNode.getName() + "0_" + firstPart + "_Master"; @@ -783,8 +801,19 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator } public String determineRouting(HwNode startNode, HwNode destNode, TMLElement commElemToRoute) { + /*if (startNode == null) { + TraceManager.addDev( "Null start node"); + } else { + TraceManager.addDev( "Start node:" + startNode.getName()); + } - /*TraceManager.addDev( "******** -------> ROUTING ROUTING ROUTING\nDetermine routing from " + startNode.getName() + " to " + destNode.getName + if (destNode == null) { + TraceManager.addDev( "Null destNode"); + } else { + TraceManager.addDev( "destNode:" + destNode.getName()); + } + + TraceManager.addDev( "******** -------> ROUTING ROUTING ROUTING\nDetermine routing from " + startNode.getName() + " to " + destNode.getName () );*/ StrWrap masters = new StrWrap(); StrWrap slaves = new StrWrap(); @@ -807,13 +836,16 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator HwMemory memory = getMemConnectedToBusChannelMapped(commNodes, null, commElemToRoute); if (memory == null) { - //TraceManager.addDev("no memories to map"); + TraceManager.addDev("no memories to map"); exploreBuses(0, commNodes, path, startNode, destNode, commElemToRoute); } else { final List<HwCommunicationNode> commNodes2 = new LinkedList<HwCommunicationNode>(commNodes); + //TraceManager.addDev("Explore bus from " + startNode.getName() + " to memory " + memory.getName()); + + if (!exploreBuses(0, commNodes, path, startNode, memory, commElemToRoute)) { - //TraceManager.addDev("NO route to " + memory.getName() + "found!!!!!!!!!!!!!!!!!!!!!!!!!!"); + TraceManager.addDev("NO route to " + memory.getName() + " found!!!!!!!!!!!!!!!!!!!!!!!!!!"); } path.add(memory); @@ -827,9 +859,9 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator hopNum = extractPath(path, masters, slaves, destNode, destNode, true) - hopNum; } - //TraceManager.addDev(commElemToRoute.getName() + " is mapped on:"); + /*TraceManager.addDev(commElemToRoute.getName() + " is mapped on:"); - /*for (HwCommunicationNode commElem : path) { + for (HwCommunicationNode commElem : path) { TraceManager.addDev(commElem.getName()); }*/ diff --git a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java index 60e391a4fcf9315fb2745b85dad826234e624b04..847d25b3aa8d861a07604dc66a7e9b7b47dc34be 100644 --- a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java +++ b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java @@ -244,9 +244,11 @@ public class MappedSystemCTask { constSig = reference + "(ID iID, Priority iPriority, std::string iName, FPGA** iCPUs, unsigned int iNumOfCPUs" + CR; } + TraceManager.addDev("\n***** Task name:" + task.getName()); for (TMLChannel ch : channels) { + TraceManager.addDev("Adding ch " + ch.getExtendedName()); constSig += ", TMLChannel* " + ch.getExtendedName() + CR; } for (TMLEvent evt : events) { diff --git a/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java b/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java index 744b5262eeb4f8beaf1a24972a9f6cfe5799a224..b7e0855c0821e4c14ca2e22379edcaa973e2553a 100644 --- a/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java +++ b/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java @@ -39,6 +39,7 @@ package tmltranslator.tomappingsystemc2; +import myutil.TraceManager; import tmltranslator.*; import java.util.Arrays; @@ -390,6 +391,18 @@ public class NamesGenerationHelper { String busMasterInstanceName(final HwNode element, final int indexCore, final HwBus linkBus) { + /*if (element == null) { + TraceManager.addDev("NULL Hw element"); + } else { + TraceManager.addDev("Hw element=" + element.getName()); + } + + if (linkBus == null) { + TraceManager.addDev("NULL linkBus element"); + } else { + TraceManager.addDev("linkBus element=" + linkBus.getName()); + }*/ + return normalize(busMasterName(element, indexCore, linkBus)); } diff --git a/src/main/java/tmltranslator/tonetwork/Link.java b/src/main/java/tmltranslator/tonetwork/Link.java index 3b5b2624489f346b03d3d2730bd89e386c923b44..9f402ea684f73f64b22fc188a7e999b84b13c06f 100644 --- a/src/main/java/tmltranslator/tonetwork/Link.java +++ b/src/main/java/tmltranslator/tonetwork/Link.java @@ -121,6 +121,7 @@ public class Link { packetOut.addParam(new TMLType(TMLType.NATURAL)); packetOut.addParam(new TMLType(TMLType.NATURAL)); packetOut.addParam(new TMLType(TMLType.NATURAL)); + packetOut.addParam(new TMLType(TMLType.NATURAL)); tmlm.addEvent(packetOut); chOutToIN = new TMLChannel("channelBetweenOUTToIN__" + getNaming(), @@ -131,7 +132,7 @@ public class Link { feedbackPerVC = new TMLEvent[nbOfVCs]; for(int i=0; i<nbOfVCs; i++) { - feedbackPerVC[i] = new TMLEvent("Feedback__" + getNaming(), + feedbackPerVC[i] = new TMLEvent("Feedback__" + getNaming() + "_" + i, null, 8, true); tmlm.addEvent(feedbackPerVC[i]); } diff --git a/src/main/java/tmltranslator/tonetwork/TMAP2Network.java b/src/main/java/tmltranslator/tonetwork/TMAP2Network.java index d805b16f948a21c08b90b48276292878b81d8aac..6cbb7ce3571f010abdde47bc85df856c2a20945a 100644 --- a/src/main/java/tmltranslator/tonetwork/TMAP2Network.java +++ b/src/main/java/tmltranslator/tonetwork/TMAP2Network.java @@ -56,8 +56,7 @@ import java.util.List; */ public class TMAP2Network<E> { - private TMLModeling<?> tmlmodeling; - private TMLArchitecture tmlarchi; + private TMLMapping<?> tmlmapping; private boolean debug; @@ -75,6 +74,8 @@ public class TMAP2Network<E> { public final static String[] PORT_NAME = {"North", "South", "West", "East", "Internal"}; + private HashMap<TMLChannel, String> IDsOfChannels; + public TMAP2Network(TMLMapping<?> _tmlmapping, int nocSize) { tmlmapping = _tmlmapping; @@ -82,6 +83,14 @@ public class TMAP2Network<E> { this.nocSize = nocSize; } + public String getChannelID(TMLChannel ch) { + return IDsOfChannels.get(ch); + } + + public void putTMLChannelID(TMLChannel ch, String id) { + IDsOfChannels.put(ch, "" + id); + } + public TMLMapping<?> getTMLMapping() { return tmlmapping; } @@ -214,7 +223,8 @@ public class TMAP2Network<E> { for(HwNode node: tmla.getHwNodes()) { if (node instanceof HwExecutionNode) { nbOfHwExecutionNode ++; - newList.add(node); + //newList.add(node); + HwBus bus = new HwBus(node.getName() + "__bus"); HwMemory mem = new HwMemory(node.getName() + "__mem"); newList.add(bus); @@ -229,6 +239,7 @@ public class TMAP2Network<E> { tmla.addHwLink(memToBus); } } + for(HwNode node: newList) { tmla.addHwNode(node); } @@ -307,8 +318,8 @@ public class TMAP2Network<E> { } // Create routers around - tmlmodeling = tmlmapping.getTMLModeling(); - tmlarchi = tmlmapping.getTMLArchitecture(); + //tmlmodeling = tmlmapping.getTMLModeling(); + //tmlarchi = tmlmapping.getTMLArchitecture(); // *** Create links and update routers accordingly // For each router, I consider all routers that are around the considered one @@ -321,7 +332,7 @@ public class TMAP2Network<E> { // There is a north router // link to next if (routers[i][j].playingTheRoleOfPrevious[k] == null) { - Link to = new Link(tmlarchi, tmlmodeling, routers[i][j], routers[i-1][j], nbOfVCs); + Link to = new Link(tmla, tmlm, routers[i][j], routers[i-1][j], nbOfVCs); routers[i][j].playingTheRoleOfPrevious[k] = to; routers[i-1][j].playingTheRoleOfNext[getFrom(k)] = to; } @@ -333,7 +344,7 @@ public class TMAP2Network<E> { // There is a south router // link to next if (routers[i][j].playingTheRoleOfPrevious[k] == null) { - Link to = new Link(tmlarchi, tmlmodeling, routers[i][j], routers[i+1][j], nbOfVCs); + Link to = new Link(tmla, tmlm, routers[i][j], routers[i+1][j], nbOfVCs); routers[i][j].playingTheRoleOfPrevious[k] = to; routers[i+1][j].playingTheRoleOfNext[getFrom(k)] = to; } @@ -344,7 +355,7 @@ public class TMAP2Network<E> { // There is an east router // link to next if (routers[i][j].playingTheRoleOfPrevious[k] == null) { - Link to = new Link(tmlarchi, tmlmodeling, routers[i][j], routers[i][j+1], nbOfVCs); + Link to = new Link(tmla, tmlm, routers[i][j], routers[i][j+1], nbOfVCs); routers[i][j].playingTheRoleOfPrevious[k] = to; routers[i][j+1].playingTheRoleOfNext[getFrom(k)] = to; } @@ -356,7 +367,7 @@ public class TMAP2Network<E> { // There is an east router // link to next if (routers[i][j].playingTheRoleOfPrevious[k] == null) { - Link to = new Link(tmlarchi, tmlmodeling, routers[i][j], routers[i][j-1], nbOfVCs); + Link to = new Link(tmla, tmlm, routers[i][j], routers[i][j-1], nbOfVCs); routers[i][j].playingTheRoleOfPrevious[k] = to; routers[i][j-1].playingTheRoleOfNext[getFrom(k)] = to; } @@ -369,6 +380,12 @@ public class TMAP2Network<E> { + // Associate an id to all channels + int id = 0; + IDsOfChannels = new HashMap<>(); + for(TMLChannel ch: tmlm.getChannels()) { + IDsOfChannels.put(ch, "" + id); + } // Make internal channels & events of routers for(i=0; i<nocSize; i++) { @@ -388,8 +405,6 @@ public class TMAP2Network<E> { - - // Integrate into the TMLMapping for(i=0; i<nocSize; i++) { for(j=0; j<nocSize; j++) { @@ -419,24 +434,44 @@ public class TMAP2Network<E> { } } + // Handling origin channels + for(i=0; i<nocSize; i++) { + for(j=0; j<nocSize; j++) { + routers[i][j].makeOriginChannels(); + } + } - - // Printing routers + // Handling destination channels for(i=0; i<nocSize; i++) { for(j=0; j<nocSize; j++) { - TraceManager.addDev(routers[i][j].toString() + "\n"); + routers[i][j].makeDestinationChannels(); } } + // Post processing of routers + for(i=0; i<nocSize; i++) { + for(j=0; j<nocSize; j++) { + routers[i][j].postProcessing(); + } + } + // Removing useless channels i.e. channels routed by the router + // The ones in channelID + // We indeed assume all channels go to the NoC + for(TMLChannel ch: IDsOfChannels.keySet()) { + tmlm.removeChannel(ch); + } - // Connect channels to the NoC - // A bridge is put with the same position as the router as to allow classical paths not - // to use the router + // Printing routers + for(i=0; i<nocSize; i++) { + for(j=0; j<nocSize; j++) { + //TraceManager.addDev(routers[i][j].toString() + "\n"); + } + } - return null; // all ok + return null; // That's all folks! } } diff --git a/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java index b992fa8215fc2fb1326b2e1b6efa060a889f7fff..bcd16f905f7aa515e7367358861d8e613065475b 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java +++ b/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java @@ -64,8 +64,9 @@ public class TaskINForDispatch extends TMLTask { this.nbOfVCs = nbOfVCs; - inputEvent.setDestinationTask(this); - inputChannel.setDestinationTask(this); + //inputEvent.setDestinationTask(this); + //inputChannel.setDestinationTask(this); + for(TMLEvent evt: outputEvents) { evt.setOriginTask(this); } @@ -82,12 +83,15 @@ public class TaskINForDispatch extends TMLTask { this.addAttribute(vc); TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "0"); this.addAttribute(eop); + TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0"); + this.addAttribute(chid); // Events and channels addTMLEvent(inputEvent); for(TMLEvent evt: outputEvents) { addTMLEvent(evt); } + addReadTMLChannel(inputChannel); for(TMLChannel ch: outputChannels) { addWriteTMLChannel(ch); @@ -108,11 +112,11 @@ public class TaskINForDispatch extends TMLTask { waitEvt.addParam("dst"); waitEvt.addParam("vc"); waitEvt.addParam("eop"); - activity.addElement(waitEvt); - loop.addNext(waitEvt); + waitEvt.addParam("chid"); + activity.addLinkElement(loop, waitEvt); TMLChoice choice = new TMLChoice("MainChoice", referenceObject); - activity.addElement(choice); + activity.addLinkElement(waitEvt, choice); for(int i=0; i<nbOfVCs; i++) { TMLSendEvent sendEvt = new TMLSendEvent("SendEvtToVC" + i, referenceObject); @@ -121,6 +125,7 @@ public class TaskINForDispatch extends TMLTask { sendEvt.addParam("dst"); sendEvt.addParam("vc"); sendEvt.addParam("eop"); + sendEvt.addParam("chid"); activity.addElement(sendEvt); choice.addNext(sendEvt); choice.addGuard("vc == " + i); diff --git a/src/main/java/tmltranslator/tonetwork/TaskINForVC.java b/src/main/java/tmltranslator/tonetwork/TaskINForVC.java index 1ce233a3a49a403d4fc35e2a6a8961ab37d9205f..d5861a3f67b042a15aa7d8b1054b77417f27fb38 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskINForVC.java +++ b/src/main/java/tmltranslator/tonetwork/TaskINForVC.java @@ -74,6 +74,8 @@ public class TaskINForVC extends TMLTask { this.addAttribute(vc); TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "0"); this.addAttribute(eop); + TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0"); + this.addAttribute(chid); TMLAttribute feedbackDownstr = new TMLAttribute("feedbackDownstr", "feedbackDownstr", new TMLType(TMLType.NATURAL), "0"); this.addAttribute(feedbackDownstr); TMLAttribute bufferSize = new TMLAttribute("bufferSize", "bufferSize", new TMLType(TMLType.NATURAL), "2"); @@ -144,15 +146,16 @@ public class TaskINForVC extends TMLTask { // Second activity after sequence TMLForLoop loop2 = new TMLForLoop("mainLoop", referenceObject); loop2.setInfinite(true); - activity.addElement(loop2); - seq.addNext(loop2); + activity.addLinkElement(seq, loop2); - TMLWaitEvent waitEvt = new TMLWaitEvent("PacketEvent", referenceObject); + + TMLWaitEvent waitEvt = new TMLWaitEvent("PacketEventBeforeSecondSeq", referenceObject); waitEvt.setEvent(inPacketEvent); waitEvt.addParam("pktlen"); waitEvt.addParam("dst"); waitEvt.addParam("vc"); waitEvt.addParam("eop"); + waitEvt.addParam("chid"); activity.addLinkElement(loop2, waitEvt); TMLSequence secondSeq = new TMLSequence("SecondSeq", referenceObject); @@ -172,23 +175,38 @@ public class TaskINForVC extends TMLTask { activity.addLinkElement(computexd, firstRoutingChoice); TMLActionState requested3 = new TMLActionState("requested3", referenceObject); - requested3.setAction("requested_output = 3"); + requested3.setAction("requestedOutput = 3"); activity.addLinkElement(firstRoutingChoice, requested3); - firstRoutingChoice.addGuard("xd > x"); + firstRoutingChoice.addGuard("xd>x"); activity.addLinkElement(requested3, new TMLStopState("stopOfRequest3", referenceObject)); TMLActionState requested2 = new TMLActionState("requested2", referenceObject); - requested2.setAction("requested_output = 2"); + requested2.setAction("requestedOutput = 2"); activity.addLinkElement(firstRoutingChoice, requested2); - firstRoutingChoice.addGuard("xd < x"); + firstRoutingChoice.addGuard("xd<x"); activity.addLinkElement(requested2, new TMLStopState("stopOfRequest2", referenceObject)); TMLChoice secondRoutingChoice = new TMLChoice("secondRoutingChoice", referenceObject); activity.addLinkElement(firstRoutingChoice, secondRoutingChoice); - firstRoutingChoice.addGuard("xd == x"); + firstRoutingChoice.addGuard("xd==x"); + TMLActionState requested0 = new TMLActionState("requested0", referenceObject); + requested0.setAction("requestedOutput = 0"); + activity.addLinkElement(secondRoutingChoice, requested0); + firstRoutingChoice.addGuard("yd<y"); + activity.addLinkElement(requested0, new TMLStopState("stopOfRequest0", referenceObject)); + TMLActionState requested4 = new TMLActionState("requested4", referenceObject); + requested4.setAction("requestedOutput = 4"); + activity.addLinkElement(secondRoutingChoice, requested4); + firstRoutingChoice.addGuard("yd==y"); + activity.addLinkElement(requested4, new TMLStopState("stopOfRequest4", referenceObject)); + TMLActionState requested1 = new TMLActionState("requested1", referenceObject); + requested1.setAction("requestedOutput = 1"); + activity.addLinkElement(secondRoutingChoice, requested1); + firstRoutingChoice.addGuard("yd<y"); + activity.addLinkElement(requested1, new TMLStopState("stopOfRequest1", referenceObject)); @@ -215,6 +233,7 @@ public class TaskINForVC extends TMLTask { sendEvt.addParam("dst"); sendEvt.addParam("vc"); sendEvt.addParam("eop"); + sendEvt.addParam("chid"); activity.addLinkElement(packetLoop, sendEvt); waitEvt = new TMLWaitEvent("FeedbackDownEvent", referenceObject); @@ -236,6 +255,7 @@ public class TaskINForVC extends TMLTask { waitEvt.addParam("dst"); waitEvt.addParam("vc"); waitEvt.addParam("eop"); + waitEvt.addParam("chid"); activity.addLinkElement(read, waitEvt); stop = new TMLStopState("StopStateInLoop", referenceObject); @@ -248,6 +268,7 @@ public class TaskINForVC extends TMLTask { sendEvt.addParam("dst"); sendEvt.addParam("vc"); sendEvt.addParam("eop"); + sendEvt.addParam("chid"); activity.addLinkElement(loop, sendEvt); waitEvt = new TMLWaitEvent("FeedbackDownEventO", referenceObject); @@ -264,7 +285,7 @@ public class TaskINForVC extends TMLTask { activity.addLinkElement(sendEvt, read); stop = new TMLStopState("StopStateOutLoop", referenceObject); - activity.addLinkElement(waitEvt, stop); + activity.addLinkElement(read, stop); } diff --git a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java index 5a67f0699b8ff8a00808b7827c38b330c700e60f..2f719c1accc15585066bd783b481884f94ae1e27 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java +++ b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java @@ -42,7 +42,6 @@ package tmltranslator.tonetwork; import tmltranslator.*; import java.util.List; -import java.util.Vector; /** @@ -71,7 +70,7 @@ public class TaskMUXAppDispatch extends TMLTask { this.outputEvent = outputEvent; - for(TMLEvent evt: inputEvents) { + for (TMLEvent evt : inputEvents) { evt.setDestinationTask(this); } outputEvent.setOriginTask(this); @@ -85,9 +84,11 @@ public class TaskMUXAppDispatch extends TMLTask { this.addAttribute(vc); TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "0"); this.addAttribute(eop); + TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0"); + this.addAttribute(chid); // Events and channels - for(TMLEvent evt: inputEvents) { + for (TMLEvent evt : inputEvents) { addTMLEvent(evt); } addTMLEvent(outputEvent); @@ -97,40 +98,50 @@ public class TaskMUXAppDispatch extends TMLTask { TMLStartState start = new TMLStartState("mainStart", referenceObject); activity.setFirst(start); + if (inputEvents.size() == 0) { + TMLStopState stopNoEvent = new TMLStopState("StopNoEvent", referenceObject); + activity.addLinkElement(start, stopNoEvent); + return; + } + TMLForLoop loop = new TMLForLoop("mainLoop", referenceObject); loop.setInfinite(true); activity.addElement(loop); start.addNext(loop); + TMLSelectEvt selectEvt = new TMLSelectEvt("selectEvent", referenceObject); activity.addElement(selectEvt); loop.addNext(selectEvt); + // Branch for each app - for(int i=0; i< inputEvents.size(); i++) { - TMLWaitEvent waitEvt = new TMLWaitEvent("PacketEvent" + i, referenceObject); + for (int i = 0; i < inputEvents.size(); i++) { + TMLWaitEvent waitEvt = new TMLWaitEvent("PacketEvent" + i, referenceObject); waitEvt.setEvent(inputEvents.get(i)); waitEvt.addParam("pktlen"); waitEvt.addParam("dst"); waitEvt.addParam("vc"); waitEvt.addParam("eop"); + waitEvt.addParam("chid"); activity.addElement(waitEvt); - selectEvt.addNext(waitEvt); - - TMLSendEvent sendEvt = new TMLSendEvent("SendEvtToNI" + i, referenceObject); - sendEvt.setEvent(outputEvent); - sendEvt.addParam("pktlen"); - sendEvt.addParam("dst"); - sendEvt.addParam("vc"); - sendEvt.addParam("eop"); - activity.addElement(sendEvt); + selectEvt.addNext(waitEvt); + + TMLSendEvent sendEvt = new TMLSendEvent("SendEvtToNI" + i, referenceObject); + sendEvt.setEvent(outputEvent); + sendEvt.addParam("pktlen"); + sendEvt.addParam("dst"); + sendEvt.addParam("vc"); + sendEvt.addParam("eop"); + sendEvt.addParam("chid"); + activity.addElement(sendEvt); waitEvt.addNext(sendEvt); - TMLStopState stopL = new TMLStopState("EndOfSelectForApp" + i, referenceObject); - activity.addElement(stopL); - sendEvt.addNext(stopL); - } + TMLStopState stopL = new TMLStopState("EndOfSelectForApp" + i, referenceObject); + activity.addElement(stopL); + sendEvt.addNext(stopL); + } } diff --git a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java index c1dc504514f8251f66d23aaf8107938a98460ebe..b9031addee92e282d021667eebb0800e596a581d 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java +++ b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java @@ -111,6 +111,8 @@ public class TaskNetworkInterface extends TMLTask { this.addAttribute(dst); TMLAttribute vci = new TMLAttribute("vc"+i, "vc"+i, new TMLType(TMLType.NATURAL), ""+i); this.addAttribute(vci); + TMLAttribute chid = new TMLAttribute("chid"+i, "chid"+i, new TMLType(TMLType.NATURAL), ""+i); + this.addAttribute(chid); } @@ -135,7 +137,7 @@ public class TaskNetworkInterface extends TMLTask { addElement(start, loop); TMLActionState state = new TMLActionState("LoopExitSetting", referenceObject); - state.setAction("loopexit = 2"); + state.setAction("loopExit = 2"); addElement(loop, state); TMLSequence mainSequence = new TMLSequence("mainSequence", referenceObject); @@ -144,14 +146,14 @@ public class TaskNetworkInterface extends TMLTask { for(i=0; i<nbOfVCs; i++) { TMLChoice testOnLoopExit = null; if (i>0) { - //Test on loopexit + //Test on loop exit testOnLoopExit = new TMLChoice("testOnLoopExit", referenceObject); addElement(mainSequence, testOnLoopExit); // Right branch TMLStopState endOfLoopExit = new TMLStopState("endOfLoopExit", referenceObject); addElement(testOnLoopExit, endOfLoopExit); - testOnLoopExit.addGuard("loopexit == 1"); + testOnLoopExit.addGuard("loopExit == 1"); } else { testOnLoopExit = null; @@ -164,7 +166,7 @@ public class TaskNetworkInterface extends TMLTask { addElement(mainSequence, notifiedEvent); } else { addElement(testOnLoopExit, notifiedEvent); - testOnLoopExit.addGuard("loopexit == 2"); + testOnLoopExit.addGuard("loopExit == 2"); } TMLChoice testingEvt = new TMLChoice("testingEvtVC", referenceObject); @@ -192,11 +194,12 @@ public class TaskNetworkInterface extends TMLTask { waitingForStartPacket.addParam("dst" + i); waitingForStartPacket.addParam("vc"); waitingForStartPacket.addParam("eop"); + waitingForStartPacket.addParam("chid" + i); addElement(ispktChoice, waitingForStartPacket); - ispktChoice.addGuard("ispkt == 0"); + ispktChoice.addGuard("ispkt" + i + " == 0"); TMLActionState ispktSetting = new TMLActionState("ispktSetting", referenceObject); - ispktSetting.setAction("ispkt = 1"); + ispktSetting.setAction("ispkt" + i + " = 1"); addElement(waitingForStartPacket, ispktSetting); TMLActionState iSetting = new TMLActionState("iSetting", referenceObject); @@ -208,9 +211,9 @@ public class TaskNetworkInterface extends TMLTask { // Right branch of intermediate seq TMLForLoop loopOfRightBranch = new TMLForLoop("LoopOfRightBranch", referenceObject); - loopOfRightBranch.setInit("loopexit = 0"); - loopOfRightBranch.setCondition("loopexit < 1"); - loopOfRightBranch.setIncrement("loopexit = loopexit"); + loopOfRightBranch.setInit("loopExit = 0"); + loopOfRightBranch.setCondition("loopExit < 1"); + loopOfRightBranch.setIncrement("loopExit = loopExit"); addElement(intermediateSeq, loopOfRightBranch); TMLNotifiedEvent feedbackNotified = new TMLNotifiedEvent("WaitingForFeedback", referenceObject); @@ -228,7 +231,7 @@ public class TaskNetworkInterface extends TMLTask { // No feedback TMLActionState noFeedbackAction = new TMLActionState("noFeedbackAction", referenceObject); - noFeedbackAction.setAction("loopexit = 2"); + noFeedbackAction.setAction("loopExit = 2"); addElement(testOnFeedback, noFeedbackAction); testOnFeedback.addGuard("else"); @@ -261,11 +264,12 @@ public class TaskNetworkInterface extends TMLTask { sendEvtpktin.addParam("dst" + i); sendEvtpktin.addParam("vc" + i); sendEvtpktin.addParam("0"); + sendEvtpktin.addParam("chid"+i); addElement(packetLengthChoice, sendEvtpktin); packetLengthChoice.addGuard("i" + i + " < pktlen" + i + " - 1"); TMLActionState asOnI = new TMLActionState("ActionstateOnI", referenceObject); - asOnI.setAction("i" + i + " = i" + i + " 1"); + asOnI.setAction("i" + i + " = i" + i + " + 1"); addElement(sendEvtpktin, asOnI); TMLStopState endOfLB = new TMLStopState("EndOfLB", referenceObject); @@ -273,7 +277,7 @@ public class TaskNetworkInterface extends TMLTask { // Middle branch TMLActionState loopExitMB = new TMLActionState("loopExitMB", referenceObject); - loopExitMB.setAction("loopexit = 1"); + loopExitMB.setAction("loopExit = 1"); addElement(packetLengthChoice, loopExitMB); packetLengthChoice.addGuard("i" + i + " == pktlen" + i); @@ -292,24 +296,27 @@ public class TaskNetworkInterface extends TMLTask { sendEvtpktinRB.addParam("dst" + i); sendEvtpktinRB.addParam("vc" + i); sendEvtpktinRB.addParam("1"); + sendEvtpktinRB.addParam("chid"+i); addElement(packetLengthChoice, sendEvtpktinRB); packetLengthChoice.addGuard("i" + i + " == pktlen" + i + " - 1"); TMLActionState asOnIRB = new TMLActionState("asOnIRB", referenceObject); - asOnIRB.setAction("i" + i + " = i" + i + " 1"); + asOnIRB.setAction("i" + i + " = i" + i + "+ 1"); addElement(sendEvtpktinRB, asOnIRB); TMLStopState endOfRB = new TMLStopState("endOfRB", referenceObject); addElement(asOnIRB, endOfRB); + } else { + TMLChoice packetLengthChoice1 = new TMLChoice("PacketLengthChoice1", referenceObject); addElement(waitingForFeedback, packetLengthChoice1); // Right branch TMLActionState loopexitTo1= new TMLActionState("loopexitTo1", referenceObject); - loopexitTo1.setAction("loopexit = 1"); + loopexitTo1.setAction("loopExit = 1"); addElement(packetLengthChoice1, loopexitTo1); - packetLengthChoice1.addGuard("i" + i + " = pktlen" + i); + packetLengthChoice1.addGuard("i" + i + " == pktlen" + i); TMLActionState ispktResetAction = new TMLActionState("ispktResetAction", referenceObject); @@ -334,11 +341,12 @@ public class TaskNetworkInterface extends TMLTask { sendEvtpktin1.addParam("dst" + i); sendEvtpktin1.addParam("vc" + i); sendEvtpktin1.addParam("0"); + sendEvtpktin1.addParam("chid"+i); addElement(choiceLBSeq, sendEvtpktin1); choiceLBSeq.addGuard("i" + i + " < pktlen" + i + " - 1"); TMLActionState asOnI1 = new TMLActionState("ActionstateOnI1", referenceObject); - asOnI1.setAction("i" + i + " = i" + i + " 1"); + asOnI1.setAction("i" + i + " = i" + i + " + 1"); addElement(sendEvtpktin1, asOnI1); TMLStopState endOfLB1 = new TMLStopState("endOfLB1", referenceObject); @@ -350,11 +358,12 @@ public class TaskNetworkInterface extends TMLTask { sendEvtpktinRB1.addParam("dst" + i); sendEvtpktinRB1.addParam("vc" + i); sendEvtpktinRB1.addParam("1"); + sendEvtpktinRB1.addParam("chid"+i); addElement(choiceLBSeq, sendEvtpktinRB1); choiceLBSeq.addGuard("i" + i + " == pktlen" + i + " - 1"); TMLActionState asOnIRB1 = new TMLActionState("asOnIRB1", referenceObject); - asOnIRB1.setAction("i" + i + " = i" + i + " 1"); + asOnIRB1.setAction("i" + i + " = i" + i + "+ 1"); addElement(sendEvtpktinRB1, asOnIRB1); TMLStopState endOfRB1SEQ = new TMLStopState("endOfRB1SEQ", referenceObject); @@ -363,21 +372,21 @@ public class TaskNetworkInterface extends TMLTask { // Right branch of seq TMLNotifiedEvent notifiedEventPrio = new TMLNotifiedEvent("notifiedEventPrio", referenceObject); notifiedEventPrio.setEvent(inputEventsFromMUX.get(i-1)); - notifiedEventPrio.setVariable("higher_prio"); + notifiedEventPrio.setVariable("higherPrio"); addElement(seqLB, notifiedEventPrio); TMLChoice testPrio = new TMLChoice("testPrio", referenceObject); addElement(notifiedEventPrio, testPrio); TMLActionState loopexitPrio= new TMLActionState("loopexitPrio", referenceObject); - loopexitPrio.setAction("loopexit = 1"); + loopexitPrio.setAction("loopExit = 1"); addElement(testPrio, loopexitPrio); - testPrio.addGuard("higher_prio > 0"); + testPrio.addGuard("higherPrio > 0"); addElement(loopexitPrio, new TMLStopState("EndOfHigherPrio", referenceObject)); addElement(testPrio, new TMLStopState("NoHigherPrio", referenceObject)); - testPrio.addGuard("higher_prio == 0"); + testPrio.addGuard("higherPrio == 0"); } diff --git a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java index 449388782e0c36c4c3bf1161b727a0f01a7631a7..5610985050f043b249e5bb8e2a53f037292d09e9 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java +++ b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java @@ -53,6 +53,7 @@ import java.util.Vector; */ public class TaskNetworkInterfaceOUT extends TMLTask { protected int nbOfVCs; + private TMLChoice packetChoice; public TaskNetworkInterfaceOUT(String name, Object referenceToClass, Object referenceToActivityDiagram) { super(name, referenceToClass, referenceToActivityDiagram); @@ -62,7 +63,7 @@ public class TaskNetworkInterfaceOUT extends TMLTask { // inputEvt, channels: one per task // outputChannel, output event: only one, common: this is a network interface, only one exit! public void generate(int nbOfVCs, Vector<TMLEvent> outputFeedbackEvents, TMLEvent packetOutFromOUT, - TMLEvent packetAvailable, TMLChannel outputChannelFromOUT) { + TMLChannel outputChannelFromOUT) { int i; this.nbOfVCs = nbOfVCs; @@ -76,6 +77,8 @@ public class TaskNetworkInterfaceOUT extends TMLTask { this.addAttribute(vc); TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "0"); this.addAttribute(eop); + TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0"); + this.addAttribute(chid); TMLAttribute memSpace = new TMLAttribute("memSpace", "memSpace", new TMLType(TMLType.NATURAL), "4096"); this.addAttribute(memSpace); @@ -85,7 +88,6 @@ public class TaskNetworkInterfaceOUT extends TMLTask { addTMLEvent(evt); } addTMLEvent(packetOutFromOUT); - addTMLEvent(packetAvailable); addReadTMLChannel(outputChannelFromOUT); @@ -125,6 +127,7 @@ public class TaskNetworkInterfaceOUT extends TMLTask { waitingForPacketFromOUT.addParam("dst"); waitingForPacketFromOUT.addParam("vc"); waitingForPacketFromOUT.addParam("eop"); + waitingForPacketFromOUT.addParam("chid"); addElement(loop, waitingForPacketFromOUT); // Reading on channel @@ -142,17 +145,15 @@ public class TaskNetworkInterfaceOUT extends TMLTask { addElement(internalSeq, testingEOP); // Left branch of choice: eop==1 - TMLSendEvent sendEvtPktAvailable = new TMLSendEvent("sendEvtPktAvailable", referenceObject); - sendEvtPktAvailable.setEvent(packetAvailable); - sendEvtPktAvailable.addParam("pktlen"); - sendEvtPktAvailable.addParam("dst"); - sendEvtPktAvailable.addParam("vc"); - sendEvtPktAvailable.addParam("eop"); - addElement(testingEOP, sendEvtPktAvailable); + //New choice on all possible destination depending on chid + packetChoice = new TMLChoice("testingPacket", referenceObject); + addElement(testingEOP, packetChoice); testingEOP.addGuard("eop == 1"); - TMLStopState stopOfLeftBranchOfChoice = new TMLStopState("stopOfLeftBranchOfChoice", referenceObject); - addElement(sendEvtPktAvailable, stopOfLeftBranchOfChoice); + TMLStopState stopInvalid = new TMLStopState("InvalidCHID", referenceObject); + addElement(packetChoice, stopInvalid); + packetChoice.addGuard("chid == (0-1)"); + // Right branch of choice TMLStopState stopOfRightBranchOfChoice = new TMLStopState("stopOfRightBranchOfChoice", referenceObject); @@ -175,7 +176,37 @@ public class TaskNetworkInterfaceOUT extends TMLTask { } + } + + + public void postProcessing(Vector<TMLEvent> packetsAvailable, Vector<String> channelIDs) { + if (packetsAvailable.size() == 0) { + TMLStopState stopOfLeftBranchOfChoice = new TMLStopState("stopNoDestinationTask", referenceObject); + addElement(packetChoice, stopOfLeftBranchOfChoice); + return; + } + + + for (TMLEvent packetAvailable: packetsAvailable) { + addTMLEvent(packetAvailable); + } + + int i = 0; + for(TMLEvent packetAvailable: packetsAvailable) { + TMLSendEvent sendEvtPktAvailable = new TMLSendEvent("sendEvtPktAvailable", referenceObject); + sendEvtPktAvailable.setEvent(packetAvailable); + sendEvtPktAvailable.addParam("pktlen"); + sendEvtPktAvailable.addParam("dst"); + sendEvtPktAvailable.addParam("vc"); + sendEvtPktAvailable.addParam("eop"); + sendEvtPktAvailable.addParam("chid"); + addElement(packetChoice, sendEvtPktAvailable); + packetChoice.addGuard("chid == " + channelIDs.get(i)); + TMLStopState stopOfLeftBranchOfChoice = new TMLStopState("stopOfLeftBranchOfChoice__" + channelIDs.get(i), referenceObject); + addElement(sendEvtPktAvailable, stopOfLeftBranchOfChoice); + i++; + } } diff --git a/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java index 35ec4ee506710dbb7208acd29caddfb2de654d14..ca7a0f5889af63bed0233992b1edd2c024b760fd 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java +++ b/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java @@ -39,6 +39,7 @@ package tmltranslator.tonetwork; +import myutil.TraceManager; import tmltranslator.*; import java.util.Vector; @@ -76,6 +77,8 @@ public class TaskOUTForDispatch extends TMLTask { this.addAttribute(vc); TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "0"); this.addAttribute(eop); + TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0"); + this.addAttribute(chid); TMLAttribute nEvt = new TMLAttribute("nEvt", "nEvt", new TMLType(TMLType.NATURAL), "0"); this.addAttribute(nEvt); TMLAttribute loopExit = new TMLAttribute("loopExit", "loopExit", new TMLType(TMLType.NATURAL), "0"); @@ -130,7 +133,7 @@ public class TaskOUTForDispatch extends TMLTask { mainChoice.addGuard("nEvt > 0"); TMLNotifiedEvent notifiedFeedback = new TMLNotifiedEvent("FeedbackNotifiedEvt"+i, referenceObject); - notifiedFeedback.setEvent(outSelectEvents.get(i)); + notifiedFeedback.setEvent(feedbackEvents.get(i)); notifiedFeedback.setVariable("feedback"); activity.addLinkElement(loopInside, notifiedFeedback); @@ -138,17 +141,19 @@ public class TaskOUTForDispatch extends TMLTask { activity.addLinkElement(notifiedFeedback, internalChoice); // Left branch of internal choice - sendEvt = new TMLSendEvent("feedbackUpEvent", referenceObject); + sendEvt = new TMLSendEvent("SelectEvent", referenceObject); sendEvt.setEvent(outSelectEvents.get(i)); activity.addLinkElement(internalChoice, sendEvt); internalChoice.addGuard("feedback > 0"); waitEvt = new TMLWaitEvent("PacketEventInLoop", referenceObject); + //TraceManager.addDev("Nb Of params of " + inPacketEvents.get(i).getName() + " = " + inPacketEvents.get(i).getNbOfParams()); waitEvt.setEvent(inPacketEvents.get(i)); waitEvt.addParam("pktlen"); waitEvt.addParam("dst"); waitEvt.addParam("vc"); waitEvt.addParam("eop"); + waitEvt.addParam("chid"); activity.addLinkElement(sendEvt, waitEvt); TMLActionState reqOut = new TMLActionState("ExitLoop" + i, referenceObject); @@ -161,6 +166,7 @@ public class TaskOUTForDispatch extends TMLTask { sendEvt.addParam("dst"); sendEvt.addParam("vc"); sendEvt.addParam("eop"); + sendEvt.addParam("chid"); activity.addLinkElement(reqOut, sendEvt); TMLWriteChannel write = new TMLWriteChannel("WriteChannel" + i, referenceObject); diff --git a/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java b/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java index 090251369306ca347b202a1ffb8017f65775a897..da58b789f734c0fbcd8a6c67a5c41ad60cb5d5a0 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java +++ b/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java @@ -75,6 +75,8 @@ public class TaskOUTForVC extends TMLTask { this.addAttribute(vc); TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "0"); this.addAttribute(eop); + TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0"); + this.addAttribute(chid); TMLAttribute j = new TMLAttribute("j", "j", new TMLType(TMLType.NATURAL), "0"); this.addAttribute(j); @@ -105,6 +107,7 @@ public class TaskOUTForVC extends TMLTask { waitEvt.addParam("dst"); waitEvt.addParam("vc"); waitEvt.addParam("eop"); + waitEvt.addParam("chid"); activity.addLinkElement(select, waitEvt); // loop on packet size @@ -121,6 +124,7 @@ public class TaskOUTForVC extends TMLTask { sendEvt.addParam("dst"); sendEvt.addParam("vc"); sendEvt.addParam("eop"); + sendEvt.addParam("chid"); activity.addLinkElement(packetLoop, sendEvt); waitEvt = new TMLWaitEvent("ReturnFromVC", referenceObject); @@ -141,6 +145,7 @@ public class TaskOUTForVC extends TMLTask { waitEvt.addParam("dst"); waitEvt.addParam("vc"); waitEvt.addParam("eop"); + waitEvt.addParam("chid"); activity.addLinkElement(choice, waitEvt); choice.addGuard("eop == 0"); diff --git a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java index 573e03873831499da11916a2d018c9cb4a1e4077..31c12c293b3356e938e482525f18a41bcf50c87d 100644 --- a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java +++ b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java @@ -105,10 +105,10 @@ public class TranslatedRouter<E> { // Connection channels and events - private HashMap<TMLChannel, TMLEvent> mapOfAllOutputChannels; + private HashMap<TMLChannel, TMLEvent> mapOfAllOutputChannels; // Channels going to the NoC + private HashMap<TMLChannel, TMLEvent> mapOfAllInputChannels; // Channels getting out of the NoC + private Vector<TMLChannel> handledChannels; - // Hw - HwExecutionNode node; public TranslatedRouter(TMAP2Network<?> main, TMLMapping<?> tmlmap, HwNoC noc, List<TMLChannel> channelsViaNoc, int nbOfVCs, int xPos, int yPos, HwExecutionNode myHwExecutionNode) { @@ -125,6 +125,7 @@ public class TranslatedRouter<E> { playingTheRoleOfNext = new Link[NB_OF_PORTS]; allTasks = new Vector<>(); + handledChannels = new Vector<>(); } public void setLinkFromPreviousRouter(int index, Link l) { @@ -211,12 +212,20 @@ public class TranslatedRouter<E> { for (i = 0; i < nbOfVCs; i++) { // Now that we know all channels, we can generate the MUX tasks // We need one event par outputChannel - //HashMap<TMLChannel, TMLEvent> mapOfOutputChannels = new HashMap<>(); Vector<TMLEvent> inputEventsOfMUX = new Vector<>(); for (TMLChannel chan : outputChannels) { + //TraceManager.addDev("Output Channel:" + chan.getName() + " VC=" + chan.getVC()); if (chan.getVC() == i) { - TMLEvent outputEventOfMux = new TMLEvent("EventMUXof" + chan.getName(), null, 8, + TMLEvent outputEventOfMux = new TMLEvent("EventMUXof__" + chan.getName(), null, 8, true); + // PARAMS!!!!! + outputEventOfMux.setOriginTask(chan.getOriginTask()); + outputEventOfMux.addParam(new TMLType(TMLType.NATURAL)); + outputEventOfMux.addParam(new TMLType(TMLType.NATURAL)); + outputEventOfMux.addParam(new TMLType(TMLType.NATURAL)); + outputEventOfMux.addParam(new TMLType(TMLType.NATURAL)); + outputEventOfMux.addParam(new TMLType(TMLType.NATURAL)); + //mapOfOutputChannels.put(chan, outputEventOfMux); mapOfAllOutputChannels.put(chan, outputEventOfMux); inputEventsOfMUX.add(outputEventOfMux); @@ -225,9 +234,14 @@ public class TranslatedRouter<E> { } // We also need an output event for MUX / NI_IN - TMLEvent eventForMUX_and_NI_IN = new TMLEvent("EventBetweenMUXandNI_IN_for_" + nameOfExecNode, + TMLEvent eventForMUX_and_NI_IN = new TMLEvent("EventBetweenMUXandNI_IN_for_" + nameOfExecNode + "_" + i, null, 8, true); tmlm.addEvent(eventForMUX_and_NI_IN); + eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL)); + eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL)); + eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL)); + eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL)); + eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL)); TaskMUXAppDispatch muxTask = new TaskMUXAppDispatch("MUXof" + nameOfExecNode + "_VC" + i, null, null); tmlm.addTask(muxTask); @@ -274,7 +288,8 @@ public class TranslatedRouter<E> { dispatchIns = new HashMap<>(); for (int portNb = 0; portNb < NB_OF_PORTS; portNb++) { if (playingTheRoleOfNext[portNb] != null) { - TaskINForDispatch inDispatch = new TaskINForDispatch("IN_" + nameOfExecNode + "_" + portNb, null, + TaskINForDispatch inDispatch = new TaskINForDispatch("IN_" + nameOfExecNode + "_" + portNb + + "_x" + xPos + "_y" + yPos, null, null); tmlm.addTask(inDispatch); Vector<TMLEvent> listOfOutEvents = new Vector<TMLEvent>(); @@ -299,8 +314,10 @@ public class TranslatedRouter<E> { // We have to use events / channels coming from another router TMLEvent toInEvt = playingTheRoleOfNext[portNb].packetOut; toInEvt.setDestinationTask(inDispatch); + //tmlm.addEvent(toInEvt); TMLChannel toInCh = playingTheRoleOfNext[portNb].chOutToIN; toInCh.setDestinationTask(inDispatch); + tmlm.addChannel(toInCh); inDispatch.generate(nbOfVCs, toInEvt, toInCh, listOfOutEvents, listOfOutChannels); @@ -446,7 +463,7 @@ public class TranslatedRouter<E> { //NetworkInterfaceOUT (1 per router) - TaskNetworkInterfaceOUT tniOut = new TaskNetworkInterfaceOUT("NI_OUT_" + nameOfExecNode, null, + tniOut = new TaskNetworkInterfaceOUT("NI_OUT_" + nameOfExecNode, null, null); tmlm.addTask(tniOut); allTasks.add(tniOut); @@ -463,24 +480,7 @@ public class TranslatedRouter<E> { TMLEvent pktoutFromOut = playingTheRoleOfPrevious[NB_OF_PORTS-1].packetOut; pktoutFromOut.setDestinationTask(tniOut); - TMLEvent packetOut = new TMLEvent("evtPktOutToAppFromOut__" + xPos + "_" + yPos, - null, 8, true); - packetOut.addParam(new TMLType(TMLType.NATURAL)); - packetOut.addParam(new TMLType(TMLType.NATURAL)); - packetOut.addParam(new TMLType(TMLType.NATURAL)); - packetOut.addParam(new TMLType(TMLType.NATURAL)); - tmlm.addEvent(packetOut); - packetOut.setOriginTask(tniOut); - - tniOut.generate(nbOfVCs, feedbackPerVC, pktoutFromOut, packetOut, chOfOut); - - // Fake task out - fto = new FakeTaskOut("FakeTaskOutOfRouter_" + xPos + "_" + yPos, null, null); - tmlm.addTask(fto); - allTasks.add(fto); - packetOut.setDestinationTask(fto); - fto.generate(packetOut); - + tniOut.generate(nbOfVCs, feedbackPerVC, pktoutFromOut, chOfOut); } @@ -504,6 +504,11 @@ public class TranslatedRouter<E> { pktInEvtsVCs[i][j] = new TMLEvent("evt_pktin" + i + "_vc" + j + "_" + xPos + "_" + yPos, null, 8, true); tmlm.addEvent(pktInEvtsVCs[i][j]); + pktInEvtsVCs[i][j].addParam(new TMLType(TMLType.NATURAL)); + pktInEvtsVCs[i][j].addParam(new TMLType(TMLType.NATURAL)); + pktInEvtsVCs[i][j].addParam(new TMLType(TMLType.NATURAL)); + pktInEvtsVCs[i][j].addParam(new TMLType(TMLType.NATURAL)); + pktInEvtsVCs[i][j].addParam(new TMLType(TMLType.NATURAL)); pktInChsVCs[i][j] = new TMLChannel("ch_pktin" + i + "_vc" + j + "_" + xPos + "_" + yPos, null); @@ -523,6 +528,11 @@ public class TranslatedRouter<E> { for (int k = 0; k < TMAP2Network.DOMAIN + 1; k++) { routeEvtVCs[i][j][k] = new TMLEvent("evtroute_" + i + "_vc" + j + "_" + k + "_" + xPos + "_" + yPos, null, 8, true); + routeEvtVCs[i][j][k].addParam(new TMLType(TMLType.NATURAL)); + routeEvtVCs[i][j][k].addParam(new TMLType(TMLType.NATURAL)); + routeEvtVCs[i][j][k].addParam(new TMLType(TMLType.NATURAL)); + routeEvtVCs[i][j][k].addParam(new TMLType(TMLType.NATURAL)); + routeEvtVCs[i][j][k].addParam(new TMLType(TMLType.NATURAL)); tmlm.addEvent(routeEvtVCs[i][j][k]); routeEvtVCsFeedback[i][j][k] = new TMLEvent("evtfeedback_" + i + "_vc" + j + "_" + k + "_" + xPos + "_" + yPos, null, 8, true); @@ -541,6 +551,11 @@ public class TranslatedRouter<E> { for (int j = 0; j < nbOfVCs; j++) { evtOutVCs[i][j] = new TMLEvent("evt_out" + i + "_vc" + j + "_" + xPos + "_" + yPos, null, 8, true); + evtOutVCs[i][j].addParam(new TMLType(TMLType.NATURAL)); + evtOutVCs[i][j].addParam(new TMLType(TMLType.NATURAL)); + evtOutVCs[i][j].addParam(new TMLType(TMLType.NATURAL)); + evtOutVCs[i][j].addParam(new TMLType(TMLType.NATURAL)); + evtOutVCs[i][j].addParam(new TMLType(TMLType.NATURAL)); tmlm.addEvent(evtOutVCs[i][j]); evtSelectVC[i][j] = new TMLEvent("evt_vcselect" + i + "_vc" + j + "_" + xPos + "_" + yPos, null, 8, true); @@ -562,7 +577,7 @@ public class TranslatedRouter<E> { } public String getPositionNaming() { - return "_" + xPos + "_" + yPos; + return "_x" + xPos + "_y" + yPos; } public String toString() { @@ -595,8 +610,7 @@ public class TranslatedRouter<E> { } - // DANGER: also make the mapping of channels - // ALSO: initial, last tasks: connections + public void makeHwArchitectureAndMapping(HwExecutionNode execNode, HwBus busToInternalDomain) { TMLArchitecture tmla = tmlmap.getTMLArchitecture(); @@ -607,17 +621,17 @@ public class TranslatedRouter<E> { TraceManager.addDev("NULL bus"); } - HwBridge mainBridge = new HwBridge("BridgeIntennal" + getPositionNaming()); + HwBridge mainBridge = new HwBridge("BridgeInternal_" + getPositionNaming()); tmla.addHwNode(mainBridge); tmla.makeHwLink(busToInternalDomain, mainBridge); // NIIN bus - HwBus busNIIN = new HwBus("BusNetworkiInterfaceIN" + getPositionNaming()); + HwBus busNIIN = new HwBus("BusNetworkInterfaceIN" + getPositionNaming()); tmla.addHwNode(busNIIN); // For each VC, we create a bus and a cpu. The bus connects to the main bridge - for(i=0; i<nbOfVCs; i++) { + for (i = 0; i < nbOfVCs; i++) { HwCPU cpu = new HwCPU("CPUForMUX_VC" + i + getPositionNaming()); tmla.addHwNode(cpu); tmlmap.addTaskToHwExecutionNode(muxTasks.get(i), cpu); @@ -631,15 +645,16 @@ public class TranslatedRouter<E> { // Network interface IN common to all MUX VCs // Processor, mem, bus and bridge - HwCPU cpuNIIN = new HwCPU("CPUNetworkiInterfaceIN" + getPositionNaming()); + HwCPU cpuNIIN = new HwCPU("CPUNetworkInterfaceIN" + getPositionNaming()); tmla.addHwNode(cpuNIIN); tmlmap.addTaskToHwExecutionNode(tniIn, cpuNIIN); - HwMemory memNIIN = new HwMemory("MemNetworkiInterfaceIN" + getPositionNaming()); + HwMemory memNIIN = new HwMemory("MemNetworkInterfaceIN" + getPositionNaming()); tmla.addHwNode(memNIIN); - tmlmap.addCommToHwCommNode(playingTheRoleOfPrevious[NB_OF_PORTS-1].chOutToIN, memNIIN); + tmlmap.addCommToHwCommNode(playingTheRoleOfNext[NB_OF_PORTS - 1].chOutToIN, memNIIN); - HwBridge bridgeNIIN = new HwBridge("BridgeNetworkiInterfaceIN" + getPositionNaming()); + HwBridge bridgeNIIN = new HwBridge("BridgeNetworkInterfaceIN" + getPositionNaming()); + tmla.addHwNode(bridgeNIIN); tmla.makeHwLink(busNIIN, cpuNIIN); tmla.makeHwLink(busNIIN, memNIIN); @@ -655,31 +670,32 @@ public class TranslatedRouter<E> { tmlmap.addTaskToHwExecutionNode(dispatchIns.get(portNb), cpuIN); // connection to the right bus - if (portNb < NB_OF_PORTS-1) { + if (portNb < NB_OF_PORTS - 1) { // external tmla.makeHwLink(playingTheRoleOfNext[portNb].busBetweenRouters, cpuIN); - HwMemory memIN = new HwMemory("mem_IN" + portNb + getPositionNaming()); + + HwMemory memIN = new HwMemory("mem_IN" + portNb + getPositionNaming()); tmla.addHwNode(memIN); tmla.makeHwLink(playingTheRoleOfNext[portNb].busBetweenRouters, memIN); tmlmap.addCommToHwCommNode(playingTheRoleOfNext[portNb].chOutToIN, memIN); } else { // internal - HwBus busInternalIN = new HwBus("BusInternalINternal" + getPositionNaming()); + HwBus busInternalIN = new HwBus("BusInternalIN" + getPositionNaming()); tmla.addHwNode((busInternalIN)); tmla.makeHwLink(busInternalIN, bridgeNIIN); tmla.makeHwLink(busInternalIN, cpuIN); } // For each IN VC, we do the Hw Arch: bus, cpu, mem - for(i=0; i<nbOfVCs; i++) { + for (i = 0; i < nbOfVCs; i++) { HwCPU cpuINVC = new HwCPU("cpuINVC_" + portNb + "_" + i + getPositionNaming()); tmla.addHwNode(cpuINVC); tmlmap.addTaskToHwExecutionNode(dispatchInVCs[portNb][i], cpuINVC); - HwMemory memINVC = new HwMemory("memINVC" + portNb + "_" + i+ getPositionNaming()); + HwMemory memINVC = new HwMemory("memINVC" + portNb + "_" + i + getPositionNaming()); tmla.addHwNode(memINVC); tmlmap.addCommToHwCommNode(pktInChsVCs[portNb][i], memINVC); - HwBus busINVC = new HwBus("busINVC" + portNb + "_" + i + getPositionNaming()); + HwBus busINVC = new HwBus("busINVC_p" + portNb + "_vc" + i + getPositionNaming()); tmla.addHwNode(busINVC); tmla.makeHwLink(busINVC, cpuINVC); tmla.makeHwLink(busINVC, memINVC); @@ -688,36 +704,37 @@ public class TranslatedRouter<E> { } } - HwBridge bridgeNIOUT = new HwBridge("BridgeNetworkiInterfaceOUT" + getPositionNaming()); + //HwBridge bridgeNIOUT = new HwBridge("BridgeNetworkiInterfaceOUT" + getPositionNaming()); HwCPU outForExit = null; // OUTVC and OUT for (int portNb = 0; portNb < NB_OF_PORTS; portNb++) { if (playingTheRoleOfPrevious[portNb] != null) { - // We have an IN on that port. Connects on the bus of the correcponding link + // We have an IN on that port. Connects on the bus of the corresponding link HwCPU cpuOUT = new HwCPU("cpuOUT_" + portNb + getPositionNaming()); tmla.addHwNode(cpuOUT); tmlmap.addTaskToHwExecutionNode(dispatchOuts.get(portNb), cpuOUT); // connection to the right bus - if (portNb < NB_OF_PORTS-1) { + if (portNb < NB_OF_PORTS - 1) { // external tmla.makeHwLink(playingTheRoleOfPrevious[portNb].busBetweenRouters, cpuOUT); } else { // internal outForExit = cpuOUT; - HwBus busInternalOUT = new HwBus("BusInternalOUT" + getPositionNaming()); - tmla.addHwNode((busInternalOUT)); - tmla.makeHwLink(busInternalOUT, bridgeNIOUT); - tmla.makeHwLink(busInternalOUT, cpuOUT); + // HwBus busInternalOUT = new HwBus("BusInternalOUT" + getPositionNaming()); + //tmla.addHwNode((busInternalOUT)); + + //tmla.makeHwLink(busInternalOUT, bridgeNIOUT); + //tmla.makeHwLink(busInternalOUT, cpuOUT); } // For each IN VC, we do the Hw Arch: bus, cpu, mem - for(i=0; i<nbOfVCs; i++) { + for (i = 0; i < nbOfVCs; i++) { HwCPU cpuOUTVC = new HwCPU("cpuOUTVC_" + portNb + "_" + i + getPositionNaming()); tmla.addHwNode(cpuOUTVC); tmlmap.addTaskToHwExecutionNode(dispatchOutVCs[portNb][i], cpuOUTVC); - HwMemory memOUTVC = new HwMemory("memOUTVC" + portNb + "_" + i+ getPositionNaming()); + HwMemory memOUTVC = new HwMemory("memOUTVC" + portNb + "_" + i + getPositionNaming()); tmla.addHwNode(memOUTVC); HwBus busOUTVC = new HwBus("busINVC" + portNb + "_" + i + getPositionNaming()); tmla.addHwNode(busOUTVC); @@ -731,16 +748,17 @@ public class TranslatedRouter<E> { // Network interface out // Basically connects to the main bridge - // NIIN bus - HwBus busNIOUT = new HwBus("BusNetworkiInterfaceOUT" + getPositionNaming()); + // NIOUT bus + HwBus busNIOUT = new HwBus("BusNetworkInterfaceOUT" + getPositionNaming()); tmla.addHwNode(busNIOUT); - HwCPU cpuNIOUT = new HwCPU("CPUNetworkiInterfaceOUT" + getPositionNaming()); + HwCPU cpuNIOUT = new HwCPU("CPUNetworkInterfaceOUT" + getPositionNaming()); tmla.addHwNode(cpuNIOUT); - tmlmap.addTaskToHwExecutionNode(tniIn, cpuNIOUT); + tmlmap.addTaskToHwExecutionNode(tniOut, cpuNIOUT); - HwMemory memNIOUT = new HwMemory("MemNetworkiInterfaceOUT" + getPositionNaming()); + HwMemory memNIOUT = new HwMemory("MemNetworkInterfaceOUT" + getPositionNaming()); tmla.addHwNode(memNIOUT); + tmlmap.addCommToHwCommNode(playingTheRoleOfPrevious[NB_OF_PORTS-1].chOutToIN, memNIOUT); tmla.makeHwLink(busNIOUT, outForExit); tmla.makeHwLink(busNIOUT, cpuNIOUT); @@ -754,8 +772,11 @@ public class TranslatedRouter<E> { tmla.makeHwLink(busOUTToMainBridge, mainBridge); // fake task on CPU - tmlmap.addTaskToHwExecutionNode(fto, node); + // tmlmap.addTaskToHwExecutionNode(fto, myHwExecutionNode); + } + public void makeOriginChannels() { + Vector<TMLChannel> newChannels = new Vector<>(); // We now need to modify the corresponding input tasks // The channel is modified to NBRNBW @@ -764,20 +785,196 @@ public class TranslatedRouter<E> { // For all channels whose origin task is mapped on the CPU of the router + for(TMLChannel ch: tmlmap.getTMLModeling().getChannels()) { + if (main.getChannelID(ch) != null) { + TMLTask t = ch.getOriginTask(); + HwExecutionNode mappedOn = tmlmap.getHwNodeOf(t); + if (mappedOn == myHwExecutionNode) { + TraceManager.addDev("Found HwNode of origin task " + t.getTaskName() + " for channel " + ch.getName()); + // We must rework the channel of the task. + // The channel is modified to a NBRNBW with the same task has sender / receiver + // The channel is mapped to the local mem + // Once the sample has been sent, an event is sent to the input task of the router + // For a receiver, the event is first waited for, and then the read in the new channel is performed + + TMLChannel newChannel = new TMLChannel(ch.getName() + "__origin", ch.getReferenceObject()); + newChannel.setType(TMLChannel.NBRNBW); + newChannel.setOriginTask(t); + newChannel.setDestinationTask(t); + newChannel.setSize(ch.getSize()); + newChannel.setVC(ch.getVC()); + newChannels.add(newChannel); + + + // Map modify channel to the right memory + HwMemory mem = tmlmap.getTMLArchitecture().getHwMemoryByName(myHwExecutionNode.getName() + "__mem"); + if (mem != null) { + TraceManager.addDev("Mapping channel " + ch.getName() + " on mem " + mem.getName()); + tmlmap.addCommToHwCommNode(newChannel, mem); + } + + // Must now modify the source app + TMLAttribute pktlen = new TMLAttribute("pktlen", "pktlen", new TMLType(TMLType.NATURAL), "0"); + t.addAttributeIfApplicable(pktlen); + TMLAttribute dst = new TMLAttribute("dst", "dst", new TMLType(TMLType.NATURAL), "0"); + t.addAttributeIfApplicable(dst); + TMLAttribute vc = new TMLAttribute("vc", "vc", new TMLType(TMLType.NATURAL), "0"); + t.addAttributeIfApplicable(vc); + TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "1"); + t.addAttributeIfApplicable(eop); + TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), + "" + main.getChannelID(ch)); + t.addAttributeIfApplicable(chid); + + TMLActivity activity = t.getActivityDiagram(); + Vector<TMLActivityElement> newElements = new Vector<>(); + TMLWriteChannel twc; + for (TMLElement elt : activity.getElements()) { + if (elt instanceof TMLWriteChannel) { + twc = (TMLWriteChannel) elt; + if (twc.getChannel(0) == ch) { + TraceManager.addDev("Modifying write ch of task " + t.getTaskName()); + TMLSendEvent tse = new TMLSendEvent("EvtForSending__" + ch.getName(), ch.getReferenceObject()); + twc.replaceChannelWith(ch, newChannel); + newElements.add(tse); + tse.setEvent(mapOfAllOutputChannels.get(ch)); + tse.addParam("" + newChannel.getSize()); + tse.addParam("dst"); + tse.addParam("" + newChannel.getVC()); + tse.addParam("eop"); + tse.addParam(""+main.getChannelID(ch)); + tse.addNext(twc.getNextElement(0)); + twc.setNewNext(twc.getNextElement(0), tse); + } + } + } + for (TMLActivityElement newElt : newElements) { + activity.addElement(newElt); + } + } + } + } + + for(TMLChannel ch: newChannels) { + tmlmap.getTMLModeling().addChannel(ch); + } + + } + + public void makeDestinationChannels() { + + Vector<TMLChannel> newChannels = new Vector<>(); + mapOfAllInputChannels = new HashMap<>(); + + TMLModeling tmlm = tmlmap.getTMLModeling(); + + Vector<TMLEvent> events = new Vector<>(); + Vector<String> ids = new Vector<>(); for(TMLChannel ch: tmlmap.getTMLModeling().getChannels()) { - TMLTask t = ch.getOriginTask(); - HwExecutionNode mappedOn = tmlmap.getHwNodeOf(t); - if (mappedOn == myHwExecutionNode) { - TraceManager.addDev("Found HwNode of task " + t.getTaskName() + " for channel " + ch.getName()); - // We must rework the channel of the task. - // The channel is modified to a NBRNBW with the same task has sender / receiver - // The channel is mapped to the local mem - // Once the sample has been sent, an event is sent to the input task of the router - // For a receiver, the event is first waited for, and then the read in the new channel is performed + if (main.getChannelID(ch) != null) { + TMLTask t = ch.getDestinationTask(); + HwExecutionNode mappedOn = tmlmap.getHwNodeOf(t); + if (mappedOn == myHwExecutionNode) { + TMLEvent packetOut = new TMLEvent("evtPktOutToAppFromOut__" + xPos + "_" + yPos, + null, 8, true); + packetOut.addParam(new TMLType(TMLType.NATURAL)); + packetOut.addParam(new TMLType(TMLType.NATURAL)); + packetOut.addParam(new TMLType(TMLType.NATURAL)); + packetOut.addParam(new TMLType(TMLType.NATURAL)); + packetOut.addParam(new TMLType(TMLType.NATURAL)); + tmlm.addEvent(packetOut); + packetOut.setOriginTask(tniOut); + packetOut.setDestinationTask(ch.getDestinationTask()); + events.add(packetOut); + ids.add(main.getChannelID(ch)); + mapOfAllInputChannels.put(ch, packetOut); + } } } + tniOut.postProcessing(events, ids); + + for(TMLChannel ch: tmlmap.getTMLModeling().getChannels()) { + if (main.getChannelID(ch) != null) { + TMLTask t = ch.getDestinationTask(); + HwExecutionNode mappedOn = tmlmap.getHwNodeOf(t); + if (mappedOn == myHwExecutionNode) { + TraceManager.addDev("Found HwNode of origin task " + t.getTaskName() + " for channel " + ch.getName()); + // We must rework the channel of the task. + // The channel is modified to a NBRNBW with the same task has sender / receiver + // The channel is mapped to the local mem + // Once the sample has been sent, an event is sent to the input task of the router + // For a receiver, the event is first waited for, and then the read in the new channel is performed + + TMLChannel newChannel = new TMLChannel(ch.getName() + "__destination", ch.getReferenceObject()); + newChannel.setType(TMLChannel.NBRNBW); + newChannel.setOriginTask(t); + newChannel.setDestinationTask(t); + newChannel.setSize(ch.getSize()); + newChannel.setVC(ch.getVC()); + newChannels.add(newChannel); + + // Map modify channel to the right memory + HwMemory mem = tmlmap.getTMLArchitecture().getHwMemoryByName(myHwExecutionNode.getName() + "__mem"); + if (mem != null) { + TraceManager.addDev("Mapping channel " + ch.getName() + " on mem " + mem.getName()); + tmlmap.addCommToHwCommNode(newChannel, mem); + } + + // Must now modify the source app + TMLAttribute pktlen = new TMLAttribute("pktlen", "pktlen", new TMLType(TMLType.NATURAL), "0"); + t.addAttributeIfApplicable(pktlen); + TMLAttribute dst = new TMLAttribute("dst", "dst", new TMLType(TMLType.NATURAL), "0"); + t.addAttributeIfApplicable(dst); + TMLAttribute vc = new TMLAttribute("vc", "vc", new TMLType(TMLType.NATURAL), "0"); + t.addAttributeIfApplicable(vc); + TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "1"); + t.addAttributeIfApplicable(eop); + TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), + "" + main.getChannelID(ch)); + t.addAttributeIfApplicable(chid); + + TMLActivity activity = t.getActivityDiagram(); + Vector<TMLActivityElement> newElements = new Vector<>(); + TMLReadChannel trc; + for (TMLElement elt : activity.getElements()) { + if (elt instanceof TMLReadChannel) { + trc = (TMLReadChannel) elt; + if (trc.getChannel(0) == ch) { + TraceManager.addDev("Modifying read ch of task " + t.getTaskName() + " for channel " + ch.getName()); + // TODO TODO + trc.replaceChannelWith(ch, newChannel); + TMLWaitEvent twe = new TMLWaitEvent("EvtForReceiving__" + ch.getName(), ch.getReferenceObject()); + newElements.add(twe); + twe.setEvent(mapOfAllInputChannels.get(ch)); + twe.addParam("pktlen"); + twe.addParam("dst"); + twe.addParam("vc"); + twe.addParam("eop"); + twe.addParam("chid"); + activity.replaceAllNext(trc, twe); + twe.addNext(trc); + } + } + } + for (TMLActivityElement newElt : newElements) { + activity.addElement(newElt); + } + } + } + } + + for(TMLChannel ch: newChannels) { + tmlmap.getTMLModeling().addChannel(ch); + } + + + + } + + + public void postProcessing() { diff --git a/src/main/java/ui/GTMLModeling.java b/src/main/java/ui/GTMLModeling.java index fde5a7fe9e9a1350e0b95b13f2ff411a11a49b0d..69243fa7adba93a1b55d218cb3161fba1d5655b3 100644 --- a/src/main/java/ui/GTMLModeling.java +++ b/src/main/java/ui/GTMLModeling.java @@ -817,7 +817,7 @@ public class GTMLModeling { tmltt = new TMLType(request.getType(j).getType()); tmlattr = new TMLAttribute(attname, tmltt); tmlattr.initialValue = tmlattr.getDefaultInitialValue(); - TraceManager.addDev("Adding " + tmlattr.getName() + " to " + task.getName() + "with value =" + tmlattr.initialValue); + //TraceManager.addDev("Adding " + tmlattr.getName() + " to " + task.getName() + "with value =" + tmlattr.initialValue); task.addAttribute(tmlattr); } } @@ -909,6 +909,7 @@ public class GTMLModeling { channel.setMax(port1.getMax()); channel.ports.add(port1); channel.ports.add(port2); + TraceManager.addDev("Adding channel with port1 vc=" + port1.getVC()); channel.setVC(port1.getVC()); if (port1.isBlocking() && port2.isBlocking()) { channel.setType(TMLChannel.BRBW); @@ -1522,7 +1523,7 @@ public class GTMLModeling { tmltt = new TMLType(request.getType(j).getType()); tmlattr = new TMLAttribute(attname, tmltt); tmlattr.initialValue = tmlattr.getDefaultInitialValue(); - //TraceManager.addDev("Adding " + tmlattr.getName() + " to " + tt1.getName() + "with value =" + tmlattr.initialValue); + TraceManager.addDev("Adding " + tmlattr.getName() + " to " + tt1.getName() + "with value =" + tmlattr.initialValue); tt1.addAttribute(tmlattr); } } diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java index 5cf5b65b28b2563d1e59034af5bf1d244221be55..d1837a9b2bc5939919f94ec0de703ea60bde39f5 100644 --- a/src/main/java/ui/GTURTLEModeling.java +++ b/src/main/java/ui/GTURTLEModeling.java @@ -1537,6 +1537,11 @@ public class GTURTLEModeling { return map; } + @SuppressWarnings("unchecked") + public void setTMLMapping(TMLMapping tmap) { + this.tmap = tmap; + } + public HashMap<String, HashSet<String>> getCPUTaskMap() { HashMap<String, HashSet<String>> cpuTaskMap = new HashMap<String, HashSet<String>>(); diff --git a/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java b/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java index 1693ddfa2387b6f24fa5231073ea106c4634c181..675fdd0426628bcc59d8aaa99815283766505cdd 100755 --- a/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java +++ b/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java @@ -160,7 +160,7 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent protected String associatedEvent = "VOID"; // Network - protected int vc = -1; + protected int vc = 0; public int verification; @@ -910,7 +910,7 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent try { vc = Integer.decode(elt.getAttribute("vc")); } catch (Exception e) { - vc = -1; + vc = 0; } } diff --git a/src/main/java/ui/util/DefaultText.java b/src/main/java/ui/util/DefaultText.java index 593d0f0e7ce9d9de0a3d788cdec5cc19b0e65bac..9ea4ea43fd8c1b68d776c690e8399e7807b428d4 100755 --- a/src/main/java/ui/util/DefaultText.java +++ b/src/main/java/ui/util/DefaultText.java @@ -50,8 +50,8 @@ package ui.util; */ public class DefaultText { - public static String BUILD = "13048"; - public static String DATE = "2019/05/27 03:02:13 CET"; + public static String BUILD = "13056"; + public static String DATE = "2019/06/04 03:02:18 CET"; public static StringBuffer sbAbout = makeAbout(); diff --git a/src/main/java/ui/window/JDialogNoCManagement.java b/src/main/java/ui/window/JDialogNoCManagement.java index aa18360f27bb2b406032bc9784e104dcfa2a0c53..e63014d131e9883c863bfc8cb7d00c37b832deee 100644 --- a/src/main/java/ui/window/JDialogNoCManagement.java +++ b/src/main/java/ui/window/JDialogNoCManagement.java @@ -330,11 +330,36 @@ public class JDialogNoCManagement extends JDialog implements ActionListener, Lis } outputText.append("\nNoC removed\n"); - outputText.append("\nGenerating TML\n"); + outputText.append("\nChecking syntax of the specification\n"); TMLMapping<?> mapping = t2n.getTMLMapping(); + + mgui.gtm.setTMLMapping(mapping); + TMLSyntaxChecking tmlsc = new TMLSyntaxChecking(mapping); + mapping.forceMakeAutomata(); + tmlsc.checkSyntax(); + + outputText.append("\n" + tmlsc.hasErrors() + " errors, " + tmlsc.hasWarnings() + " warnings:\n"); + if (tmlsc.hasErrors() > 0) { + for (TMLError err :tmlsc.getErrors()) { + outputText.append("Error:" + err.toString() + "\n"); + } + } + if (tmlsc.hasWarnings() > 0) { + for (TMLError err :tmlsc.getWarnings()) { + outputText.append("Warning:" + err.toString() + "\n"); + } + } + + + outputText.append("\nGenerating TML\n"); + + + TMLMappingTextSpecification ts = new TMLMappingTextSpecification<>("noNoc"); ts.toTextFormat(mapping); + + String dir = SpecConfigTTool.TMLCodeDirectory; try { ts.saveFile(SpecConfigTTool.TMLCodeDirectory, "NoNoC"); @@ -346,6 +371,11 @@ public class JDialogNoCManagement extends JDialog implements ActionListener, Lis outputText.append("\nSpecification generated in " + dir + "\n"); + + + + + outputText.append("\nAll done\n"); stopProcess(); diff --git a/src/main/java/ui/window/JDialogTMLCompositePort.java b/src/main/java/ui/window/JDialogTMLCompositePort.java index eda89b9c892cd3cf53aa3054b1f35075e1982dc2..2c1d3198bade69e523a254967220936596a09f4b 100644 --- a/src/main/java/ui/window/JDialogTMLCompositePort.java +++ b/src/main/java/ui/window/JDialogTMLCompositePort.java @@ -578,7 +578,7 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen panel5.add(lossPercentageLabel, c5); c5.gridwidth = GridBagConstraints.REMAINDER; //end row vcText = new JTextField("" + vc); - panel5.add(lossPercentageText, c5); + panel5.add(vcText, c5); @@ -844,7 +844,7 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen try { return Integer.decode(vcText.getText().trim()); } catch (Exception e) { - return -1; + return 0; } } }