Changeset 98 for trunk/modules


Ignore:
Timestamp:
Sep 29, 2010, 2:32:06 PM (14 years ago)
Author:
choichil
Message:

Correcting file names of vci_synthetic_initiator

Location:
trunk/modules/vci_synthetic_initator/caba
Files:
3 moved

Legend:

Unmodified
Added
Removed
  • trunk/modules/vci_synthetic_initator/caba/metadata/vci_synthetic_initiator.sd

    r96 r98  
    44       classname = 'soclib::caba::VciSyntheticInitiator',
    55       tmpl_parameters = [parameter.Module('vci_param', default = 'caba:vci_param'),],
    6        header_files = ['../source/include/vci_synthetic_initiator.h',],
    7        implementation_files = ['../source/src/vci_synthetic_initiator.cpp',],
     6       header_files = ['../sources/include/vci_synthetic_initiator.h',
     7                       ],
     8       implementation_files = ['../sources/src/vci_synthetic_initiator.cpp',],
    89       uses = [Uses('caba:base_module'),
    9                Uses('common:loader'),
    1010               Uses('common:mapping_table'),
    1111               Uses('caba:generic_fifo'),
     
    1414                Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
    1515                Port('caba:clock_in', 'p_clk', auto = 'clock'),],
     16       instance_parameters = [
     17                parameter.Module('mt'),
     18                parameter.IntTab('vci_index'),
     19                parameter.Int('length'),
     20                parameter.Float('rho'),
     21                parameter.Int('depth'),
     22                parameter.Int('xmesh'),
     23                parameter.Int('ymesh'),
     24                parameter.Int('bc_period', default = 0),
     25                parameter.Int('xmin', default = 0),
     26                parameter.Int('xmax', default = 0),
     27                parameter.Int('ymin', default = 0),
     28                parameter.Int('ymax', default = 0),
     29                ],
     30       extensions = [
     31          'dsx:get_ident='
     32          'vci_ini_index:p_vci:mt,'
     33       ],
    1634)
     35
  • trunk/modules/vci_synthetic_initator/caba/sources/include/vci_synthetic_initiator.h

    r96 r98  
    3232
    3333#include <systemc>
     34#include <inttypes.h>
     35#include "generic_fifo.h"
     36#include "vci_initiator.h"
     37#include "soclib_endian.h"
     38#include "caba_base_module.h"
     39#include "int_tab.h"
     40#include "mapping_table.h"
    3441
    3542namespace soclib {  namespace caba {
     
    4047      : public soclib::caba::BaseModule
    4148    {
    42       typedef uint32_t addr_t;
     49      //typedef sc_dt::sc_uint<40> addr_t;
     50      typedef typename vci_param::fast_addr_t vci_addr_t;
    4351      typedef uint32_t data_t;
    4452      typedef uint32_t tag_t;
     
    4654      typedef uint32_t be_t;
    4755      typedef uint32_t copy_t;
     56
     57      // Type of the addr_t and access of the fields
     58      typedef union{
     59        PACKED_BITFIELD(
     60          vci_addr_t srcid:vci_param::S,
     61          vci_addr_t null:(8*sizeof(vci_addr_t)-(2*vci_param::S)),
     62        ) normal_address;
     63        PACKED_BITFIELD(
     64          vci_addr_t xmin:vci_param::S,
     65          vci_addr_t xmax:vci_param::S,
     66          vci_addr_t ymin:vci_param::S,
     67          vci_addr_t ymax:vci_param::S,
     68          vci_addr_t null_:(8*sizeof(vci_addr_t)-(4*vci_param::S)),
     69          vci_addr_t bc:2,
     70        ) broadcast_address;
     71      } addr_t;
    4872
    4973
     
    7599      VciSyntheticInitiator(
    76100                sc_module_name name,
     101                const  soclib::common::MappingTable &mt,
     102                const  soclib::common::IntTab       &vci_index,
    77103                size_t length,    // Packet length (flit numbers)
    78104                float  rho,       // Packets ratio on the network
    79105                size_t depth,     // Fifo depth
    80                 size_t x,         // X location of the synthetic initiator
    81                 size_t y,         // Y location of the synthetic initiator
    82106                size_t xmesh,   
    83107                size_t ymesh,
    84                 size_t bc_period, // Broadcast period, if no broadcast => 0
    85                 size_t xmin,
    86                 size_t xmax,
    87                 size_t ymin,
    88                 size_t ymax,
    89                 const soclib::common::IntTab &vci_index
     108                size_t bc_period = 0, // Broadcast period, if no broadcast => 0
     109                size_t xmin = 0,
     110                size_t xmax = 0,
     111                size_t ymin = 0,
     112                size_t ymax = 0,
    90113                );                                 
    91114
     
    101124
    102125      // Component attributes
    103       const size_t                        m_length;             // Number of flits of a packet
     126      const size_t                        m_length;             // Number of words to write
    104127      const size_t                        m_rho;                // Rate of packets in the network wanted
    105128      const size_t                        m_depth;              // Fifo depth
    106       const size_t                        m_x;                  // X location
    107       const size_t                        m_y;                  // Y location
    108129      const size_t                        m_xmesh;     
    109130      const size_t                        m_ymesh;
     
    113134      const size_t                        m_ymin;
    114135      const size_t                        m_ymax;
     136      const size_t                        m_srcid;
     137      const size_t                        m_coord;
    115138
    116       size_t       m_count;
    117       size_t       m_npackets;              // Total number of packets already sent
     139      size_t                              m_count;                  // Numbers of words sent
     140      size_t                              m_npackets;               // Total number of packets already sent
     141      uint64_t                            m_start_latency1;         // Start time of sending packet wanted
     142      uint64_t                            m_start_latency2;         // Start time of sending packet
     143      addr_t                              m_address_to_send;        // Address to send the write command
     144      float                               m_rhos;                   // Effective Rho during the simulation
     145      size_t                              m_bc_nrsp;                // Expected number of responses for a broadcast command
    118146
    119147      // Fifo transmitting date to the VCI FSM
    120148      GenericFifo<uint64_t>    m_date_fifo;
    121149
    122       sc_signal<int>         r_vci_fsm;
     150      sc_signal<int>           r_vci_fsm;
    123151       
    124       sc_signal<size_t>      r_index;
     152      sc_signal<size_t>        r_index;
    125153
    126       sc_signal<bool>        r_broadcast_req;
     154      sc_signal<bool>          r_broadcast_req;
    127155
    128156    }; // end class VciSyntheticInitiator
  • trunk/modules/vci_synthetic_initator/caba/sources/src/vci_synthetic_initiator.cpp

    r96 r98  
    4545  tmpl(/**/)::VciSyntheticInitiator(
    4646      sc_module_name name,
     47      const  soclib::common::MappingTable &mt,
     48      const  soclib::common::IntTab       &vci_index,
    4749      size_t length,    // Packet length (flit numbers)
    4850      float  rho,       // Packets ratio on the network
    4951      size_t depth,     // Fifo depth
    50       size_t x,         //
    51       size_t y,         //
    5252      size_t xmesh,     
    5353      size_t ymesh,
    54       size_t bc_period, // Broadcast period, if no broadcast => 0
    55       size_t xmin,
    56       size_t xmax,
    57       size_t ymin,
    58       size_t ymax
     54      size_t bc_period = 0, // Broadcast period, if no broadcast => 0
     55      size_t xmin = 0,
     56      size_t xmax = 0,
     57      size_t ymin = 0,
     58      size_t ymax = 0
    5959      )
    6060
     
    6565    p_vci("vci_ini"),
    6666
    67     m_srcid_ini( mtc.indexForId(vci_ini_index) ),
     67    m_srcid( mt.indexForId(vci_index) ),
     68    m_coord(vci_index[1]),
    6869    //  FIFOs
    6970    m_length(length),
     
    8081    m_ymax(ymax),
    8182    m_date_fifo("m_date_fifo", depth),
    82     r_tgt_cmd_fsm("r_tgt_cmd_fsm"),
     83    r_vci_fsm("r_vci_fsm"),
    8384    {
    8485
     
    102103
    103104  ///////////////////////////////////
    104   tmpl(void)::destAdress(size_t X_local, size_t Y_local, size_t &X_dest, size_t &Y_dest)
     105  tmpl(size_t)::destAdress()
    105106  ///////////////////////////////////
    106107  {
    107     X_dest = (size_t) ((rand())%m_xmesh);
    108     Y_dest = (size_t) ((rand())%m_ymesh);
     108    size_t dest;
     109    do{
     110      dest = (size_t) (rand() % (m_xmesh * m_ymesh));
     111    } while(dest == m_srcid);
     112    return dest ;
    109113  }
     114
     115
     116  ///////////////////////////////////
     117//  tmpl(void)::destAdress(/*size_t X_local, size_t Y_local,*/ size_t &X_dest, size_t &Y_dest)
     118  ///////////////////////////////////
     119//  {
     120//    size_t x_dest_calc, y_dest_calc;
     121//    do{
     122//      x_dest_calc = (rand()%m_xmesh);
     123//      y_dest_calc = (rand()%m_ymesh);
     124//    } while((x_dest_calc = m_x) && (y_dest_calc == m_y));
     125//  }
    110126
    111127  //////////////////////////////////
     
    113129    //////////////////////////////////
    114130  {
    115     //using soclib::common::uint32_log2;
    116131    //  RESET         
    117132    if ( ! p_resetn.read() ) {
    118       //srand(time(NULL));
    119       //     Initializing FSMs
    120       r_tgt_cmd_fsm     = TGT_CMD_IDLE;
    121 
    122       // initializing FIFOs and communication Buffers
    123 
     133      // Initializing seed for random numbers generation
     134      srand(time(NULL));
     135
     136      // Initializing FSMs
     137      r_vci_fsm = VCI_IDLE;
     138
     139      // Initializing FIFOs
    124140      m_date_fifo.init();
    125141
     
    139155      case VCI_IDLE:
    140156        {
     157          if (m_date_fifo.rok()){
     158            if (r_broadcast_req.read()){
     159              r_vci_fsm = VCI_BC_SEND ;
     160            } else {
     161              r_vci_fsm = VCI_SINGLE_SEND ;
     162              destAdress();
     163              m_count = 0;
     164            }
     165          }
    141166          break;
    142167        }
     
    144169      case VCI_SINGLE_SEND:
    145170        {
     171          if (p_vci.cmdack.read()){
     172            m_count++;
     173            if (m_count == m_length-1) {
     174              m_start_latency1 = m_date_fifo.read();
     175              m_start_latency2 = m_cpt_cycles;
     176              r_vci_fsm = VCI_SINGLE_RECEIVE ;
     177            } else {
     178              r_vci_fsm = VCI_SINGLE_SEND ;
     179            }
     180          }
    146181          break;
    147182        }
     
    149184      case VCI_SINGLE_RECEIVE:
    150185        {
    151           if (p_vci.cmdack.read()) {
    152             // LATENCY
     186          if (p_vci.rspval.read()) {
     187            m_start_latency1 = m_date_fifo.read();
     188            m_start_latency2 = m_cpt_cycles;
     189            m_npackets++;
     190            date_fifo_get = true;
    153191            r_vci_fsm = VCI_IDLE ;
    154192          }
     
    158196      case VCI_BC_SEND:
    159197        {
     198          m_address_to_send.broadcast_address.xmin = m_xmin;
     199          m_address_to_send.broadcast_address.xmax = m_xmax;
     200          m_address_to_send.broadcast_address.ymin = m_ymin;
     201          m_address_to_send.broadcast_address.ymax = m_ymax;
     202          m_address_to_send.broadcast_address.bc   = 0x3;
     203          m_bc_nrsp = (m_xmax - m_xmin) * (m_ymax - m_ymin);
     204          r_vci_fsm = VCI_BC_SEND;
    160205          break;
    161206        }
     
    163208      case VCI_BC_RECEIVE:
    164209        {
    165           r_broadcast_req = false;
     210          if (p_vci.rspval.read()){
     211            if (m_bc_nrsp == 0) {
     212              r_broadcast_req = false;
     213              r_vci_fsm = VCI_IDLE ;
     214            } else {
     215              m_bc_nrsp--;
     216              r_vci_fsm = VCI_BC_RECEIVE ;
     217            }
     218          }
    166219          break;
    167220        }
     
    170223
    171224/////////////////// Filling fifo
    172     if(){
     225    if( (rhos < m_rho) && (rand()/RAND_MAX) ){
    173226      if (m_date_fifo.wok()){
    174227        date_fifo_put = true ;
     
    190243      }
    191244    }
    192 
     245   
     246    m_rhos = (float) ((m_npackets * m_length) / m_cpt_cycles) ;
    193247
    194248    m_cpt_cycles++;
     
    203257  {
    204258    ////////////////////////////////////////////////////////////
    205     // Command signals on the p_vci_ixr port
     259    // Command signals on the p_vci port
    206260    ////////////////////////////////////////////////////////////
    207      p_vci.cmd        = vci_param::CMD_READ;   
     261     p_vci.cmd        = vci_param::CMD_WRITE;   
    208262     p_vci.be         = 0xF;                             
    209263     p_vci.pktid      = 0;     
    210      p_vci.srcid      = m_srcid_ixr;   
     264     p_vci.srcid      = m_srcid;   
    211265     p_vci.cons       = false;       
    212266     p_vci.wrap       = false;       
     
    227281          p_vci.trdid   = 0;                 
    228282          p_vci.eop     = false;                                   
     283          p_vci.rspack  = false;
    229284          break;
    230285        }
     
    232287      case VCI_SINGLE_SEND:
    233288        {
    234           p_vci.cmdval = true ;
     289          p_vci.cmdval  = true;                 
     290          p_vci.address = (typename vci_param::addr_t)(m_address_to_send+(m_count*4));
     291          p_vci.plen    = m_length*4;                                         
     292          p_vci.wdata   = 0;                                       
     293          p_vci.trdid   = 0;                 
     294          if (m_count == m_length - 1 ) {
     295            p_vci.eop     = true;                                   
     296          } else {
     297            p_vci.eop     = false;                                   
     298          }
     299          p_vci.rspack  = false;
    235300          break;
    236301        }
     
    238303      case VCI_SINGLE_RECEIVE:
    239304        {
    240           break;
     305          p_vci.cmdval  = false;                 
     306          p_vci.address = 0;
     307          p_vci.plen    = 0;                                         
     308          p_vci.wdata   = 0;                                       
     309          p_vci.trdid   = 0;                 
     310          p_vci.eop     = false;                                   
     311          p_vci.rspack  = true;
     312          break;
    241313        }
    242314        ///////////////////
    243315      case VCI_BC_SEND:
    244316        {
     317          p_vci.cmdval  = true;                 
     318          p_vci.address = (typename vci_param::addr_t) m_address_to_send;
     319          p_vci.plen    = 4;                                         
     320          p_vci.wdata   = 0;                                       
     321          p_vci.trdid   = 0;                 
     322          p_vci.eop     = true;                                   
     323          p_vci.rspack  = false;
    245324          break;
    246325        }
     
    248327      case VCI_BC_RECEIVE:
    249328        {
     329          p_vci.cmdval  = false;                 
     330          p_vci.address = 0;
     331          p_vci.plen    = 0;                                         
     332          p_vci.wdata   = 0;                                       
     333          p_vci.trdid   = 0;                 
     334          p_vci.eop     = false;                                   
     335          p_vci.rspack  = true;
    250336          break;
    251337        }
Note: See TracChangeset for help on using the changeset viewer.