Ignore:
Timestamp:
Sep 28, 2007, 2:58:08 PM (17 years ago)
Author:
rosiere
Message:
  • VHDL - RegisterFile_Multi_Banked (only partial_crossbar)
  • SystemC - modif Component, interface and co -> ajout du type Tusage_T pour instancier un coposant mais ne demander que le VHDL ou le systemC.
  • Séminaire interne
Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src
Files:
13 edited

Legend:

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

    r53 r57  
    5353       
    5454        _link_port_read_to_bank_read     = new uint32_t [_nb_port_read ];
    55 //      _link_port_read_to_num_bank      = new uint32_t [_nb_port_read ];
    5655        _link_port_write_to_bank_write   = new uint32_t [_nb_port_write];
    57 //      _link_port_write_to_num_bank     = new uint32_t [_nb_port_write];
    5856
    59 //      uint32_t _nb_port_bank_by_bank_read_port  [_nb_port_read_by_bank ];
    60 //      uint32_t _nb_port_bank_by_bank_write_port [_nb_port_write_by_bank];
    61        
    6257        // init
    63 //      for (uint32_t i=0; i<_nb_port_read_by_bank ;i++)
    64 //        _nb_port_bank_by_bank_read_port  [i] = 0;
    65        
    66         for (uint32_t i=0; i<_nb_port_read         ;i++)
     58        for (uint32_t i=0; i<_nb_port_read ;i++)
    6759          {
    6860            uint32_t x = i%_nb_port_read_by_bank;
    6961            _link_port_read_to_bank_read [i] = x;
    70 //          _link_port_read_to_num_bank  [i] = _nb_port_bank_by_bank_read_port [x];
    71 //          _nb_port_bank_by_bank_read_port    [x] ++;
    7262          }
    73 
    74         // init
    75 //      for (uint32_t i=0; i<_nb_port_write_by_bank ;i++)
    76 //        _nb_port_bank_by_bank_write_port [i] = 0;
    77        
    78         for (uint32_t i=0; i<_nb_port_write         ;i++)
     63        for (uint32_t i=0; i<_nb_port_write;i++)
    7964          {
    8065            uint32_t x = i%_nb_port_write_by_bank;
    8166            _link_port_write_to_bank_write   [i] = x;
    82 //          _link_port_write_to_num_bank     [i] = _nb_port_bank_by_bank_write_port [x];
    83 //          _nb_port_bank_by_bank_write_port       [x] ++;
    8467          }
    8568
     
    8770        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_read_to_bank_read");
    8871        for (uint32_t i=0; i<_nb_port_read         ;i++)
     72          {
    8973          log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Read  in  [%d] to out    [%d]",i,_link_port_read_to_bank_read          [i]);
    90 //      log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_read_to_num_bank  ");
    91 //      for (uint32_t i=0; i<_nb_port_read         ;i++)
    92 //        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Read  in  [%d] to bank   [%d]",i,_link_port_read_to_num_bank         [i]);
    93 
     74          printf("   * Read  in  [%d] to out    [%d]\n",i,_link_port_read_to_bank_read          [i]);
     75          }
    9476        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_write_to_bank_write");
    9577        for (uint32_t i=0; i<_nb_port_write        ;i++)
    96           log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to out    [%d]",i,_link_port_write_to_bank_write          [i]);
    97 //      log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_write_to_num_bank  ");
    98 //      for (uint32_t i=0; i<_nb_port_write        ;i++)
    99 //        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to bank   [%d]",i,_link_port_write_to_num_bank         [i]);
     78          {
     79            log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to out    [%d]",i,_link_port_write_to_bank_write          [i]);
     80            printf("   * Write in  [%d] to out    [%d]\n",i,_link_port_write_to_bank_write          [i]);
     81          }
    10082      }
    10183    // else : don't allocate
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.cpp

    r53 r57  
    2121#endif
    2222#ifdef STATISTICS
    23                               morpheo::behavioural::Parameters_Statistics             param_statistics,
     23                              morpheo::behavioural::Parameters_Statistics * param_statistics,
    2424#endif
    25                               morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters param ):
     25                              morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * param ):
    2626                              _name              (name)
    2727                              ,_param            (param)
     
    5656#ifdef SYSTEMC
    5757    // Function pointer
    58     if (_param._crossbar == FULL_CROSSBAR)                             
     58    if (_param->_crossbar == FULL_CROSSBAR)                             
    5959      {
    6060        function_transition     = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::RegisterFile_Multi_Banked::   full_crossbar_transition;
     
    8484    dont_initialize ();
    8585    sensitive_neg << *(in_CLOCK);
    86     for (uint32_t i=0; i<_param._nb_port_read; i++)
     86    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    8787      sensitive << *( in_READ_VAL     [i])
    8888                << *( in_READ_ADDRESS [i]);
     
    9090#ifdef SYSTEMCASS_SPECIFIC
    9191    // List dependency information
    92     for (uint32_t i=0; i<_param._nb_port_read; i++)
     92    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    9393      {
    9494        (*(out_READ_ACK  [i])) (*( in_READ_VAL     [i]));
     
    9797        (*(out_READ_DATA [i])) (*( in_READ_ADDRESS [i]));
    9898      }
     99//     for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
     100//       { 
     101//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_VAL     [i]));
     102//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_RW      [i]));
     103//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_ADDRESS [i]));
     104//       }
    99105#endif   
    100106
     
    102108    dont_initialize ();
    103109    sensitive_neg << *(in_CLOCK);
    104     for (uint32_t i=0; i<_param._nb_port_write; i++)
     110    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    105111      sensitive << *( in_WRITE_VAL     [i])
    106112                << *( in_WRITE_ADDRESS [i])
     
    109115#ifdef SYSTEMCASS_SPECIFIC
    110116    // List dependency information
    111     for (uint32_t i=0; i<_param._nb_port_write; i++)
     117    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    112118      {
    113119        (*(out_WRITE_ACK  [i])) (*( in_WRITE_VAL     [i]));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_address_xxx.cpp

    r53 r57  
    2020    log_printf(FUNC,RegisterFile_Multi_Banked,"address_bank","Begin");
    2121   
    22     Taddress_t _return = _param._bank_mask & (address >> _param._bank_shift);
     22    Taddress_t _return = _param->_bank_mask & (address >> _param->_bank_shift);
    2323
    2424    log_printf(FUNC,RegisterFile_Multi_Banked,"address_bank","End");
     
    3131    log_printf(FUNC,RegisterFile_Multi_Banked,"address_num_reg","Begin");
    3232
    33     Taddress_t _return = _param._num_reg_mask & (address >> _param._num_reg_shift);
     33    Taddress_t _return = _param->_num_reg_mask & (address >> _param->_num_reg_shift);
    3434   
    3535    log_printf(FUNC,RegisterFile_Multi_Banked,"address_num_reg","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_allocation.cpp

    r53 r57  
    4848    // ~~~~~[ Interface : "read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    4949
    50      in_READ_VAL         = new SC_IN (Tcontrol_t) * [_param._nb_port_read];
    51     out_READ_ACK         = new SC_OUT(Tcontrol_t) * [_param._nb_port_read];
    52      in_READ_ADDRESS     = new SC_IN (Taddress_t) * [_param._nb_port_read];
    53     out_READ_DATA        = new SC_OUT(Tdata_t   ) * [_param._nb_port_read];
     50     in_READ_VAL         = new SC_IN (Tcontrol_t) * [_param->_nb_port_read];
     51    out_READ_ACK         = new SC_OUT(Tcontrol_t) * [_param->_nb_port_read];
     52     in_READ_ADDRESS     = new SC_IN (Taddress_t) * [_param->_nb_port_read];
     53    out_READ_DATA        = new SC_OUT(Tdata_t   ) * [_param->_nb_port_read];
    5454
    55     for (uint32_t i=0; i<_param._nb_port_read; i++)
     55    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    5656      {
    5757        Interface_fifo * interface = _interfaces->set_interface("read_"+toString(i)
     
    6565         in_READ_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
    6666        out_READ_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
    67          in_READ_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param._nb_word)));
    68         out_READ_DATA    [i]  = interface->set_signal_out <Tdata_t   > ("data"   , _param._size_word);
     67         in_READ_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param->_nb_word)));
     68        out_READ_DATA    [i]  = interface->set_signal_out <Tdata_t   > ("data"   , _param->_size_word);
    6969      }
    7070
    7171    // ~~~~~[ Interface : "write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    7272
    73      in_WRITE_VAL        = new SC_IN (Tcontrol_t) * [_param._nb_port_write];
    74     out_WRITE_ACK        = new SC_OUT(Tcontrol_t) * [_param._nb_port_write];
    75      in_WRITE_ADDRESS    = new SC_IN (Taddress_t) * [_param._nb_port_write];
    76      in_WRITE_DATA       = new SC_IN (Tdata_t   ) * [_param._nb_port_write];
     73     in_WRITE_VAL        = new SC_IN (Tcontrol_t) * [_param->_nb_port_write];
     74    out_WRITE_ACK        = new SC_OUT(Tcontrol_t) * [_param->_nb_port_write];
     75     in_WRITE_ADDRESS    = new SC_IN (Taddress_t) * [_param->_nb_port_write];
     76     in_WRITE_DATA       = new SC_IN (Tdata_t   ) * [_param->_nb_port_write];
    7777   
    78     for (uint32_t i=0; i<_param._nb_port_write; i++)
     78    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    7979      {
    8080        Interface_fifo * interface = _interfaces->set_interface("write_"+toString(i)
     
    8888         in_WRITE_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
    8989        out_WRITE_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
    90          in_WRITE_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param._nb_word)));
    91          in_WRITE_DATA    [i]  = interface->set_signal_in  <Tdata_t   > ("data"   , _param._size_word);
     90         in_WRITE_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param->_nb_word)));
     91         in_WRITE_DATA    [i]  = interface->set_signal_in  <Tdata_t   > ("data"   , _param->_size_word);
    9292      }
    9393
    9494    // ~~~~~[ Registers ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    9595
    96     reg_DATA = new SC_REGISTER (Tdata_t) ** [_param._nb_bank];
     96    reg_DATA = new SC_REGISTER (Tdata_t) ** [_param->_nb_bank];
    9797
    98     for (uint32_t i=0; i<_param._nb_bank; i++)
     98    for (uint32_t i=0; i<_param->_nb_bank; i++)
    9999      {
    100         reg_DATA [i] = new SC_REGISTER (Tdata_t) * [_param._nb_word];
     100        reg_DATA [i] = new SC_REGISTER (Tdata_t) * [_param->_nb_word];
    101101       
    102         for (uint32_t j=0; j<_param._nb_word; j++)
     102        for (uint32_t j=0; j<_param->_nb_word; j++)
    103103          {
    104104            string rename = "reg_DATA_"  + toString(i) + "_"  + toString(j);
     
    108108
    109109    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    110     internal_WRITE_VAL     = new bool       [_param._nb_port_write];
    111     internal_WRITE_BANK    = new Taddress_t [_param._nb_port_write];
    112     internal_WRITE_NUM_REG = new Taddress_t [_param._nb_port_write];
     110    internal_WRITE_VAL     = new bool       [_param->_nb_port_write];
     111    internal_WRITE_BANK    = new Taddress_t [_param->_nb_port_write];
     112    internal_WRITE_NUM_REG = new Taddress_t [_param->_nb_port_write];
    113113
    114114    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp

    r53 r57  
    2121    log_printf(FUNC,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read","Begin");
    2222
    23     bool read_port_use [_param._nb_bank][_param._nb_port_read_by_bank];
     23    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
    2424
    25     for (uint32_t i=0; i<_param._nb_bank; i++)
    26       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
     25    for (uint32_t i=0; i<_param->_nb_bank; i++)
     26      for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
    2727        read_port_use [i][j]=false;
    2828
    29     for (uint32_t i=0; i<_param._nb_port_read; i++)
     29    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    3030      {
    3131        bool val = PORT_READ(in_READ_VAL    [i]);
     
    4343
    4444            // Search loop
    45             for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
     45            for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
    4646              {
    4747                // find a unbusy port on this bank
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_write.cpp

    r53 r57  
    2121    log_printf(FUNC,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write","Begin");
    2222
    23     bool write_port_use [_param._nb_bank][_param._nb_port_write_by_bank];
     23    bool write_port_use [_param->_nb_bank][_param->_nb_port_write_by_bank];
    2424
    25     for (uint32_t i=0; i<_param._nb_bank; i++)
    26       for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
     25    for (uint32_t i=0; i<_param->_nb_bank; i++)
     26      for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
    2727        write_port_use [i][j]=false;
    2828
    29     for (uint32_t i=0; i<_param._nb_port_write; i++)
     29    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    3030      {
    3131        bool val = PORT_READ(in_WRITE_VAL    [i]);
     
    4444
    4545            // Search loop
    46             for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
     46            for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
    4747              {
    4848                // find a unbusy port on this bank
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_read.cpp

    r53 r57  
    2121    log_printf(FUNC,RegisterFile_Multi_Banked,"partial_crossbar_genMealy_read","Begin");
    2222
    23     bool read_port_use [_param._nb_bank][_param._nb_port_read_by_bank];
     23    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
    2424
    25     for (uint32_t i=0; i<_param._nb_bank; i++)
    26       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
     25    for (uint32_t i=0; i<_param->_nb_bank; i++)
     26      for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
    2727        read_port_use [i][j]=false;
    2828
    29     for (uint32_t i=0; i<_param._nb_port_read; i++)
     29    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    3030      {
    3131        bool val = PORT_READ(in_READ_VAL    [i]);
     
    4343
    4444//          // Search loop
    45 //          for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
     45//          for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
    4646//            {
    4747           
    48             uint32_t j = _param._link_port_read_to_bank_read [i];
     48            uint32_t j = _param->_link_port_read_to_bank_read [i];
    4949
    5050                // find a unbusy port on this bank
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_write.cpp

    r53 r57  
    2121    log_printf(FUNC,RegisterFile_Multi_Banked,"partial_crossbar_genMealy_write","Begin");
    2222
    23     bool write_port_use [_param._nb_bank][_param._nb_port_write_by_bank];
    24     for (uint32_t i=0; i<_param._nb_bank; i++)
    25       for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
     23    bool write_port_use [_param->_nb_bank][_param->_nb_port_write_by_bank];
     24    for (uint32_t i=0; i<_param->_nb_bank; i++)
     25      for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
    2626        write_port_use [i][j]=false;
    2727
    28     for (uint32_t i=0; i<_param._nb_port_write; i++)
     28    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    2929      {
    3030        bool val = PORT_READ(in_WRITE_VAL    [i]);
     
    4343
    4444//          // Search loop
    45 //          for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
     45//          for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
    4646//            {
    47             uint32_t j = _param._link_port_write_to_bank_write [i];
     47            uint32_t j = _param->_link_port_write_to_bank_write [i];
    4848
    4949                // find a unbusy port on this bank
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_transition.cpp

    r53 r57  
    2424//     (this->*function_transition) ();
    2525
    26     for (uint32_t i=0; i<_param._nb_port_write; i++)
     26    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    2727      {
    2828        if (internal_WRITE_VAL [i] == 1)
     
    3434          }
    3535      }
    36 
    37 
    3836
    3937#ifdef STATISTICS
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl.cpp

    r53 r57  
    88
    99#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h"
     10#include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h"
     11#include "Behavioural/Generic/Select/Select_Priority_Fixed/include/Select_Priority_Fixed.h"
    1012#include "Behavioural/include/Vhdl.h"
    1113
     
    1618namespace registerfile_multi_banked {
    1719
    18 
    1920  void RegisterFile_Multi_Banked::vhdl (void)
    2021  {
    2122    log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl","Begin");
    22 
     23   
     24    //===================================
     25    //===== Component               =====
     26    //===================================
     27
     28    //----- RegisterFile_Monolithic -----
     29
     30    morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * param_bank;
     31    morpheo::behavioural::generic::registerfile::registerfile_monolithic::RegisterFile_Monolithic * bank;
     32   
     33    // Create all bank. All bank is identical
     34    param_bank = new morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters
     35      (_param->_nb_port_read_by_bank
     36       ,_param->_nb_port_write_by_bank
     37       ,0 // mixte port
     38       ,_param->_nb_word/_param->_nb_bank
     39       ,_param->_size_word);
     40   
     41    string bank_name = _name + "_bank";
     42    bank = new morpheo::behavioural::generic::registerfile::registerfile_monolithic::RegisterFile_Monolithic
     43      (bank_name.c_str()
     44#ifdef STATISTICS
     45       ,NULL
     46#endif
     47       ,param_bank
     48       ,USE_VHDL);
     49   
     50    _component->set_component(bank->_component
     51#ifdef POSITION
     52                              , 0, 0, 0, 0
     53#endif
     54                              , INSTANCE_LIBRARY
     55                              );
     56   
     57
     58    //----- Select_Priority_Fixed -----
     59
     60    // Create all select_unit :
     61    //  * 4 units : to the read port, "quotient" ports and "rest" ports. Idem to the write port.
     62    //  * for a FULL_CROSSBAR, there are no "rest" ports
     63    uint32_t nb_select_port_1 ;
     64    uint32_t nb_select_port_2 ;
     65    uint32_t nb_select_port_3 ;
     66    uint32_t nb_select_port_4 ;
     67     
     68    if (_param->_crossbar == FULL_CROSSBAR)
     69      {
     70        nb_select_port_1 = _param->_nb_port_read ;
     71        nb_select_port_3 = _param->_nb_port_write;
     72        nb_select_port_2 = nb_select_port_4 = 0;
     73      }
     74    else
     75      {
     76        nb_select_port_2=(_param->_nb_port_read                  )/_param->_nb_port_read_by_bank;
     77        nb_select_port_1=((_param->_nb_port_read%_param->_nb_port_read_by_bank)==0)?0:(nb_select_port_2+1);
     78        nb_select_port_4=(_param->_nb_port_write                 )/_param->_nb_port_write_by_bank;
     79        nb_select_port_3=((_param->_nb_port_write%_param->_nb_port_write_by_bank)==0)?0:(nb_select_port_4+1);
     80      }
     81     
     82//     cout << "nb_select_port_1 : " << nb_select_port_1 << endl;
     83//     cout << "nb_select_port_2 : " << nb_select_port_2 << endl;
     84//     cout << "nb_select_port_3 : " << nb_select_port_3 << endl;
     85//     cout << "nb_select_port_4 : " << nb_select_port_4 << endl;
     86   
     87    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select1 = NULL;
     88    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select2 = NULL;
     89    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select3 = NULL;
     90    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select4 = NULL;
     91
     92    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select1 = NULL;
     93    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select2 = NULL;
     94    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select3 = NULL;
     95    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select4 = NULL;
     96
     97    bool have_select1 = ((nb_select_port_1 != 0               ));
     98    bool have_select2 = ((nb_select_port_2 != 0               ) and
     99                         (nb_select_port_2 != nb_select_port_1));
     100    bool have_select3 = ((nb_select_port_3 != 0               ) and
     101                         (nb_select_port_3 != nb_select_port_2) and
     102                         (nb_select_port_3 != nb_select_port_1));
     103    bool have_select4 = ((nb_select_port_4 != 0               ) and
     104                         (nb_select_port_4 != nb_select_port_3) and
     105                         (nb_select_port_4 != nb_select_port_2) and
     106                         (nb_select_port_4 != nb_select_port_1) );
     107
     108    string select_name1;
     109    string select_name2;
     110    string select_name3;
     111    string select_name4;
     112   
     113    if (have_select1)
     114      {
     115        select_name1  = _name+"_select_"+toString(nb_select_port_1)+"_ports";
     116        param_select1 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_1,true, false);
     117        select1       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed
     118          (select_name1.c_str()
     119#ifdef STATISTICS
     120           ,NULL
     121#endif
     122           ,param_select1
     123           ,USE_VHDL);
     124
     125        _component->set_component(select1->_component
     126#ifdef POSITION
     127                                  , 0, 0, 0, 0
     128#endif
     129                                  , INSTANCE_LIBRARY
     130                                  );
     131      }
     132
     133    if (have_select2)
     134      {
     135        select_name2  = _name+"_select_"+toString(nb_select_port_2)+"_ports";
     136       
     137        param_select2 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_2,true, false);
     138        select2       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed
     139          (select_name2.c_str()
     140#ifdef STATISTICS
     141           ,NULL
     142#endif
     143           ,param_select2
     144           ,USE_VHDL);
     145     
     146        _component->set_component(select2->_component
     147#ifdef POSITION
     148                                  , 0, 0, 0, 0
     149#endif
     150                                  , INSTANCE_LIBRARY
     151                                  );
     152      }
     153
     154    if (have_select3)
     155      {
     156        select_name3  = _name+"_select_"+toString(nb_select_port_3)+"_ports";
     157       
     158        param_select3 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_3,true, false);
     159        select3       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed
     160          (select_name3.c_str()
     161#ifdef STATISTICS
     162           ,NULL
     163#endif
     164           ,param_select3
     165           ,USE_VHDL);
     166
     167        _component->set_component(select3->_component
     168#ifdef POSITION
     169                                  , 0, 0, 0, 0
     170#endif
     171                                  , INSTANCE_LIBRARY
     172                                  );
     173      }
     174   
     175    if (have_select4)
     176      {
     177        select_name4  = _name+"_select_"+toString(nb_select_port_4)+"_ports";
     178       
     179        param_select4 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_4,true, false);
     180        select4       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed
     181          (select_name4.c_str()
     182#ifdef STATISTICS
     183           ,NULL
     184#endif
     185           ,param_select4
     186           ,USE_VHDL);
     187     
     188        _component->set_component(select4->_component
     189#ifdef POSITION
     190                                  , 0, 0, 0, 0
     191#endif
     192                                  , INSTANCE_LIBRARY
     193                                  );
     194      }
     195   
    23196    Vhdl * vhdl = new Vhdl (_name);
    24197
     
    32205
    33206    delete vhdl;
     207    delete bank;
     208    delete param_bank;
     209    if (have_select1)
     210      {
     211        delete select1;
     212        delete param_select1;
     213      }
     214    if (have_select2)
     215      {
     216        delete select2;
     217        delete param_select2;
     218      }
     219    if (have_select3)
     220      {
     221        delete select3;
     222        delete param_select3;
     223      }
     224    if (have_select4)
     225      {
     226        delete select4;
     227        delete param_select4;
     228      }
    34229
    35230    log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_body.cpp

    r53 r57  
    2020    log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl_body","Begin");
    2121
     22    uint32_t read_select_limit ;
     23    uint32_t read_nb_select1   ;
     24    uint32_t read_nb_select2   ;
     25    uint32_t write_select_limit;
     26    uint32_t write_nb_select1  ;
     27    uint32_t write_nb_select2  ;
     28   
     29    read_select_limit = _param->_nb_port_read%_param->_nb_port_read_by_bank;
     30    read_nb_select2   = _param->_nb_port_read/_param->_nb_port_read_by_bank;
     31    read_nb_select1   = (read_select_limit==0)?0:(read_nb_select2+1);               
     32 
     33    write_select_limit= _param->_nb_port_write%_param->_nb_port_write_by_bank;
     34    write_nb_select2  = _param->_nb_port_write/_param->_nb_port_write_by_bank;
     35    write_nb_select1  = (write_select_limit==0)?0:(write_nb_select2+1);             
     36
     37    vhdl->set_body("");
     38    vhdl->set_body("-----------------------------------");
     39    vhdl->set_body("-- Instance bank                   ");
     40    vhdl->set_body("-----------------------------------");
     41    vhdl->set_body("");
     42
     43    for (uint32_t i=0; i<_param->_nb_bank; i++)
     44      {
     45        vhdl->set_body(_name+"_bank_"+toString(i)+" : "+_name+"_bank");
     46        vhdl->set_body("port map (");
     47        vhdl->set_body("\t  in_CLOCK \t=>\tin_CLOCK ");
     48        vhdl->set_body("\t, in_NRESET\t=>\tin_NRESET");
     49        for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
     50          {
     51            vhdl->set_body("\t, in_READ_"+toString(j)+"_VAL     \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_VAL");
     52            vhdl->set_body("\t,out_READ_"+toString(j)+"_ACK     \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ACK");
     53            vhdl->set_body("\t, in_READ_"+toString(j)+"_ADDRESS \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ADDRESS");
     54            vhdl->set_body("\t,out_READ_"+toString(j)+"_DATA    \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_DATA");
     55          }
     56        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
     57          {
     58            vhdl->set_body("\t, in_WRITE_"+toString(j)+"_VAL     \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_VAL");
     59            vhdl->set_body("\t,out_WRITE_"+toString(j)+"_ACK     \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ACK");
     60            vhdl->set_body("\t, in_WRITE_"+toString(j)+"_ADDRESS \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ADDRESS");
     61            vhdl->set_body("\t, in_WRITE_"+toString(j)+"_DATA    \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_DATA");
     62          }
     63
     64        vhdl->set_body(");");
     65        vhdl->set_body("");
     66      }
     67
     68    vhdl->set_body("");
     69    vhdl->set_body("-----------------------------------");
     70    vhdl->set_body("-- Instance select");
     71    vhdl->set_body("-- (1 select by port)");
     72    vhdl->set_body("-----------------------------------");
     73    vhdl->set_body("");
     74    for (uint32_t i=0; i<_param->_nb_bank; i++)
     75      {
     76        for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
     77          {
     78            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_read:((j<read_select_limit)?read_nb_select1:read_nb_select2);
     79
     80            vhdl->set_body(_name+"_read_select_"+toString(i)+"_"+toString(j)+" : "+_name+"_select_"+toString(nb_port)+"_ports");
     81            vhdl->set_body("port map (");
     82            for (uint32_t k=0; k<nb_port; k++)
     83              {
     84                uint32_t num_port  = _param->_nb_port_read_by_bank*k+j;
     85                string   separator = ((k==0)?" ":",");
     86               
     87                vhdl->set_body("\t"+separator+" in_VAL_"+toString(k)+"     \t=>\tinternal_READ_"+toString(i)+"_"+toString(num_port)+"_VAL");
     88                vhdl->set_body("\t,out_ACK_"+toString(k)+"     \t=>\tinternal_SELECT_READ_"+toString(i)+"_"+toString(num_port)+"_VAL");
     89              }
     90            vhdl->set_body(");");
     91            vhdl->set_body("");
     92          }
     93
     94        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
     95          {
     96            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
     97
     98            vhdl->set_body(_name+"_write_select_"+toString(i)+"_"+toString(j)+" : "+_name+"_select_"+toString(nb_port)+"_ports");
     99            vhdl->set_body("port map (");
     100            for (uint32_t k=0; k<nb_port; k++)
     101              {
     102                uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
     103                string   separator = ((k==0)?" ":",");
     104               
     105                vhdl->set_body("\t"+separator+" in_VAL_"+toString(k)+"     \t=>\tinternal_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL");
     106                vhdl->set_body("\t,out_ACK_"+toString(k)+"     \t=>\tinternal_SELECT_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL");
     107              }
     108            vhdl->set_body(");");
     109            vhdl->set_body("");
     110          }
     111      }
     112
     113    vhdl->set_body("");
     114    vhdl->set_body("-----------------------------------");
     115    vhdl->set_body("-- Bank Val");
     116    vhdl->set_body("-----------------------------------");
     117    vhdl->set_body("");
     118    for (uint32_t i=0; i<_param->_nb_bank; i++)
     119      {
     120        for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
     121          {
     122            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_read:((j<read_select_limit)?read_nb_select1:read_nb_select2);
     123
     124            vhdl->set_body("internal_BANK_READ_"+toString(i)+"_"+toString(j)+ "_VAL <= '0'");
     125            for (uint32_t k=0; k<nb_port; k++)
     126              {
     127                uint32_t num_port  = _param->_nb_port_read_by_bank*k+j;
     128
     129                vhdl->set_body("\tor internal_SELECT_READ_"+toString(i)+"_"+toString(num_port)+"_VAL");
     130              }
     131            vhdl->set_body(";");
     132          }
     133        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
     134          {
     135            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
     136
     137            vhdl->set_body("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+ "_VAL <= '0'");
     138            for (uint32_t k=0; k<nb_port; k++)
     139              {
     140                uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
     141
     142                vhdl->set_body("\tor internal_SELECT_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL");
     143              }
     144            vhdl->set_body(";");
     145          }
     146      }
     147
     148    vhdl->set_body("");
     149    vhdl->set_body("-----------------------------------");
     150    vhdl->set_body("-- Bank Address");
     151    vhdl->set_body("-----------------------------------");
     152    vhdl->set_body("");
     153    for (uint32_t i=0; i<_param->_nb_bank; i++)
     154      {
     155        for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
     156          {
     157            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_read:((j<read_select_limit)?read_nb_select1:read_nb_select2);
     158
     159            vhdl->set_body("internal_BANK_READ_"+toString(i)+"_"+toString(j)+ "_ADDRESS <=");
     160            for (uint32_t k=1; k<nb_port; k++)
     161              {
     162                uint32_t num_port  = _param->_nb_port_read_by_bank*k+j;
     163               
     164                vhdl->set_body("\tin_READ_"+toString(num_port)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+" when internal_READ_"+toString(i)+"_"+toString(num_port)+"_VAL='1' else");
     165              }
     166            vhdl->set_body("\tin_READ_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+";");
     167//          vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
     168          }
     169        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
     170          {
     171            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
     172
     173            vhdl->set_body("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+ "_ADDRESS <=");
     174            for (uint32_t k=1; k<nb_port; k++)
     175              {
     176                uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
     177
     178                vhdl->set_body("\tin_WRITE_"+toString(num_port)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+" when internal_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL='1' else");
     179              }
     180            vhdl->set_body("\tin_WRITE_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+";");
     181//          vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
     182          }
     183      }
     184
     185    vhdl->set_body("");
     186    vhdl->set_body("-----------------------------------");
     187    vhdl->set_body("-- Bank Data");
     188    vhdl->set_body("-----------------------------------");
     189    vhdl->set_body("");
     190    for (uint32_t i=0; i<_param->_nb_bank; i++)
     191      {
     192        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
     193          {
     194            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
     195
     196            vhdl->set_body("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+ "_DATA <=");
     197            for (uint32_t k=1; k<nb_port; k++)
     198              {
     199                uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
     200
     201                vhdl->set_body("\tin_WRITE_"+toString(num_port)+"_DATA when internal_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL='1' else");
     202              }
     203            vhdl->set_body("\tin_WRITE_"+toString(j)+"_DATA;");
     204//          vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
     205          }
     206      }
     207
     208    vhdl->set_body("");
     209    vhdl->set_body("-----------------------------------");
     210    vhdl->set_body("-- VAL (to Select)");
     211    vhdl->set_body("-----------------------------------");
     212    vhdl->set_body("");
     213
     214    for (uint32_t i=0; i<_param->_nb_bank; i++)
     215      {
     216        for (uint32_t j=0; j<_param->_nb_port_read; j ++)
     217          {
     218            string address = (_param->_nb_bank==1)?"":("and (in_READ_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address-1,_param->_size_address_by_bank)+"="+std_logic_conv( _param->_size_address-_param->_size_address_by_bank,i)+")");
     219
     220            vhdl->set_body("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL <= '1' when (in_READ_"+toString(j)+"_VAL='1') "+address+"else '0';");
     221          }
     222        for (uint32_t j=0; j<_param->_nb_port_write; j ++)
     223          {
     224            string address = (_param->_nb_bank==1)?"":("and (in_WRITE_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address-1,_param->_size_address_by_bank)+"="+std_logic_conv( _param->_size_address-_param->_size_address_by_bank,i)+")");
     225            vhdl->set_body("internal_WRITE_"+toString(i)+"_"+toString(j)+"_VAL <= '1' when (in_WRITE_"+toString(j)+"_VAL='1') "+address+" else '0';");
     226          }
     227      }
     228
     229    vhdl->set_body("");
     230    vhdl->set_body("-----------------------------------");
     231    vhdl->set_body("-- OUTPUT");
     232    vhdl->set_body("-----------------------------------");
     233    vhdl->set_body("");
     234
     235    if (_param->_crossbar == FULL_CROSSBAR)
     236      {
     237        for (uint32_t i=0; i<_param->_nb_port_read; i ++)
     238          {
     239            vhdl->set_body("out_READ_"+toString(i)+"_ACK <= ");
     240            for (uint32_t j=0; j<_param->_nb_bank; j ++)
     241              {
     242                for (uint32_t k=0; k<_param->_nb_port_read_by_bank; k ++)
     243                  {
     244                    vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(k)+"_ACK when internal_SELECT_READ_"+toString(j)+"_"+toString(k)+"_VAL = '1' else");
     245                  }
     246              }
     247            vhdl->set_body("\t'0';");
     248            vhdl->set_body("out_READ_"+toString(i)+"_DATA <= ");
     249            for (uint32_t j=0; j<_param->_nb_bank; j ++)
     250              {
     251                for (uint32_t k=0; k<_param->_nb_port_read_by_bank; k ++)
     252                  {
     253                    vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(k)+"_DATA when internal_SELECT_READ_"+toString(j)+"_"+toString(k)+"_VAL = '1' else");
     254                  }
     255              }
     256            vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
     257          }
     258        for (uint32_t i=0; i<_param->_nb_port_write; i ++)
     259          {
     260            vhdl->set_body("out_WRITE_"+toString(i)+"_ACK <= ");
     261            for (uint32_t j=0; j<_param->_nb_bank; j ++)
     262              {
     263                for (uint32_t k=0; k<_param->_nb_port_write_by_bank; k ++)
     264                  {
     265                    vhdl->set_body("\tinternal_BANK_WRITE_"+toString(j)+"_"+toString(k)+"_ACK when internal_SELECT_WRITE_"+toString(j)+"_"+toString(k)+"_VAL = '1' else");
     266                  }
     267              }
     268            vhdl->set_body("\t'0';");
     269          }
     270      }
     271    else
     272      {
     273        for (uint32_t i=0; i<_param->_nb_port_read; i ++)
     274          {
     275            uint32_t link = _param->_link_port_read_to_bank_read[i];
     276
     277            vhdl->set_body("out_READ_"+toString(i)+"_ACK <= ");
     278            for (uint32_t j=0; j<_param->_nb_bank; j ++)
     279              {
     280                vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(link)+"_ACK when internal_SELECT_READ_"+toString(j)+"_"+toString(link)+"_VAL = '1' else");
     281              }
     282//          vhdl->set_body("\tinternal_BANK_READ_"+toString(0)+"_"+toString(link)+"_ACK;");
     283            vhdl->set_body("\t'0';");
     284
     285            vhdl->set_body("out_READ_"+toString(i)+"_DATA <= ");
     286            for (uint32_t j=1; j<_param->_nb_bank; j ++)
     287              {
     288                vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(link)+"_DATA when internal_SELECT_READ_"+toString(j)+"_"+toString(i)+"_VAL = '1' else");
     289              }
     290            vhdl->set_body("\tinternal_BANK_READ_"+toString(0)+"_"+toString(link)+"_DATA;");
     291//          vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
     292          }
     293        for (uint32_t i=0; i<_param->_nb_port_write; i ++)
     294          {
     295            uint32_t link = _param->_link_port_write_to_bank_write[i];
     296
     297            vhdl->set_body("out_WRITE_"+toString(i)+"_ACK <= ");
     298            for (uint32_t j=0; j<_param->_nb_bank; j ++)
     299              {
     300                vhdl->set_body("\tinternal_BANK_WRITE_"+toString(j)+"_"+toString(link)+"_ACK when internal_SELECT_WRITE_"+toString(j)+"_"+toString(i)+"_VAL = '1' else");
     301              }
     302//          vhdl->set_body("\tinternal_BANK_WRITE_"+toString(0)+"_"+toString(link)+"_ACK;");
     303            vhdl->set_body("\t'0';");
     304          }
     305      }
     306
    22307    log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl_body","End");
    23308  };
     
    26311}; // end namespace registerfile
    27312}; // end namespace generic
    28 
    29313}; // end namespace behavioural
    30314}; // end namespace morpheo             
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_declaration.cpp

    r53 r57  
    2020    log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl_declaration","Begin");
    2121
    22     vhdl->set_type   ("Tregfile", "array (" + toString(_param._nb_word_by_bank-1) + " downto 0) of " + std_logic(_param._size_word));
     22    for (uint32_t i=0; i<_param->_nb_bank; i++)
     23      {
     24        for (uint32_t j=0; j<_param->_nb_port_read; j ++)
     25          {
     26            vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
     27            vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_ACK" ,1);
     28            vhdl->set_signal ("internal_SELECT_READ_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
    2329
    24     vhdl->set_type   ("Tbank"   , "array (" + toString(_param._nb_bank)           + " downto 0) of Tregfile");
    25 
    26     vhdl->set_signal ("reg_DATA", "Tbank");
    27 
    28     for (uint32_t i=0; i<_param._nb_bank; i++)
    29       {
    30         for (uint32_t j=0; j<_param._nb_port_read_by_bank; j ++)
     30          }
     31        for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j ++)
    3132          {
    32             vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL"  ,1);
    33             vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_PORT" ,static_cast<uint32_t>(ceil(log2(_param._nb_port_read))));
     33            vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
     34            vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ACK"    ,1);
     35            vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ADDRESS",_param->_size_address_by_bank);
     36            vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_DATA"   ,_param->_size_word);
    3437          }
    35         for (uint32_t j=0; j<_param._nb_port_write_by_bank; j ++)
     38        for (uint32_t j=0; j<_param->_nb_port_write; j ++)
    3639          {
    3740            vhdl->set_signal ("internal_WRITE_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
    38             vhdl->set_signal ("internal_WRITE_"+toString(i)+"_"+toString(j)+"_PORT",static_cast<uint32_t>(ceil(log2(_param._nb_port_write))));
     41            vhdl->set_signal ("internal_WRITE_"+toString(i)+"_"+toString(j)+"_ACK" ,1);
     42            vhdl->set_signal ("internal_SELECT_WRITE_"+toString(i)+"_"+toString(j)+"_VAL"    ,1);
     43          }
     44        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j ++)
     45          {
     46            vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_VAL"    ,1);
     47            vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ACK"    ,1);
     48            vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ADDRESS",_param->_size_address_by_bank);
     49            vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_DATA"   ,_param->_size_word);
    3950          }
    4051      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Statistics.cpp

    r53 r57  
    1717
    1818  Statistics::Statistics (string                                      name                       ,
    19                           morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
    20                           Parameters                                  parameters
     19                          morpheo::behavioural::Parameters_Statistics * parameters_statistics      ,
     20                          Parameters                                  * parameters
    2121                          ) :
    2222    morpheo::behavioural::Statistics(name                  ,
Note: See TracChangeset for help on using the changeset viewer.