Ignore:
Timestamp:
Apr 20, 2009, 11:29:17 PM (15 years ago)
Author:
rosiere
Message:

1) Write queue with mealy
2) Network : fix bug
3) leak memory

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_genMoore.cpp

    r103 r115  
    2626    log_function(Write_queue,FUNCTION,_name.c_str());
    2727   
    28     // -----[ Interface "Write_queue_in" ]--------------------------------
    29     {
    30       internal_WRITE_QUEUE_IN_ACK = _queue->size() < _param->_size_queue;
    31      
    32       PORT_WRITE(out_WRITE_QUEUE_IN_ACK, internal_WRITE_QUEUE_IN_ACK);
    33     }
    34 
    35     // -----[ Interface "Write_queue_out" ]--------------------------------
    36     {
    37       // TODO : make a genMealy version
    38       internal_WRITE_QUEUE_OUT_VAL = ((not _queue->empty()           ) and
    39                                       (not _queue->front()->_write_rd) and
    40                                       (not _queue->front()->_write_re));
    41      
    42       PORT_WRITE(out_WRITE_QUEUE_OUT_VAL, internal_WRITE_QUEUE_OUT_VAL);
    43 
    44       if (internal_WRITE_QUEUE_OUT_VAL)
    45         {
    46           if (_param->_have_port_context_id)
    47           PORT_WRITE(out_WRITE_QUEUE_OUT_CONTEXT_ID   , _queue->front()->_context_id   );
    48           if (_param->_have_port_front_end_id)
    49           PORT_WRITE(out_WRITE_QUEUE_OUT_FRONT_END_ID , _queue->front()->_front_end_id );
    50           if (_param->_have_port_ooo_engine_id)
    51           PORT_WRITE(out_WRITE_QUEUE_OUT_OOO_ENGINE_ID, _queue->front()->_ooo_engine_id);
    52           if (_param->_have_port_rob_ptr  )
    53           PORT_WRITE(out_WRITE_QUEUE_OUT_PACKET_ID    , _queue->front()->_packet_id    );
    54 //        PORT_WRITE(out_WRITE_QUEUE_OUT_OPERATION    , _queue->front()->_operation    );
    55 //        PORT_WRITE(out_WRITE_QUEUE_OUT_TYPE         , _queue->front()->_type         );
    56           PORT_WRITE(out_WRITE_QUEUE_OUT_FLAGS        , _queue->front()->_data_re      );
    57           PORT_WRITE(out_WRITE_QUEUE_OUT_EXCEPTION    , _queue->front()->_exception    );
    58           PORT_WRITE(out_WRITE_QUEUE_OUT_NO_SEQUENCE  , _queue->front()->_no_sequence  );
    59           PORT_WRITE(out_WRITE_QUEUE_OUT_ADDRESS      , _queue->front()->_address      );
    60           PORT_WRITE(out_WRITE_QUEUE_OUT_DATA         , _queue->front()->_data_rd      );
    61         }
    62     }
    63 
    64     // -----[ Interface "gpr_write" ]-------------------------------------
    65     // -----[ Interface "spr_write" ]-------------------------------------
    66     {
    67       bool val = not _queue->empty();
    68 
    69       internal_GPR_WRITE_VAL = val and _queue->front()->_write_rd;
    70       internal_SPR_WRITE_VAL = val and _queue->front()->_write_re;
    71      
    72       PORT_WRITE(out_GPR_WRITE_VAL [0], internal_GPR_WRITE_VAL);
    73       PORT_WRITE(out_SPR_WRITE_VAL [0], internal_SPR_WRITE_VAL);
    74 
    75       if (val)
    76         {
    77           if (_param->_have_port_ooo_engine_id)
    78           {
    79           PORT_WRITE(out_GPR_WRITE_OOO_ENGINE_ID [0], _queue->front()->_ooo_engine_id);
    80           PORT_WRITE(out_SPR_WRITE_OOO_ENGINE_ID [0], _queue->front()->_ooo_engine_id);
    81           }
    82           PORT_WRITE(out_GPR_WRITE_NUM_REG       [0], _queue->front()->_num_reg_rd);
    83           PORT_WRITE(out_GPR_WRITE_DATA          [0], _queue->front()->_data_rd   );
    84           PORT_WRITE(out_SPR_WRITE_NUM_REG       [0], _queue->front()->_num_reg_re);
    85           PORT_WRITE(out_SPR_WRITE_DATA          [0], _queue->front()->_data_re   );
    86         }
    87     }
    8828    // -----[ Interface "bypass_write" ]----------------------------------
    8929    {
     
    12161        }
    12262    }
     63
     64    // -----[ Interface "Write_queue_in" ]--------------------------------
     65    {
     66      internal_WRITE_QUEUE_IN_ACK = _queue->size() < _param->_size_queue;
     67     
     68      PORT_WRITE(out_WRITE_QUEUE_IN_ACK, internal_WRITE_QUEUE_IN_ACK);
     69    }
     70
     71    if (_param->_queue_scheme == WRITE_QUEUE_SCHEME_MOORE)
     72      {
     73    // -----[ Interface "gpr_write" ]-------------------------------------
     74    // -----[ Interface "spr_write" ]-------------------------------------
     75    {
     76      bool val = not _queue->empty();
     77
     78      internal_GPR_WRITE_VAL = val and _queue->front()->_write_rd;
     79      internal_SPR_WRITE_VAL = val and _queue->front()->_write_re;
     80     
     81      PORT_WRITE(out_GPR_WRITE_VAL [0], internal_GPR_WRITE_VAL);
     82      PORT_WRITE(out_SPR_WRITE_VAL [0], internal_SPR_WRITE_VAL);
     83
     84      if (val)
     85        {
     86          if (_param->_have_port_ooo_engine_id)
     87          {
     88          PORT_WRITE(out_GPR_WRITE_OOO_ENGINE_ID [0], _queue->front()->_ooo_engine_id);
     89          PORT_WRITE(out_SPR_WRITE_OOO_ENGINE_ID [0], _queue->front()->_ooo_engine_id);
     90          }
     91          PORT_WRITE(out_GPR_WRITE_NUM_REG       [0], _queue->front()->_num_reg_rd);
     92          PORT_WRITE(out_GPR_WRITE_DATA          [0], _queue->front()->_data_rd   );
     93          PORT_WRITE(out_SPR_WRITE_NUM_REG       [0], _queue->front()->_num_reg_re);
     94          PORT_WRITE(out_SPR_WRITE_DATA          [0], _queue->front()->_data_re   );
     95        }
     96    }
     97
     98    // -----[ Interface "Write_queue_out" ]--------------------------------
     99    {
     100      internal_WRITE_QUEUE_OUT_VAL = ((not _queue->empty()           ) and
     101                                      (not _queue->front()->_write_rd) and
     102                                      (not _queue->front()->_write_re));
     103     
     104      PORT_WRITE(out_WRITE_QUEUE_OUT_VAL, internal_WRITE_QUEUE_OUT_VAL);
     105
     106      if (internal_WRITE_QUEUE_OUT_VAL)
     107        {
     108          if (_param->_have_port_context_id)
     109          PORT_WRITE(out_WRITE_QUEUE_OUT_CONTEXT_ID   , _queue->front()->_context_id   );
     110          if (_param->_have_port_front_end_id)
     111          PORT_WRITE(out_WRITE_QUEUE_OUT_FRONT_END_ID , _queue->front()->_front_end_id );
     112          if (_param->_have_port_ooo_engine_id)
     113          PORT_WRITE(out_WRITE_QUEUE_OUT_OOO_ENGINE_ID, _queue->front()->_ooo_engine_id);
     114          if (_param->_have_port_rob_ptr  )
     115          PORT_WRITE(out_WRITE_QUEUE_OUT_PACKET_ID    , _queue->front()->_packet_id    );
     116//        PORT_WRITE(out_WRITE_QUEUE_OUT_OPERATION    , _queue->front()->_operation    );
     117//        PORT_WRITE(out_WRITE_QUEUE_OUT_TYPE         , _queue->front()->_type         );
     118          PORT_WRITE(out_WRITE_QUEUE_OUT_FLAGS        , _queue->front()->_data_re      );
     119          PORT_WRITE(out_WRITE_QUEUE_OUT_EXCEPTION    , _queue->front()->_exception    );
     120          PORT_WRITE(out_WRITE_QUEUE_OUT_NO_SEQUENCE  , _queue->front()->_no_sequence  );
     121          PORT_WRITE(out_WRITE_QUEUE_OUT_ADDRESS      , _queue->front()->_address      );
     122          PORT_WRITE(out_WRITE_QUEUE_OUT_DATA         , _queue->front()->_data_rd      );
     123        }
     124    }
     125
     126      } // end WRITE_QUEUE_SCHEME_MOORE
    123127    log_end(Write_queue,FUNCTION);
    124128  };
Note: See TracChangeset for help on using the changeset viewer.