Ignore:
Timestamp:
May 21, 2007, 12:01:51 PM (17 years ago)
Author:
rosiere
Message:

Documentation pour chaque composant.
Documentation : ajout d'un poster et d'un article.
RegisterFile_Multi_Banked_Glue - non encore stable.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/SelfTest/src/test.cpp

    r15 r23  
    99#define NB_ITERATION 16
    1010
     11#define TEXT(str)  do {cout << "<" << name << "> : " << str << endl;} while (0)
    1112#define LABEL(str) do {cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; _RegisterFile_Multi_Banked_Glue->vhdl_testbench_label(str);} while (0)
    1213
     
    1819           morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::Parameters _param)
    1920{
    20   cout << "<" << name << "> : Simulation SystemC" << endl;
     21  TEXT("Simulation SystemC");
    2122
    2223  RegisterFile_Multi_Banked_Glue * _RegisterFile_Multi_Banked_Glue = new RegisterFile_Multi_Banked_Glue (name.c_str(),
     
    192193   ********************************************************/
    193194 
    194   cout << "<" << name << "> Instanciation of _RegisterFile_Multi_Banked_Glue" << endl;
     195   TEXT("Instanciation of _RegisterFile_Multi_Banked_Glue");
    195196 
    196197  (*(_RegisterFile_Multi_Banked_Glue->in_CLOCK))        (*(CLOCK));
     
    247248
    248249
    249   cout << "<" << name << "> Start Simulation ............" << endl;
     250   TEXT("Start Simulation ............");
    250251 
    251252  /********************************************************
     
    265266
    266267  uint32_t   read_in_num_bank [_param._nb_port_read]; // Number of bank
    267 //Tcontrol_t read_in_valid    [_param._nb_port_read];
     268  Tcontrol_t read_is_busy     [_param._nb_port_read];
     269  bool       read_out_find    [_param._nb_bank][_param._nb_port_read_by_bank]; 
     270  uint32_t   read_out_port    [_param._nb_bank][_param._nb_port_read_by_bank]; 
     271
    268272  Tcontrol_t read_in_ack      [_param._nb_port_read]; // to test
    269273  Tdata_t    read_in_data     [_param._nb_port_read]; // to test
    270274  Tcontrol_t read_out_val     [_param._nb_bank][_param._nb_port_read_by_bank]; 
    271   Tcontrol_t read_out_ack     [_param._nb_bank][_param._nb_port_read_by_bank]; 
    272275  Taddress_t read_out_address [_param._nb_bank][_param._nb_port_read_by_bank]; 
    273   Tcontrol_t read_is_busy     [_param._nb_port_read];
    274   Tcontrol_t read_select_val  [_param._nb_bank][_param._nb_port_read        ];
    275   Tcontrol_t read_select_ack  [_param._nb_bank][_param._nb_port_read        ];
     276  Tcontrol_t read_select_val  [_param._nb_bank][_param._nb_port_read_by_bank][_param._nb_port_read];
    276277
    277278  LABEL("Loop of Test");
     
    281282      LABEL("Iteration "+toString(iteration));
    282283     
    283       LABEL("Test read_in");
     284      //LABEL("Test read_in");
    284285     
    285286      // Write in interface "read_in"
     
    287288        {
    288289          read_in_num_bank  [i] =  rand() % _param._nb_bank;
    289           Tcontrol_t read_in_valid = (rand() % 2) != 0;
     290          Tcontrol_t read_in_val = (rand() % 2) != 0;
    290291
    291292          Taddress_t address    = (read_in_num_bank[i] << _param._shift_address) | (gen_mask<Taddress_t>(_param._size_address-_param._shift_address) & i);
    292293
    293           read_is_busy      [i] = (read_in_valid == 0);
    294           read_in_ack       [i] = 0;
    295           read_in_data      [i] = 0;
    296           READ_IN_VAL       [i]->write(read_in_valid);
    297           READ_IN_ADDRESS   [i]->write(address);
    298 
    299           for (uint32_t j=0; j<_param._nb_bank; j++)
    300             read_select_ack [j][i] = 0;
     294          read_is_busy      [i] = (read_in_val == 0);   // invalid = busy
     295          read_in_ack       [i] = 0;                    // init
     296          read_in_data      [i] = 0;                    // init
     297          READ_IN_VAL       [i]->write(read_in_val);    // write signal
     298          READ_IN_ADDRESS   [i]->write(address);        // write signal
    301299        }
    302300
    303       for (uint32_t i=0; i<_param._nb_bank; i++)
    304         for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
    305           {
    306             read_out_ack      [i][j] = (rand() % 2) != 0;
    307             READ_OUT_ACK      [i][j]->write(read_out_ack      [i][j]);
    308             READ_OUT_DATA     [i][j]->write((j<<1)|1); // (j<<1)|1 afin de n'avoir jamais 0
    309           }
    310      
    311301      // compute the good read_select
    312302      for (uint32_t i=0; i<_param._nb_bank; i++)
    313303        for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
    314304          {
     305            Tcontrol_t read_out_ack = (rand() % 2) != 0;
     306            READ_OUT_ACK     [i][j]->write(read_out_ack);
     307            READ_OUT_DATA    [i][j]->write((j<<1)|1);            // (j<<1)|1 afin de n'avoir jamais 0
     308
     309            read_out_find    [i][j] = false;
     310            read_out_port    [i][j] = 0;
     311
     312            read_out_val     [i][j] = 0;
     313            read_out_address [i][j] = 0;
     314
    315315            bool find = false; // have find a port_in to link with this port_out
    316316            for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port[j]; k++)
    317317              {
    318 
    319318                uint32_t num_port; // number of port
    320319               
     
    323322                  num_port = k;
    324323                else
    325                   num_port = _param._link_port_read [i];
    326 
    327                 read_select_val [i][num_port] = read_out_ack [i][j] && not read_is_busy [num_port];
    328                
    329                 if ((read_out_ack [i][j] == 0) || find)
    330                   read_select_ack [i][num_port] = 0; // read_out is busy or already find
    331                 else
     324                  num_port = k*_param._nb_port_read_by_bank+j;
     325
     326                read_select_val [i][j][k] = read_out_ack and not read_is_busy [num_port] and (read_in_num_bank[num_port] == i); // select val if port is not busy and out accept a data
     327                Tcontrol_t read_select_ack = 0;
     328
     329                // test a previous find
     330                if (not ((read_out_ack == 0) || find))
    332331                  {
    333332                    // find a busy port?
    334                     find = not read_is_busy [num_port];
    335                     read_is_busy       [num_port]|= find;
    336                     read_select_ack [i][num_port] = find;
     333                    find                      = read_select_val;
     334                    read_is_busy   [num_port]|= find; // port became busy if find
     335                    read_select_ack           = find; // ack if find
    337336
    338337                    if (find)
    339338                      {
     339                        read_out_find    [i][j] = true;
     340                        read_out_port    [i][j] = num_port;
     341
     342                        // know the good output
    340343                        read_in_ack      [num_port] = 1;
    341344                        read_in_data     [num_port] = ((j<<1)|1);
    342345                        read_out_val     [i][j]     = 1;
    343                         read_out_address [i][j]     = (read_in_num_bank[i] << _param._shift_address) | (gen_mask<Taddress_t>(_param._size_address-_param._shift_address) & i);
     346                        read_out_address [i][j]     = (i << _param._shift_address) | (gen_mask<Taddress_t>(_param._size_address-_param._shift_address) & num_port);
    344347                      }
    345348                  }
    346349               
    347                 READ_SELECT_ACK [i][j][k]->write(read_select_ack [i][num_port]);
     350                READ_SELECT_ACK [i][j][k]->write(read_select_ack);
    348351              }
    349352          }
     
    352355      sc_start(1);
    353356
    354 //       // lot of test
    355 //   public    : SC_OUT(Tcontrol_t)           ** out_READ_IN_ACK       ;
    356 //   public    : SC_OUT(Tdata_t   )           ** out_READ_IN_DATA      ;
    357 
    358 //   public    : SC_OUT(Tcontrol_t)         **** out_READ_SELECT_VAL   ;
    359 
    360 //   public    : SC_OUT(Tcontrol_t)          *** out_READ_OUT_VAL      ;
    361 //   public    : SC_OUT(Taddress_t)          *** out_READ_OUT_ADDRESS  ;
     357      // test output
     358
     359      TEXT ("===== Test Output =====");
     360      for (uint32_t i=0; i<_param._nb_port_read; i++)
     361        {
     362          TEXT ("Read_in         [" << i << "]       : "
     363                << READ_IN_VAL [i]->read() << ","
     364                << read_in_ack [i]         << " - "
     365                << "Reg[" << READ_IN_ADDRESS [i]->read() << "] -> "
     366                << read_in_data [i] << " "
     367                << "{bank : " << read_in_num_bank[i] << "}"
     368                );
     369
     370          TEST (Tcontrol_t, read_in_ack  [i], READ_IN_ACK  [i]->read());
     371          if (READ_IN_VAL [i]->read() and READ_IN_ACK [i]->read())
     372          TEST (Tdata_t   , read_in_data [i], READ_IN_DATA [i]->read());
     373        }
     374
     375      cout << endl;
     376      for (uint32_t i=0; i<_param._nb_bank; i++)
     377        for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
     378          {
     379            TEXT ("Read_out        [" << i << "][" << j << "]    : "
     380                  << read_out_val [i][j]         << ","
     381                  << READ_OUT_ACK [i][j]->read() << " - "
     382                  << "Reg[" << read_out_address [i][j] << "] -> "
     383                  << READ_OUT_DATA [i][j]->read() << " - "
     384                  << "[" << read_out_find [i][j]<< " , "
     385                  << read_out_port    [i][j] << "]"               
     386                  );
     387
     388            TEST (Tcontrol_t, read_out_val     [i][j], READ_OUT_VAL     [i][j]->read());
     389            if (READ_OUT_VAL [i][j]->read() and READ_OUT_ACK [i][j]->read())
     390            TEST (Taddress_t, read_out_address [i][j], READ_OUT_ADDRESS [i][j]->read());
     391
     392            for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port[j]; k++)
     393              {
     394                uint32_t num_port; // number of port
     395               
     396                // compute the good number of port
     397                if (_param._crossbar == FULL_CROSSBAR)
     398                  num_port = k;
     399                else
     400                  num_port = k*_param._nb_port_read_by_bank+j;
     401               
     402                TEXT (" * Read_select  [" << i << "][" << j << "][" << k << "] : "
     403                      << read_select_val [i][j][k]         << ","
     404                      << READ_SELECT_ACK [i][j][k]->read() << " - "
     405                      << "link with read_in[" << num_port << "]"
     406                      );
     407               
     408                TEST (Tcontrol_t, read_select_val  [i][j][k], READ_SELECT_VAL  [i][j][k]->read());
     409              }
     410           
     411           
     412           
     413          }
    362414
    363415    }
     416
     417  sc_start(0);
    364418
    365419  /********************************************************
     
    367421   ********************************************************/
    368422
    369   cout << "<" << name << "> ............ Stop Simulation" << endl;
     423  TEXT("............ Stop Simulation");
    370424
    371425  delete CLOCK;
    372426
     427  TEXT("delete read_in");
    373428  for (uint32_t i=0; i<_param._nb_port_read; i++)
    374429    {
     430//       TEXT("1, i " << i);
    375431      delete READ_IN_VAL       [i];
     432//       TEXT("2");
    376433      delete READ_IN_ACK       [i];
     434//       TEXT("3");
    377435      delete READ_IN_ADDRESS   [i];
     436//       TEXT("4");
    378437      delete READ_IN_DATA      [i];
     438//       TEXT("5");
    379439    }
    380440                                                     
     
    384444  delete READ_IN_DATA   ;
    385445
     446  TEXT("delete read_select");
    386447   for (uint32_t i=0; i<_param._nb_bank; i++)
    387448     {
     
    402463   delete READ_SELECT_ACK;
    403464
     465  TEXT("delete read_out");
    404466   for (uint32_t i=0; i<_param._nb_bank; i++)
    405467     {
     
    423485  delete READ_OUT_DATA   ;
    424486
     487  TEXT("delete write_in");
    425488  for (uint32_t i=0; i<_param._nb_port_write; i++)
    426489    {
     
    436499  delete WRITE_IN_DATA   ;
    437500
     501  TEXT("delete write_select");
    438502  for (uint32_t i=0; i<_param._nb_bank; i++)
    439503    {
     
    454518  delete WRITE_SELECT_ACK;
    455519 
     520  TEXT("delete write_out");
    456521  for (uint32_t i=0; i<_param._nb_bank; i++)
    457522    {
     
    477542#endif
    478543
     544
    479545  delete _RegisterFile_Multi_Banked_Glue;
    480546}
Note: See TracChangeset for help on using the changeset viewer.