Ignore:
Timestamp:
Jun 26, 2009, 10:43:23 AM (15 years ago)
Author:
rosiere
Message:

1) Correct bug in link two signal
2) Fix error detected with valgrind
3) modif distexe script

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/Environment/src/Environment_transition.cpp

    r124 r128  
    33#define CYCLE_MAX 0
    44#include "../../processor/Morpheo/Common/include/Test.h"
     5#include "../../processor/Morpheo/Common/include/Systemc.h"
    56
    67using namespace morpheo;
     
    1011  void Environment::transition (void)
    1112  {
     13    _cout(ENVIRONMENT, " [%d] <Environment::transition>\n",static_cast<uint32_t>(simulation_cycle()));
     14
    1215    if (NRESET->read() == 0)
    1316      {
     
    2124        for (uint32_t i = 0; i < param->nb_entity; i++)
    2225          for (int32_t j=param->icache_dedicated_nb_port [i]-1; j>=0; j--)
    23             if (icache_rsp_val [i][j] and ICACHE_RSP_ACK [i][j]->read())
    24               {
    25                 delete component_buffer_irsp [i]->read(j)._data;
    26                 component_buffer_irsp [i]->pop(j);
    27               }
     26            {
     27              _cout(ENVIRONMENT, "  * ICACHE_RSP [%d][%d]\n",i,j);
     28
     29              if (icache_rsp_val [i][j] and ICACHE_RSP_ACK [i][j]->read())
     30                {
     31                  _cout(ENVIRONMENT, "  * ICACHE_RSP [%d][%d] : Transaction accepted\n",i,j);
     32                 
     33                  uint32_t num = icache_rsp_num [i][j];
     34
     35                  delete component_buffer_irsp [i]->read(num)._data;
     36                  component_buffer_irsp [i]->pop(num);
     37                }
     38            }
    2839        //=============================================================================
    2940        //===== [ DCACHE - RESPONS ]===================================================
     
    3142        for (uint32_t i = 0; i < param->nb_entity; i++)
    3243          for (int32_t j=param->dcache_dedicated_nb_port [i]-1; j>=0; j--)
    33             if (dcache_rsp_val [i][j] and DCACHE_RSP_ACK [i][j]->read())
    34               {
    35                 delete component_buffer_drsp [i]->read(j)._data;
    36                 component_buffer_drsp [i]->pop(j);
    37               }
     44            {
     45              _cout(ENVIRONMENT, "  * DCACHE_RSP [%d][%d]\n",i,j);
     46              if (dcache_rsp_val [i][j] and DCACHE_RSP_ACK [i][j]->read())
     47                {
     48                  _cout(ENVIRONMENT, "  * DCACHE_RSP [%d][%d] : Transaction accepted\n",i,j);
     49                 
     50                  uint32_t num = dcache_rsp_num [i][j];
     51
     52                  delete component_buffer_drsp [i]->read(num)._data;
     53                  component_buffer_drsp [i]->pop(num);
     54                }
     55            }
    3856
    3957        //=============================================================================
     
    4462            if (ICACHE_REQ_VAL [i][j]->read() and icache_req_ack [i][j])
    4563              {
    46                 _cout(ENVIRONMENT, "ICACHE_REQ [%d][%d] : Transaction accepted\n",i,j);
     64                _cout(ENVIRONMENT, "  * ICACHE_REQ [%d][%d] : Transaction accepted\n",i,j);
    4765
    4866                Ticache_context_t context   = ICACHE_REQ_CONTEXT_ID [i][j]->read();// TODO : test presence
     
    5270                uint32_t          size      = (param->iaccess_size_address [i]+2)/8;
    5371
    54                 _cout(ENVIRONMENT,"  * information\n");
    55                 _cout(ENVIRONMENT,"    * context : %d\n" ,static_cast<uint32_t>(context));
    56                 _cout(ENVIRONMENT,"    * packet  : %d\n" ,static_cast<uint32_t>(packet ));
    57                 _cout(ENVIRONMENT,"    * address : %.x\n",static_cast<uint32_t>(address));
    58                 _cout(ENVIRONMENT,"    * type    : %d\n" ,static_cast<uint32_t>(type   ));
    59                 _cout(ENVIRONMENT,"    * size    : %d\n" ,static_cast<uint32_t>(size   ));
     72                _cout(ENVIRONMENT,"    * information\n");
     73                _cout(ENVIRONMENT,"      * context : %d\n" ,static_cast<uint32_t>(context));
     74                _cout(ENVIRONMENT,"      * packet  : %d\n" ,static_cast<uint32_t>(packet ));
     75                _cout(ENVIRONMENT,"      * address : %.x\n",static_cast<uint32_t>(address));
     76                _cout(ENVIRONMENT,"      * type    : %d\n" ,static_cast<uint32_t>(type   ));
     77                _cout(ENVIRONMENT,"      * size    : %d\n" ,static_cast<uint32_t>(size   ));
    6078
    6179                // search the entity
     
    7290                    (entity.segment->getType() == data::TYPE_TARGET_MEMORY))
    7391                  {
    74                     _cout(ENVIRONMENT,"  * OK !\n");
     92                    _cout(ENVIRONMENT,"    * OK !\n");
    7593                    bus_error = false;
    7694                    uncached  = entity.segment->getUncached();
     
    7896                    if (must_read == true) // Test if must read the ram
    7997                      {
    80                         _cout(ENVIRONMENT,"    * must read\n");
     98                        _cout(ENVIRONMENT,"      * must read\n");
    8199                        // Read all instruction
    82100                        for (unsigned int k=0; k<param->iaccess_nb_instruction[i]; k++)
    83101                          {
    84102                            uint32_t addr = address+k*(size);
    85                             _cout(ENVIRONMENT,"    * addr    : %.8x - ",addr);
     103                            _cout(ENVIRONMENT,"      * addr    : %.8x - ",addr);
    86104
    87105                            bus_error |= !component_data->read(addr,size,read_iram[k]);
     
    102120                else
    103121                  {
    104                     _cout(ENVIRONMENT, "  * KO !\n");
    105                     _cout(ENVIRONMENT, "    * present : %d\n",entity.present);
     122                    _cout(ENVIRONMENT, "    * KO !\n");
     123                    _cout(ENVIRONMENT, "      * present : %d\n",entity.present);
    106124                    if (entity.present)
    107                     _cout(ENVIRONMENT, "    * type    : %d must be data::TYPE_TARGET_MEMORY (%d)\n",entity.segment->getType(), data::TYPE_TARGET_MEMORY);
     125                    _cout(ENVIRONMENT, "      * type    : %d must be data::TYPE_TARGET_MEMORY (%d)\n",entity.segment->getType(), data::TYPE_TARGET_MEMORY);
    108126                     
    109127                    // entity is not present, or is present but is not a memory : have a bus error
     
    121139                                                            cache_type.direction);
    122140               
    123                 _cout(ENVIRONMENT, "    * latence : %d\n",latence);
     141                _cout(ENVIRONMENT, "      * latence : %d\n",latence);
    124142               
    125143                // If is a respons -> compute the latence and push in the write_buffer
    126144                if (must_ack or (must_ack_on_error and bus_error))
    127145                  {
    128                     _cout(ENVIRONMENT, "  * must ack\n");
     146                    _cout(ENVIRONMENT, "    * must ack\n");
    129147                   
    130148                    if (bus_error == true)
    131149                      {
    132                         _cout(ENVIRONMENT,"   * Icache : have a bus error\n");
    133                         _cout(ENVIRONMENT,"     * entity     : %d\n",i);
    134                         _cout(ENVIRONMENT,"     * port       : %d\n",j);
    135                         _cout(ENVIRONMENT,"     * req_addr   : %x\n",address);
    136                         _cout(ENVIRONMENT,"     * req_trdid  : %d\n",context);
    137                         _cout(ENVIRONMENT,"     * req_pktid  : %d\n",packet );
     150                        _cout(ENVIRONMENT,"     * Icache : have a bus error\n");
     151                        _cout(ENVIRONMENT,"       * entity     : %d\n",i);
     152                        _cout(ENVIRONMENT,"       * port       : %d\n",j);
     153                        _cout(ENVIRONMENT,"       * req_addr   : %x\n",address);
     154                        _cout(ENVIRONMENT,"       * req_trdid  : %d\n",context);
     155                        _cout(ENVIRONMENT,"       * req_pktid  : %d\n",packet );
    138156
    139157                        // Write in instruction [0] the bad address (only 32bit ....)
     
    142160                           
    143161                    // Simplification : the size of a line is a multiple of size_iword (no test)
    144                     _cout(ENVIRONMENT, "    * push in buffer_irsp[%d]\n",i);
     162                    _cout(ENVIRONMENT, "      * push in buffer_irsp[%d]\n",i);
    145163
    146164                    irsp_t * rsp = new irsp_t(j,
     
    154172                  }
    155173
    156                 _cout(ENVIRONMENT, "  * End request\n");
     174                _cout(ENVIRONMENT, "    * End request\n");
    157175              }
    158176
     
    164182            if (DCACHE_REQ_VAL [i][j]->read() and dcache_req_ack [i][j])
    165183              {
    166                 _cout(ENVIRONMENT, "DCACHE_REQ [%d][%d] : Transaction accepted\n",i,j);
     184                _cout(ENVIRONMENT, "  * DCACHE_REQ [%d][%d] : Transaction accepted\n",i,j);
    167185
    168186                Tdcache_context_t context   = DCACHE_REQ_CONTEXT_ID [i][j]->read();// TODO : test presence
     
    173191                uint32_t          size      = param->daccess_size_data [i]/8;
    174192
    175                 _cout(ENVIRONMENT,"  * information\n");
    176                 _cout(ENVIRONMENT,"    * context : %d\n" ,static_cast<uint32_t>(context));
    177                 _cout(ENVIRONMENT,"    * packet  : %d\n" ,static_cast<uint32_t>(packet ));
    178                 _cout(ENVIRONMENT,"    * address : %.x\n",static_cast<uint32_t>(address));
    179                 _cout(ENVIRONMENT,"    * type    : %d\n" ,static_cast<uint32_t>(type   ));
    180                 _cout(ENVIRONMENT,"    * size    : %d\n" ,static_cast<uint32_t>(size   ));
     193                _cout(ENVIRONMENT,"    * information\n");
     194                _cout(ENVIRONMENT,"      * context : %d\n" ,static_cast<uint32_t>(context));
     195                _cout(ENVIRONMENT,"      * packet  : %d\n" ,static_cast<uint32_t>(packet ));
     196                _cout(ENVIRONMENT,"      * address : %.x\n",static_cast<uint32_t>(address));
     197                _cout(ENVIRONMENT,"      * type    : %d\n" ,static_cast<uint32_t>(type   ));
     198                _cout(ENVIRONMENT,"      * size    : %d\n" ,static_cast<uint32_t>(size   ));
    181199
    182200                bool              uncached  = false;
     
    231249                          uint32_t num_tty   = (address - entity.segment->getBase())>>4;
    232250                          uint32_t num_print = ((address>>2) & 0x3);
    233                           _cout(true,"  * TYPE_TARGET_TTY : num_tty : %d, num_print : %d\n",num_tty, num_print);
     251                          _cout(true,"    * TYPE_TARGET_TTY : num_tty : %d, num_print : %d\n",num_tty, num_print);
    234252                         
    235253                          switch (num_print)
     
    294312                      case data::TYPE_TARGET_MEMORY  :
    295313                        {
    296                           _cout(ENVIRONMENT,"  * TYPE_TARGET_MEMORY\n");
    297                           _cout(ENVIRONMENT,"    * access : %x\n",address);
     314                          _cout(ENVIRONMENT,"    * TYPE_TARGET_MEMORY\n");
     315                          _cout(ENVIRONMENT,"      * access : %x\n",address);
    298316
    299317                          if (must_read == true)
    300318                            {
    301319                              // Read
    302                               _cout(ENVIRONMENT,"    * Read  (%d bytes)\n",size);
     320                              _cout(ENVIRONMENT,"      * Read  (%d bytes)\n",size);
    303321                              bus_error |= !component_data->read(address,nb_bytes,read_dram[0]); // always read a complete word
    304322
     
    315333                            {
    316334                              // Write
    317                               _cout(ENVIRONMENT,"    * Write (%d bytes)\n",size);
    318                               _cout(ENVIRONMENT,"    * Wdata : %x\n",wdata);
     335                              _cout(ENVIRONMENT,"      * Write (%d bytes)\n",size);
     336                              _cout(ENVIRONMENT,"      * Wdata : %x\n",wdata);
    319337                              itoa<Tdcache_data_t>(wdata,write_dram,nb_bytes);
    320338
     
    330348                      case data::TYPE_TARGET_RAMLOCK :
    331349                        {
    332                           _cout(ENVIRONMENT,"  * TYPE_TARGET_RAMLOCK\n");
     350                          _cout(ENVIRONMENT,"    * TYPE_TARGET_RAMLOCK\n");
    333351
    334352                          // Access is on a byte, else error
     
    343361                          uint32_t num_component_ramlock = entity.segment->getIndex();
    344362
    345 //                        _cout(ENVIRONMENT,"    * num_ramlock           : %d\n",num_ramlock          );
    346 //                        _cout(ENVIRONMENT,"    * num_lock              : %d\n",num_lock             );
    347 //                        _cout(ENVIRONMENT,"    * num_component_ramlock : %d\n",num_component_ramlock);
    348                           _cout(true,"    * num_ramlock           : %d\n",num_ramlock          );
    349                           _cout(true,"    * num_lock              : %d\n",num_lock             );
    350                           _cout(true,"    * num_component_ramlock : %d\n",num_component_ramlock);
     363                          _cout(ENVIRONMENT,"      * num_ramlock           : %d\n",num_ramlock          );
     364                          _cout(ENVIRONMENT,"      * num_lock              : %d\n",num_lock             );
     365                          _cout(ENVIRONMENT,"      * num_component_ramlock : %d\n",num_component_ramlock);
     366//                        _cout(true,"      * num_ramlock           : %d\n",num_ramlock          );
     367//                        _cout(true,"      * num_lock              : %d\n",num_lock             );
     368//                        _cout(true,"      * num_component_ramlock : %d\n",num_component_ramlock);
    351369
    352370                          // No test : because out of range
     
    364382                            read_dram [0][num_lock] = static_cast<char>(component_ramlock [num_component_ramlock]->write(num_ramlock));
    365383
    366                           _cout(true,"    * lock                  : %d\n",(int)read_dram [0][num_lock]);
    367 //                        _cout(ENVIRONMENT,"    * lock                  : %d\n",(int)read_dram [0][num_lock]);
     384//                        _cout(true,"      * lock                  : %d\n",(int)read_dram [0][num_lock]);
     385                          _cout(ENVIRONMENT,"      * lock                  : %d\n",(int)read_dram [0][num_lock]);
    368386                         
    369387                          break;
     
    375393                      case data::TYPE_TARGET_SIM2OS  :
    376394                        {
    377                           _cout(ENVIRONMENT,"  * TYPE_TARGET_SIM2OS\n");
     395                          _cout(ENVIRONMENT,"    * TYPE_TARGET_SIM2OS\n");
    378396
    379397                          // Mapping :
     
    385403                          uint32_t num_reg = (address - entity.segment->getBase())>>2;
    386404
    387                           _cout(ENVIRONMENT,"    * num_reg : %d\n",num_reg);
     405                          _cout(ENVIRONMENT,"      * num_reg : %d\n",num_reg);
    388406                         
    389407                          switch (num_reg)
     
    398416                                else
    399417                                  {
    400                                     _cout(ENVIRONMENT,"    * service     : %x\n",wdata);
     418                                    _cout(ENVIRONMENT,"      * service     : %x\n",wdata);
    401419                                    component_sim2os->execute(sim2os::int2service(static_cast<uint32_t>(wdata)));
    402420                                  }
     
    414432                                    // Decomposition en groupe octect
    415433                                    Tdcache_data_t result = static_cast<Tdcache_data_t>(reinterpret_cast<uint64_t>(component_sim2os->result));
    416                                     _cout(ENVIRONMENT,"    * result      : %x\n",result);
     434                                    _cout(ENVIRONMENT,"      * result      : %x\n",result);
    417435                                   
    418436                                    itoa<Tdcache_data_t>(result,read_dram[0],size);
     
    431449                                    // Decomposition en groupe octect
    432450                                    Tdcache_data_t error = (Tdcache_data_t)component_sim2os->error;
    433                                     _cout(ENVIRONMENT,"    * error       : %x\n",error);
     451                                    _cout(ENVIRONMENT,"      * error       : %x\n",error);
    434452                                   
    435453                                    itoa<Tdcache_data_t>(error,read_dram[0],size);
     
    447465                                  else
    448466                                    {
    449                                       _cout(ENVIRONMENT,"    * argument[%d] : %x\n",num_reg-1,wdata);
     467                                      _cout(ENVIRONMENT,"      * argument[%d] : %x\n",num_reg-1,wdata);
    450468                                      component_sim2os->parameter(num_reg-2,(void *)wdata);
    451469                                    }
     
    498516                    if (bus_error == true)
    499517                      {
    500                         _cout(ENVIRONMENT,"   * Dcache : have a bus error\n");
    501                         _cout(ENVIRONMENT,"     * entity     : %d\n",i);
    502                         _cout(ENVIRONMENT,"     * port       : %d\n",j);
    503                         _cout(ENVIRONMENT,"     * req_addr   : 0x%x\n",address);
    504                         _cout(ENVIRONMENT,"     * req_trdid  : %d\n",context);
    505                         _cout(ENVIRONMENT,"     * req_pktid  : %d\n",packet );
     518                        _cout(ENVIRONMENT,"     * Dcache : have a bus error\n");
     519                        _cout(ENVIRONMENT,"       * entity     : %d\n",i);
     520                        _cout(ENVIRONMENT,"       * port       : %d\n",j);
     521                        _cout(ENVIRONMENT,"       * req_addr   : 0x%x\n",address);
     522                        _cout(ENVIRONMENT,"       * req_trdid  : %d\n",context);
     523                        _cout(ENVIRONMENT,"       * req_pktid  : %d\n",packet );
    506524
    507525                        // Write in data [0] the bad address (32bit or 64bits    )
     
    509527                      }
    510528
    511                     _cout(ENVIRONMENT,"     * Rdata : ");
     529                    _cout(ENVIRONMENT,"       * Rdata : ");
    512530                    for (uint32_t x=0; x<nb_bytes; x++)
    513531                      __cout(ENVIRONMENT,"%.2x",0xff&static_cast<uint32_t>(read_dram[0][x]));
Note: See TracChangeset for help on using the changeset viewer.