diff --git a/MPSoC/soclib/soclib/module/test_control_component/vci_mwmr_stats/caba/source/src/vci_mwmr_stats.cpp b/MPSoC/soclib/soclib/module/test_control_component/vci_mwmr_stats/caba/source/src/vci_mwmr_stats.cpp index 0b429cfc25ad67217ebcf717613158f22ef32a18..f1922b2acec174db3942030cc84273dca66d2621 100644 --- a/MPSoC/soclib/soclib/module/test_control_component/vci_mwmr_stats/caba/source/src/vci_mwmr_stats.cpp +++ b/MPSoC/soclib/soclib/module/test_control_component/vci_mwmr_stats/caba/source/src/vci_mwmr_stats.cpp @@ -67,6 +67,12 @@ tmpl()::VciMwmrStats( for ( typename std::vector<std::string>::const_iterator i = fifo_name.begin(); i != fifo_name.end(); ++i ) { + +const std::string name2 = (*i); +loader.get_symbol_by_name(name2); +const soclib::common::BinaryFileSymbol *sym2 = loader.get_symbol_by_name(name2); +std::cout << " mwmr fifo with address " << sym2->address() << std::endl; + const std::string name = (*i)+"_status"; const soclib::common::BinaryFileSymbol *sym = loader.get_symbol_by_name(name); if ( ! sym || sym->name() != name ) { @@ -74,6 +80,7 @@ tmpl()::VciMwmrStats( continue; } typename vci_param::fast_addr_t addr = sym->address(); + std::cout << " mwmr fifo with status address " << addr << std::endl; m_mwmr_info.push_back( mwmr_info_t(addr, *i) ); } } @@ -98,61 +105,73 @@ tmpl(void)::handle_txn(const VciLoggerElem<vci_param> &elem) for ( typename std::vector<mwmr_info_t>::const_iterator i = m_mwmr_info.begin(); i != m_mwmr_info.end(); ++i ) { - const mwmr_info_t &mwmr = *i; + const mwmr_info_t &mwmr = *i; + + //detect if we are in the address range of the mwmr fifo number i if ( (elem.address() < mwmr.first) || - ((elem.address() + elem.plen()) >= (mwmr.first + sizeof(soclib_mwmr_status_s))) ) - continue; + ((elem.address() + elem.plen()) >= (mwmr.first + sizeof(soclib_mwmr_status_s))) ) + continue; + + //std::cout <<elem.address()<< " " << mwmr.first<< " " << mwmr.second << " " << (elem.address() + elem.plen()) << " "<< (mwmr.first + sizeof(soclib_mwmr_status_s)) << " "<< sizeof(soclib_mwmr_status_s)<< " " << elem.plen() << std::endl; + //std::cout <<m_cycle++<< std::endl; + +/* std::cout << "cmd " << elem.command() << std::endl; + std::cout << "address " << elem.address() << std::endl; + std::cout << "rdata " << elem.rdata()[0] << std::endl; + std::cout << "wdata " << elem.wdata()[0] << std::endl;*/ + handle_txn(elem, mwmr); } } tmpl(void)::handle_txn(const VciLoggerElem<vci_param> &elem, const mwmr_info_t &mwmr) -{ - std::cout << "cmd " << elem.command() << std::endl; - std::cout << "address " << elem.address() << std::endl; - //std::cout << "rdata " << rdata << std::endl; - // std::cout << "wdata " << wdata << std::endl; +{ + //prefix(elem, mwmr) << std::hex<< elem.address ()<< " , " << elem.command() << std::endl; switch ( elem.command() ) { case vci_param::CMD_LOCKED_READ: - prefix(elem, mwmr) + {prefix(elem, mwmr) << "read_lock" - << std::endl; + << std::endl; } + break; case vci_param::CMD_STORE_COND: - { prefix(elem, mwmr) << "STORE COND" << std::endl; - // std::cout<<"***CMD_STORE_COND***"<< std::endl; + { typename vci_param::fast_data_t rdata = elem.rdata()[0]; typename vci_param::fast_data_t wdata = elem.wdata()[0]; - //std::cout << "cmd " << elem.command() << std::endl; - //std::cout << "address " << elem.address() << std::endl; - //std::cout << "rdata " << rdata << std::endl; - //std::cout << "wdata " << wdata << std::endl; - prefix(elem, mwmr) << "WDATA" << wdata<<std::endl; - if ( wdata >= 1 ) { + + //prefix(elem, mwmr) << "WDATA" << std::hex<< wdata<<std::endl; + + //if ( wdata == 0x1) { + if ( wdata >= 1 ) { if ( rdata == vci_param::STORE_COND_ATOMIC ){ - // if ( rdata == vci_param::CMD_STORE_COND){ + prefix(elem, mwmr) << "lock_take" << std::endl; + //std::cout << elem.address() << "lock_take " << std::endl; } else prefix(elem, mwmr) << "lock_miss" << std::endl; } else { if ( rdata == vci_param::STORE_COND_ATOMIC ) - //if ( rdata == vci_param::CMD_STORE_COND) - prefix(elem, mwmr) << "lock_release" << std::endl; + + { + prefix(elem, mwmr) << "lock_release" << std::endl; + //std::cout << "lock_release" << std::endl; + } else prefix(elem, mwmr) << "lock_release_miss" << std::endl; } break; - } - case vci_param::CMD_READ: + } + case vci_param::CMD_READ: break; + case vci_param::CMD_WRITE: { typename vci_param::fast_addr_t base = elem.address() - mwmr.first; - + std::vector<typename vci_param::fast_data_t> wdata = elem.wdata(); typename std::vector<typename vci_param::fast_data_t>::const_iterator v = wdata.begin(); @@ -162,19 +181,31 @@ tmpl(void)::handle_txn(const VciLoggerElem<vci_param> &elem, const mwmr_info_t & switch ( base+offset ) { case 0: - prefix(elem, mwmr) << "write_rptr" << field_sep << *v << std::endl; + { + prefix(elem, mwmr) << "write_rptr" << field_sep << *v << std::endl; + //std::cout << elem.address() << "write_rptr " << std::endl; + } break; case 4: - prefix(elem, mwmr) << "write_wptr" << field_sep << *v << std::endl; + { + prefix(elem, mwmr) << "write_wptr" << field_sep << *v << std::endl; + //std::cout << elem.address() << "write_wptr " << std::endl; +} break; case 8: - prefix(elem, mwmr) << "write_usage" << field_sep << *v << std::endl; + { + prefix(elem, mwmr) << "write_usage" << field_sep << *v << std::endl; + std::cout << elem.address()<< "write_usage " << std::endl; + } break; case 12: if ( *v ) - prefix(elem, mwmr) << "lock_force" << std::endl; + prefix(elem, mwmr) << "lock_force" << std::endl; else - prefix(elem, mwmr) << "lock_release" << std::endl; + { + prefix(elem, mwmr) << "lock_release" << std::endl; + std::cout << elem.address() << "lock_release " << std::endl; + } break; } ++v; @@ -182,7 +213,7 @@ tmpl(void)::handle_txn(const VciLoggerElem<vci_param> &elem, const mwmr_info_t & break; } } -} + } tmpl(void)::transition() { diff --git a/MPSoC/src/request_manager.c b/MPSoC/src/request_manager.c index 91625b392330d78a805db6333e2539de3cff9497..992d166fad3d345115b69cb3d2e873520ee9f924 100755 --- a/MPSoC/src/request_manager.c +++ b/MPSoC/src/request_manager.c @@ -63,12 +63,16 @@ void executeSendSyncTransaction(request *req) { debugInt("syncchannel address \n", req->syncChannel->mwmr_fifo); debugInt("syncchannel nbOfParams \n", req->nbOfParams); debugInt("syncchannel burst \n", req->nbOfParams*sizeof(req->params)); - debugInt("syncchannel params \n", req->params[0]); - sync_write(req->syncChannel->mwmr_fifo, &(req->params), req->nbOfParams*sizeof(req->params)||1);//DG 14.03.+1 - - // sync_read(req->syncChannel->mwmr_fifo, &(req->params), req->nbOfParams*sizeof(req->params)); + debugInt("syncchannel paramsize \n", sizeof(req->params)); + debugInt("syncchannel params \n", req->params[0]); + //sync_write(req->syncChannel->mwmr_fifo, &(req->params), req->nbOfParams*sizeof(req->params)||1);//DG 14.03.+1 + if( req->nbOfParams==0){ + debugMsg("pas de params"); + sync_write(req->syncChannel->mwmr_fifo, &(req->params), 4);//DG 10.5. 4 not 1 +} +else + sync_write(req->syncChannel->mwmr_fifo, &(req->params), req->nbOfParams*sizeof(req->params));//DG 30.03. - //DG 8.2. a-t-on besoin de ID? traceSynchroRequest(req, selectedReq); } @@ -112,12 +116,15 @@ void executeReceiveSyncTransaction(request *req) { debugInt("syncchannel read: nbOfParams \n",selectedReq->nbOfParams); debugInt("syncchannel burst \n", req->nbOfParams*sizeof(req->params)); debugInt("syncchannel params \n", req->params[0]); - - //sync_write(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), selectedReq->nbOfParams*sizeof(selectedReq->params) ); - // sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), selectedReq->nbOfParams*sizeof(selectedReq->params)||1 );////DG 14.03. +1 - - sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), selectedReq->nbOfParams*sizeof(selectedReq->params)||1 );////DG 14.03. +1 - + debugInt("syncchannel paramsize \n", sizeof(req->params)); + + if(req->nbOfParams==0){ + debugMsg("pas de params"); + sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), 4 ); //DG 10.05. 4 not 1 + } + else + sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), selectedReq->nbOfParams*sizeof(selectedReq->params)); + //DG 30.03. debugMsg("after syncchannel read"); debugInt("req->params \n", req->params); @@ -286,6 +293,7 @@ int executable(setOfRequests *list, int nb) { //DG 8.2. ici le probleme! wait queue empty pour B0 :( debugMsg("Send sync"); debugInt("req->syncChannel->inWaitQueue ",req->syncChannel->inWaitQueue); + debugInt("req->syncChannel address", &(req->syncChannel)); if (req->syncChannel->inWaitQueue != NULL) {// DG 8.2. non c'est correct: il faut un rendez-vous synchrone entre inqueue et outqueue //if (req->syncChannel->outWaitQueue != NULL) {//DG 8.2.?? debugMsg("Send sync executable"); @@ -299,6 +307,8 @@ int executable(setOfRequests *list, int nb) { if (req->type == RECEIVE_SYNC_REQUEST) { debugMsg("receive sync"); + debugInt("req->syncChannel->outWaitQueue ",req->syncChannel->outWaitQueue); + debugInt("req->syncChannel address", &(req->syncChannel)); //if ((req->syncChannel->outWaitQueue != NULL)&&(req->syncChannel->inWaitQueue != NULL)) { if (req->syncChannel->outWaitQueue != NULL) {// DG 8.2. non c'est correct: il faut un rendez-vous synchrone entre inqueue et outqueue //if (req->syncChannel->inWaitQueue != NULL) {//DG 8.2.?? diff --git a/MPSoC/src/syncchannel.c b/MPSoC/src/syncchannel.c index cd78352a0ac5db2cff4d91d5089879b04a3f0c1c..26d86fba7b9bf8b2a53c4081a0c412c230d9bb38 100755 --- a/MPSoC/src/syncchannel.c +++ b/MPSoC/src/syncchannel.c @@ -1,6 +1,4 @@ #include <stdlib.h> - - #include "syncchannel.h" #include "request.h" #include "myerrors.h" @@ -18,7 +16,7 @@ void mwmr_sync_flush(struct mwmr_s *fifo){ void sync_read( struct mwmr_s *fifo, void *_ptr, int lensw ){ int i; - debugInt("debug fifo \n",fifo); + debugInt("debug fifo read\n",fifo); debugInt("debug ptr \n",_ptr); debugInt("debug lensw \n", lensw); debugInt("debug fifo status address \n", &(fifo->status)); @@ -27,15 +25,17 @@ void sync_read( struct mwmr_s *fifo, void *_ptr, int lensw ){ debugInt("debug fifo rptr address\n", &(fifo->status->rptr)); debugInt("debug fifo wptr address\n", &(fifo->status->rptr)); debugInt("debug fifo lock \n", fifo->status->lock); - i=mwmr_try_read(fifo,_ptr,lensw); + /*i=mwmr_try_read(fifo,_ptr,lensw); if(i>0) - mwmr_read(fifo,_ptr,(lensw-i)); + mwmr_read(fifo,_ptr,(lensw-i)); */ + mwmr_read(fifo,_ptr,lensw); + //mwmr_read(fifo,_ptr,1); return; } void sync_write( struct mwmr_s *fifo, void *_ptr, int lensw ){ - debugInt("debug fifo \n",fifo); + debugInt("debug fifo write\n",fifo); debugInt("debug ptr \n",_ptr); debugInt("debug lensw \n", lensw); debugInt("debug fifo status address \n", &(fifo->status)); @@ -45,6 +45,7 @@ void sync_write( struct mwmr_s *fifo, void *_ptr, int lensw ){ debugInt("debug fifo wptr address\n", &(fifo->status->rptr)); debugInt("debug fifo lock \n", fifo->status->lock); mwmr_write(fifo,_ptr,lensw); + //mwmr_write(fifo,_ptr,1); return; } diff --git a/src/ddtranslatorSoclib/toSoclib/TasksAndMainGenerator.java b/src/ddtranslatorSoclib/toSoclib/TasksAndMainGenerator.java index a217ffb6fd2967ef28c1fb72c9cfa99aaa7b3967..e2dfbc62f5892614cf755a8cefc106042b302e75 100755 --- a/src/ddtranslatorSoclib/toSoclib/TasksAndMainGenerator.java +++ b/src/ddtranslatorSoclib/toSoclib/TasksAndMainGenerator.java @@ -246,10 +246,10 @@ public class TasksAndMainGenerator { //DG 9.5. if (nbParams>0) - mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ nbParams+";" + CR); + mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ (nbParams*4)+";" + CR); else mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ 1 +";" + CR); -mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = 1;" + CR); + mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = 100;" + CR); //mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = "+((nbParams*4)+4)+";" + CR); mainFile.appendToMainCode(getChannelName(ar, i) + ".gdepth = " +getChannelName(ar, i)+".depth;" + CR); mainFile.appendToMainCode(getChannelName(ar, i) + ".buffer = "+getChannelName(ar, i)+"_data;" + CR); @@ -303,8 +303,8 @@ mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = 1;" + CR); AvatarSignal sig = ar.getSignal1(0); int nbParams= sig.getNbParams(); if (nbParams>0) - mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ nbParams+";" + CR); - else mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ 1 +";" + CR); + mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ (nbParams*4)+";" + CR); + else mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ 4 +";" + CR); // mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = "+ ar.getSizeOfFIFO()+"1;" + CR); mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = "+ ar.getSizeOfFIFO()+";" + CR);//DG 27.03. mainFile.appendToMainCode(getChannelName(ar, i) + ".gdepth = "+getChannelName(ar, i)+".depth;" + CR);