Ignore:
Timestamp:
May 16, 2009, 4:42:39 PM (16 years ago)
Author:
rosiere
Message:

1) Platforms : add new organization for test
2) Load_Store_Unit : add array to count nb_check in store_queue
3) Issue_queue and Core_Glue : rewrite the issue network
4) Special_Register_Unit : add reset value to register CID
5) Softwares : add multicontext test
6) Softwares : add SPECINT
7) Softwares : add MiBench?
7) Read_queue : inhib access for r0
8) Change Core_Glue (network) - dont yet support priority and load balancing scheme

Location:
trunk/IPs/systemC/Environment/src
Files:
3 edited

Legend:

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

    r88 r117  
    55  bool Environment::simulation_end(void)
    66  {
    7     return (nb_context_stop >= param->nb_entity);
     7    return (nb_context_stop >= param->nb_thread);
    88  }
    99
  • trunk/IPs/systemC/Environment/src/Environment_stop.cpp

    r88 r117  
    55  void Environment::stop(uint32_t num_context)
    66  {
     7
     8    cout("<stop> : num_context     : %d\n",num_context);
     9    cout("<stop> : context_stop    : %d\n",context_stop [num_context]);
     10    cout("<stop> : nb_context_stop : %d\n",nb_context_stop);
     11
     12
    713    if (context_stop [num_context] == false)
    814      {
     
    1016        nb_context_stop ++;
    1117       
    12         if (nb_context_stop >= param->nb_entity)
    13           sc_stop();
     18        if (nb_context_stop >= param->nb_thread)
     19          {
     20            cout("<stop> : end simulation\n");
     21            sc_stop();
     22          }
    1423      }
    1524  }
  • trunk/IPs/systemC/Environment/src/Environment_transition.cpp

    r114 r117  
    5252                uint32_t          size      = (param->iaccess_size_address [i]+2)/8;
    5353
    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   ));
     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   ));
    6060
    6161                // search the entity
     
    7272                    (entity.segment->getType() == data::TYPE_TARGET_MEMORY))
    7373                  {
    74                     _cout(ENVIRONMENT," * OK !\n");
     74                    _cout(ENVIRONMENT,"  * OK !\n");
    7575                    bus_error = false;
    7676                    uncached  = entity.segment->getUncached();
     
    7878                    if (must_read == true) // Test if must read the ram
    7979                      {
    80                         _cout(ENVIRONMENT,"   * must read\n");
     80                        _cout(ENVIRONMENT,"    * must read\n");
    8181                        // Read all instruction
    8282                        for (unsigned int k=0; k<param->iaccess_nb_instruction[i]; k++)
    8383                          {
    8484                            uint32_t addr = address+k*(size);
    85                             _cout(ENVIRONMENT,"   * addr    : %.8x\n",addr);
     85                            _cout(ENVIRONMENT,"    * addr    : %.8x\n",addr);
    8686
    8787                            bus_error |= !component_data->read(addr,size,read_iram[k]);
     
    9393                              }
    9494
    95                             _cout(ENVIRONMENT,"   * inst    :");
    96                             for (int32_t cpt=(param->iaccess_size_instruction[context]/8)-1; cpt>=0; --cpt)
    97                               _cout(ENVIRONMENT, "%.2x",0xff&static_cast<uint32_t>(read_iram[k][cpt]));
    98                             _cout(ENVIRONMENT, "\n");
     95                            _cout(ENVIRONMENT,"    * inst    :");
     96                            for (int32_t cpt=(param->iaccess_size_instruction[i]/8)-1; cpt>=0; --cpt)
     97                              __cout(ENVIRONMENT, "%.2x",0xff&static_cast<uint32_t>(read_iram[k][cpt]));
     98                            __cout(ENVIRONMENT, "\n");
    9999                          }
    100100                      }
     
    102102                else
    103103                  {
    104                     _cout(ENVIRONMENT, " * KO !\n");
    105                     _cout(ENVIRONMENT, "   * present : %d\n",entity.present);
     104                    _cout(ENVIRONMENT, "  * KO !\n");
     105                    _cout(ENVIRONMENT, "    * present : %d\n",entity.present);
    106106                    if (entity.present)
    107                     _cout(ENVIRONMENT, "   * type    : %d must be data::TYPE_TARGET_MEMORY (%d)\n",entity.segment->getType(), data::TYPE_TARGET_MEMORY);
     107                    _cout(ENVIRONMENT, "    * type    : %d must be data::TYPE_TARGET_MEMORY (%d)\n",entity.segment->getType(), data::TYPE_TARGET_MEMORY);
    108108                     
    109109                    // entity is not present, or is present but is not a memory : have a bus error
     
    121121                                                            cache_type.direction);
    122122               
    123                 _cout(ENVIRONMENT, "   * latence : %d\n",latence);
     123                _cout(ENVIRONMENT, "    * latence : %d\n",latence);
    124124               
    125125                // If is a respons -> compute the latence and push in the write_buffer
    126126                if (must_ack or (must_ack_on_error and bus_error))
    127127                  {
    128                     _cout(ENVIRONMENT, " * must ack\n");
     128                    _cout(ENVIRONMENT, "  * must ack\n");
    129129                   
    130130                    if (bus_error == true)
    131131                      {
    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 );
     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 );
    138138
    139139                        // Write in instruction [0] the bad address (only 32bit ....)
     
    142142                           
    143143                    // Simplification : the size of a line is a multiple of size_iword (no test)
    144                     _cout(ENVIRONMENT, "   * push in buffer_irsp[%d]\n",i);
     144                    _cout(ENVIRONMENT, "    * push in buffer_irsp[%d]\n",i);
    145145
    146146                    irsp_t * rsp = new irsp_t(context,
     
    153153                  }
    154154
    155                 _cout(ENVIRONMENT, " * End request\n");
     155                _cout(ENVIRONMENT, "  * End request\n");
    156156              }
    157157
     
    172172                uint32_t          size      = param->daccess_size_data [i]/8;
    173173
    174                 _cout(ENVIRONMENT," * information\n");
    175                 _cout(ENVIRONMENT,"   * context : %d\n" ,static_cast<uint32_t>(context));
    176                 _cout(ENVIRONMENT,"   * packet  : %d\n" ,static_cast<uint32_t>(packet ));
    177                 _cout(ENVIRONMENT,"   * address : %.x\n",static_cast<uint32_t>(address));
    178                 _cout(ENVIRONMENT,"   * type    : %d\n" ,static_cast<uint32_t>(type   ));
    179                 _cout(ENVIRONMENT,"   * size    : %d\n" ,static_cast<uint32_t>(size   ));
     174                _cout(ENVIRONMENT,"  * information\n");
     175                _cout(ENVIRONMENT,"    * context : %d\n" ,static_cast<uint32_t>(context));
     176                _cout(ENVIRONMENT,"    * packet  : %d\n" ,static_cast<uint32_t>(packet ));
     177                _cout(ENVIRONMENT,"    * address : %.x\n",static_cast<uint32_t>(address));
     178                _cout(ENVIRONMENT,"    * type    : %d\n" ,static_cast<uint32_t>(type   ));
     179                _cout(ENVIRONMENT,"    * size    : %d\n" ,static_cast<uint32_t>(size   ));
    180180
    181181                bool              uncached  = false;
     
    230230                          uint32_t num_tty   = (address - entity.segment->getBase())>>4;
    231231                          uint32_t num_print = ((address>>2) & 0x3);
    232                           _cout(ENVIRONMENT," * TYPE_TARGET_TTY : num_tty : %d, num_print : %d\n",num_tty, num_print);
     232                          _cout(true," * TYPE_TARGET_TTY : num_tty : %d, num_print : %d\n",num_tty, num_print);
    233233                         
    234234                          switch (num_print)
     
    243243                            case 1 : // STOP
    244244                              {
    245                                 printf("\n\t***** [ stop    ] Time : %.10d - Address : %.8x - Wdata[31:0] : %.2x%.2x%.2x%.2x         *****\n"
     245                                _cout(true,"\n");
     246                                _cout(true,"***********************************************************************************************\n");
     247                                _cout(true,"***** [ STOP    ] Time : %.10d - Address : %.8x - Wdata[31:0] : %.2x%.2x%.2x%.2x         *****\n"
    246248                                       ,static_cast<uint32_t>(sc_simulation_time())
    247249                                       ,static_cast<uint32_t>(address             )
     
    251253                                       ,static_cast<uint32_t>((wdata>> 0)&0xff)
    252254                                       );
    253 
    254                                 if (wdata == 0)
    255                                   std::cout << STR_OK << std::endl;
    256                                 else
    257                                   std::cout << STR_KO << std::endl;
     255                                _cout(true,"***********************************************************************************************\n");
     256                                _cout(true,"\n");
     257                                _cout(true,"%s\n",(wdata == 0)?STR_OK:STR_KO);
     258                                _cout(true,"\n");
    258259
    259260                                stop (context);
     
    263264                            case 2 : // PRINT
    264265                              {
    265                                 printf("\n\t----- [ print   ] Time : %.10d - Address : %.8x - Wdata[31:0] : %.2x%.2x%.2x%.2x         -----\n"
     266                                _cout(true,"\n");
     267                                _cout(true,"-----------------------------------------------------------------------------------------------\n");
     268                                _cout(true,"----- [ PRINT   ] Time : %.10d - Address : %.8x - Wdata[31:0] : %.2x%.2x%.2x%.2x         -----\n"
    266269                                       ,static_cast<uint32_t>(sc_simulation_time())
    267270                                       ,static_cast<uint32_t>(address             )
     
    271274                                       ,static_cast<uint32_t>((wdata>> 0)&0xff)
    272275                                       );
     276                                _cout(true,"-----------------------------------------------------------------------------------------------\n");
     277                                _cout(true,"\n");
    273278                               
    274279                                break;
     
    276281                            default :
    277282                              {
    278                                 printf("[address : %.8x] tty %d, reg %d don't exist\n",static_cast<uint32_t>(address),num_tty,num_print);
     283                                _cout(true,"[address : %.8x] tty %d, reg %d don't exist\n",static_cast<uint32_t>(address),num_tty,num_print);
    279284                                bus_error = true;
    280285                              }
     
    288293                      case data::TYPE_TARGET_MEMORY  :
    289294                        {
    290                           _cout(ENVIRONMENT,"MEMORY\n");
    291                           _cout(ENVIRONMENT,"access : %x\n",address);
     295                          _cout(ENVIRONMENT,"  * TYPE_TARGET_MEMORY\n");
     296                          _cout(ENVIRONMENT,"    * access : %x\n",address);
    292297
    293298                          if (must_read == true)
    294299                            {
    295300                              // Read
    296                               _cout(ENVIRONMENT," * Read  (%d bytes)\n",size);
     301                              _cout(ENVIRONMENT,"    * Read  (%d bytes)\n",size);
    297302                              bus_error |= !component_data->read(address,nb_bytes,read_dram[0]); // always read a complete word
    298303
    299                               _cout(ENVIRONMENT," * Rdata : ");
    300                               for (uint32_t i=0; i<nb_bytes; i++)
    301                                 _cout(ENVIRONMENT,"%.2x",0xff&static_cast<uint32_t>(read_dram[0][i]));
    302                               _cout(ENVIRONMENT,".\n");
    303                              
    304304                              // Multiple copy
    305305                              for (unsigned int it_size_data = nb_bytes; it_size_data < size; it_size_data+=nb_bytes)
     
    314314                            {
    315315                              // Write
    316                               _cout(ENVIRONMENT," * Write (%d bytes)\n",size);
    317                               _cout(ENVIRONMENT," * Wdata : %x\n",wdata);
     316                              _cout(ENVIRONMENT,"    * Write (%d bytes)\n",size);
     317                              _cout(ENVIRONMENT,"    * Wdata : %x\n",wdata);
    318318                              itoa<Tdcache_data_t>(wdata,write_dram,nb_bytes);
    319319
     
    329329                      case data::TYPE_TARGET_RAMLOCK :
    330330                        {
     331                          _cout(ENVIRONMENT,"  * TYPE_TARGET_RAMLOCK\n");
     332
    331333                          // Access is on a byte, else error
    332334                          if (nb_bytes != 1)
     
    338340                          uint32_t num_ramlock           = (address - entity.segment->getBase()); // Char access
    339341                          uint32_t num_component_ramlock = entity.segment->getIndex();
     342
     343                          _cout(ENVIRONMENT,"    * num_ramlock           : %d\n",num_ramlock          );
     344                          _cout(ENVIRONMENT,"    * num_component_ramlock : %d\n",num_component_ramlock);
    340345
    341346                          // No test : because out of range
     
    361366                      case data::TYPE_TARGET_SIM2OS  :
    362367                        {
     368                          _cout(ENVIRONMENT,"  * TYPE_TARGET_SIM2OS\n");
     369
    363370                          // Mapping :
    364371                          // [0]  number of service - Wonly - A write in this register lunch the execution of service
     
    368375
    369376                          uint32_t num_reg = (address - entity.segment->getBase())>>2;
     377
     378                          _cout(ENVIRONMENT,"    * num_reg : %d\n",num_reg);
    370379                         
    371380                          switch (num_reg)
     
    380389                                else
    381390                                  {
    382                                     _cout(ENVIRONMENT,"<sim2os> service     : %x\n",wdata);
     391                                    _cout(ENVIRONMENT,"    * service     : %x\n",wdata);
    383392                                    component_sim2os->execute(sim2os::int2service(static_cast<uint32_t>(wdata)));
    384393                                  }
     
    396405                                    // Decomposition en groupe octect
    397406                                    Tdcache_data_t result = static_cast<Tdcache_data_t>(reinterpret_cast<uint64_t>(component_sim2os->result));
    398                                     _cout(ENVIRONMENT,"<sim2os> result      : %x\n",result);
     407                                    _cout(ENVIRONMENT,"    * result      : %x\n",result);
    399408                                   
    400409                                    itoa<Tdcache_data_t>(result,read_dram[0],size);
     
    413422                                    // Decomposition en groupe octect
    414423                                    Tdcache_data_t error = (Tdcache_data_t)component_sim2os->error;
    415                                     _cout(ENVIRONMENT,"<sim2os> error       : %x\n",error);
     424                                    _cout(ENVIRONMENT,"    * error       : %x\n",error);
    416425                                   
    417426                                    itoa<Tdcache_data_t>(error,read_dram[0],size);
     
    429438                                  else
    430439                                    {
    431                                       _cout(ENVIRONMENT,"<sim2os> argument[%d] : %x\n",num_reg-1,wdata);
     440                                      _cout(ENVIRONMENT,"    * argument[%d] : %x\n",num_reg-1,wdata);
    432441                                      component_sim2os->parameter(num_reg-2,(void *)wdata);
    433442                                    }
     
    480489                    if (bus_error == true)
    481490                      {
    482                         _cout(ENVIRONMENT,"  * Dcache : have a bus error\n");
    483                         _cout(ENVIRONMENT,"    * entity     : %d\n",i);
    484                         _cout(ENVIRONMENT,"    * port       : %d\n",j);
    485                         _cout(ENVIRONMENT,"    * req_addr   : 0x%x\n",address);
    486                         _cout(ENVIRONMENT,"    * req_trdid  : %d\n",context);
    487                         _cout(ENVIRONMENT,"    * req_pktid  : %d\n",packet );
     491                        _cout(ENVIRONMENT,"   * Dcache : have a bus error\n");
     492                        _cout(ENVIRONMENT,"     * entity     : %d\n",i);
     493                        _cout(ENVIRONMENT,"     * port       : %d\n",j);
     494                        _cout(ENVIRONMENT,"     * req_addr   : 0x%x\n",address);
     495                        _cout(ENVIRONMENT,"     * req_trdid  : %d\n",context);
     496                        _cout(ENVIRONMENT,"     * req_pktid  : %d\n",packet );
    488497
    489498                        // Write in data [0] the bad address (32bit or 64bits    )
    490499                        itoa<Tdcache_data_t>(address,read_dram[0],param->daccess_size_data[i]/8);
    491500                      }
     501
     502                    _cout(ENVIRONMENT,"     * Rdata : ");
     503                    for (uint32_t i=0; i<nb_bytes; i++)
     504                      __cout(ENVIRONMENT,"%.2x",0xff&static_cast<uint32_t>(read_dram[0][i]));
     505                    _cout(ENVIRONMENT,".\n");
    492506                   
    493507                    // Simplification : the size of a line is a multiple of size_iword (no test)
     
    501515                  }
    502516              }
     517
    503518        //=============================================================================
    504519        //===== [ OTHERS ]=============================================================
     
    523538//          {
    524539//            // Test if transaction
    525 // //         cout << "[" << i << "]"
    526 // //              << "[" << j   << "] "
    527 // //              << "dreq_val : " << DCACHE [i][j].REQ_VAL.read() << " "
    528 // //              << "dreq_ack : " << dreq_ack [i][j] << endl;
    529540
    530541//            if ( (DCACHE [i][j].REQ_VAL.read() && dreq_ack [i][j]) == false)
     
    600611//                      case 1 : // STOP
    601612//                        {
    602 //                          printf("\n\t***** [ stop    ] Time : %.10d - Address : %.8x - Wdata[31:0] : %.2x%.2x%.2x%.2x         *****\n"
     613//                          cout("\n\t***** [ stop    ] Time : %.10d - Address : %.8x - Wdata[31:0] : %.2x%.2x%.2x%.2x         *****\n"
    603614//                                 ,(unsigned int)sc_simulation_time()
    604615//                                 ,(unsigned int)addr
     
    624635//                      case 2 : // PRINT
    625636//                        {
    626 //                          printf("\n\t----- [ print   ] Time : %.10d - Address : %.8x - Wdata[31:0] : %.2x%.2x%.2x%.2x         -----\n"
     637//                          cout("\n\t----- [ print   ] Time : %.10d - Address : %.8x - Wdata[31:0] : %.2x%.2x%.2x%.2x         -----\n"
    627638//                                 ,(unsigned int)sc_simulation_time()
    628639//                                 ,(unsigned int)addr
     
    637648//                      default :
    638649//                        {
    639 //                          printf("<%s> : [address : %.8x] tty %d, reg %d don't exist\n",NAME,(unsigned int)addr,num_tty,num_print);
     650//                          cout("<%s> : [address : %.8x] tty %d, reg %d don't exist\n",NAME,(unsigned int)addr,num_tty,num_print);
    640651//                          exit(1);
    641652//                        }
     
    667678
    668679//                    /*
    669 //                    printf("Access ramlock   ( %d )\n" ,(uint32_t)sc_simulation_time());
    670 //                    printf(" * addr          : %.8x\n" ,(uint32_t)addr);
    671 //                    printf(" * trdid         : %d\n"   ,(uint32_t)DCACHE[i][j].REQ_TRDID.read());
    672 //                    printf(" * r/w           : %d/%d\n",must_read,must_write);
    673 //                    printf(" * val           : %d\n"   ,(uint32_t)read_dram[0]);
     680//                    cout("Access ramlock   ( %d )\n" ,(uint32_t)sc_simulation_time());
     681//                    cout(" * addr          : %.8x\n" ,(uint32_t)addr);
     682//                    cout(" * trdid         : %d\n"   ,(uint32_t)DCACHE[i][j].REQ_TRDID.read());
     683//                    cout(" * r/w           : %d/%d\n",must_read,must_write);
     684//                    cout(" * val           : %d\n"   ,(uint32_t)read_dram[0]);
    674685//                    */
    675686//                    break;
     
    696707//                          else
    697708//                            {
    698 //                              printf("<sim2os> service     : %.8x\n",(uint32_t)wdata);
     709//                              cout("<sim2os> service     : %.8x\n",(uint32_t)wdata);
    699710//                              component_sim2os->execute(int2service((uint32_t)wdata));
    700711//                            }
     
    712723//                              // Decomposition en groupe octect
    713724//                              uint32_t result = (uint32_t) component_sim2os->result;
    714 //                              printf("<sim2os> result      : %.8x (%d)\n",result,result);
     725//                              cout("<sim2os> result      : %.8x (%d)\n",result,result);
    715726                               
    716727//                              read_dram = itoa(result,read_dram,SIZE_DDATA/8);
     
    729740//                              // Decomposition en groupe octect
    730741//                              uint32_t error = (uint32_t) component_sim2os->error;
    731 //                              printf("<sim2os> error       : %.8x\n",error);
     742//                              cout("<sim2os> error       : %.8x\n",error);
    732743//                              read_dram = itoa(error ,read_dram,SIZE_DDATA/8);
    733744//                            }
     
    744755//                            {
    745756//                              uint32_t data = (uint32_t)wdata;
    746 //                              printf("<sim2os> argument[%d] : %.8x\n",num_reg-1,data);
     757//                              cout("<sim2os> argument[%d] : %.8x\n",num_reg-1,data);
    747758//                              component_sim2os->parameter(num_reg-2,(void *)data);
    748759//                            }
     
    793804//              {
    794805//                if (bus_error == true)
    795 //                  cout << "Dcache : have a bus error" << endl;
     806//                  cout("Dcache : have a bus error");
    796807//                component_buffer_drsp [i]->push(latence,
    797808//                                                         Entry((uint32_t)DCACHE [i][j].REQ_TRDID.read() ,
Note: See TracChangeset for help on using the changeset viewer.