Changes between Version 107 and Version 108 of Writing Rules/Tlmt


Ignore:
Timestamp:
Mar 2, 2009, 6:05:30 PM (15 years ago)
Author:
alinevieiramello@…
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Writing Rules/Tlmt

    v107 v108  
    7676to '''m_soclib_command'''. These values are:
    7777{{{
    78 VCI_READ_COMMAND
    79 VCI_WRITE_COMMAND
    80 VCI_LINKED_READ_COMMAND
    81 VCI_STORE_CONDITIONAL_COMMAND
    82 TLMT_NULL_MESSAGE
    83 TLMT_ACTIVE
    84 TLMT_INACTIVE
     78  VCI_READ_COMMAND
     79  VCI_WRITE_COMMAND
     80  VCI_LINKED_READ_COMMAND
     81  VCI_STORE_CONDITIONAL_COMMAND
     82  TLMT_NULL_MESSAGE
     83  TLMT_ACTIVE
     84  TLMT_INACTIVE
    8585}}}
    8686
     
    126126the following code:
    127127{{{
    128     tlm::tlm_generic_payload *payload_ptr = new tlm::tlm_generic_payload();
    129     tlm::tlm_phase            phase;
    130     soclib_payload_extension *extension_ptr = new soclib_payload_extension();
    131     sc_core::sc_time          send_time;
    132     ...
    133 
    134     // set the values in tlm payload
    135     payload_ptr->set_command(tlm::TLM_IGNORE_COMMAND);
    136     payload_ptr->set_address(0x10000000]);
    137     payload_ptr->set_byte_enable_ptr(byte_enable);
    138     payload_ptr->set_byte_enable_length(nbytes);
    139     payload_ptr->set_data_ptr(data);
    140     payload_ptr->set_data_length(nbytes);
    141     // set the values in payload extension
    142     extension_ptr->set_read();
    143     extension_ptr->set_src_id(m_srcid);
    144     extension_ptr->set_trd_id(0);
    145     extension_ptr->set_pkt_id(pktid);
    146     // set the extension to tlm payload
    147     payload_ptr->set_extension (extension_ptr );
    148     // set the tlm phase
    149     phase = tlm::BEGIN_REQ;
    150     // set the local time to transaction time
    151     send_time = m_local_time;
     128  tlm::tlm_generic_payload *payload_ptr = new tlm::tlm_generic_payload();
     129  tlm::tlm_phase            phase;
     130  soclib_payload_extension *extension_ptr = new soclib_payload_extension();
     131  sc_core::sc_time          send_time;
     132  ...
     133
     134  // set the values in tlm payload
     135  payload_ptr->set_command(tlm::TLM_IGNORE_COMMAND);
     136  payload_ptr->set_address(0x10000000]);
     137  payload_ptr->set_byte_enable_ptr(byte_enable);
     138  payload_ptr->set_byte_enable_length(nbytes);
     139  payload_ptr->set_data_ptr(data);
     140  payload_ptr->set_data_length(nbytes);
     141  // set the values in payload extension
     142  extension_ptr->set_read();
     143  extension_ptr->set_src_id(m_srcid);
     144  extension_ptr->set_trd_id(0);
     145  extension_ptr->set_pkt_id(pktid);
     146  // set the extension to tlm payload
     147  payload_ptr->set_extension (extension_ptr );
     148  // set the tlm phase
     149  phase = tlm::BEGIN_REQ;
     150  // set the local time to transaction time
     151  send_time = m_local_time;
    152152
    153153}}}
     
    192192that is a member function of the '''p_vci_init''' port. The prototype of this method is the following:
    193193{{{
    194 
    195194  tlm::tlm_sync_enum nb_transport_fw           
    196195  ( tlm::tlm_generic_payload &payload,      // payload
     
    258257#include "my_initiator.h"                       // Our header
    259258
    260 my_initiator::my_initiator
    261             ( sc_core::sc_module_name name,           // module name
    262               const soclib::common::IntTab &index,    // index of mapping table
    263               const soclib::common::MappingTable &mt, // mapping table
    264               uint32_t time_quantum)                  // time quantum
    265             : sc_module(name),                        // init module name
    266             m_mt(mt),                                 // mapping table
    267             p_vci_initiator("socket")                 // vci initiator socket name
     259my_initiator::my_initiator(
     260                            sc_core::sc_module_name name,           // module name
     261                            const soclib::common::IntTab &index,    // index of mapping table
     262                            const soclib::common::MappingTable &mt, // mapping table
     263                            uint32_t time_quantum)                  // time quantum
     264                            : sc_module(name),                      // init module name
     265                            m_mt(mt),                               // mapping table
     266                            p_vci_init("socket")                    // vci initiator socket name
    268267{
    269268  //register callback function VCI INITIATOR SOCKET
    270   p_vci_initiator.register_nb_transport_bw(this, &my_initiator::my_nb_transport_bw);
     269  p_vci_init.register_nb_transport_bw(this, &my_initiator::my_nb_transport_bw);
    271270 
    272271  //initiator identification
     
    318317  send_time = m_local_time;
    319318  //send the message
    320   p_vci_initiator->nb_transport_fw(*payload_ptr, phase, send_time);
     319  p_vci_init->nb_transport_fw(*payload_ptr, phase, send_time);
    321320  //wait a response
    322321  wait(m_rspEvent);
     
    355354  send_time = m_local_time;
    356355  //send the null message
    357   p_vci_initiator->nb_transport_fw(*payload_ptr, phase, send_time);
     356  p_vci_init->nb_transport_fw(*payload_ptr, phase, send_time);
    358357  //deschedule
    359358  wait(sc_core::SC_ZERO_TIME);
     
    402401   
    403402    // send the transaction
    404     p_vci_initiator->nb_transport_fw(*payload_ptr, phase, send_time);
     403    p_vci_init->nb_transport_fw(*payload_ptr, phase, send_time);
    405404    // wait the response
    406405    wait(m_rspEvent);
     
    453452  tlm::tlm_sync_enum nb_transport_fw             
    454453  ( tlm::tlm_generic_payload &payload,      // payload
    455     tlm::tlm_phase   &phase,       // phase (TLM::BEGIN_REQ)
    456     sc_core::sc_time                   &time);        // time
     454    tlm::tlm_phase           &phase,        // phase (TLM::BEGIN_REQ)
     455    sc_core::sc_time         &time);        // time
    457456}}} 
    458457The return value (type tlm::tlm_sync_enum)  is not used in this TLM-T implementation, and must be sytematically set to tlm::TLM_COMPLETED.
     
    468467
    469468{{{
    470        tlm::tlm_sync_enum nb_transport_bw (
    471           tlm::tlm_generic_payload &payload,       
    472            tlm::tlm_phase   &phase,     
    473            sc_core::sc_time                   &time)
    474         {       
    475        ...
    476         payload.set_response_status(tlm::TLM_OK_RESPONSE);
    477         phase = tlm::BEGIN_RESP;
    478         time = time + (nwords * UNIT_TIME);
    479         p_vci_target->nb_transport_bw(payload, phase, time);
    480         }
     469  tlm::tlm_sync_enum nb_transport_bw
     470  ( tlm::tlm_generic_payload &payload,       
     471    tlm::tlm_phase           &phase,     
     472    sc_core::sc_time         &time)
     473  {       
     474    ...
     475    payload.set_response_status(tlm::TLM_OK_RESPONSE);
     476    phase = tlm::BEGIN_RESP;
     477    time = time + (nwords * UNIT_TIME);
     478    p_vci_target->nb_transport_bw(payload, phase, time);
     479  }
    481480}}}
    482481== E.4) Target Constructor ==
     
    494493#include "vci_ram.h"
    495494
    496 #ifndef VCI_RAM_DEBUG
    497 #define VCI_RAM_DEBUG 0
    498 #endif
    499 
    500 #define tmpl(x) x VciRam
    501 
    502495//////////////////////////////////////////////////////////////////////////////////////////
    503496// CONSTRUCTOR
    504497//////////////////////////////////////////////////////////////////////////////////////////
    505 tmpl(/**/)::VciRam
    506            ( sc_core::sc_module_name name,
    507              const soclib::common::IntTab &index,
    508              const soclib::common::MappingTable &mt,
    509              soclib::common::ElfLoader &loader)
    510           : sc_module(name),
    511            m_mt(mt),
    512            m_loader(new soclib::common::ElfLoader(loader)),
    513            m_atomic(8), // 8 equals to maximal number of initiator
    514            p_vci_target("socket")
     498VciRam::VciRam
     499( sc_core::sc_module_name name,
     500  const soclib::common::IntTab &index,
     501  const soclib::common::MappingTable &mt,
     502  soclib::common::ElfLoader &loader)
     503 : sc_module(name),
     504   m_mt(mt),
     505   m_loader(new soclib::common::ElfLoader(loader)),
     506   m_atomic(8), // 8 equals to maximal number of initiator
     507   p_vci_target("socket")
    515508{
    516509  //register callback fuction
     
    520513  m_tgtid = m_mt.indexForId(index);
    521514
     515  //segments
    522516  m_segments = m_mt.getSegmentList(index);
    523517  m_contents = new ram_t*[m_segments.size()];
    524518  size_t word_size = sizeof(vci_param::data_t);
    525  
    526519  std::list<soclib::common::Segment>::iterator seg;
    527520  size_t i;
     
    545538}
    546539
    547 tmpl(/**/)::~VciRam(){}
     540VciRam::~VciRam(){}
    548541
    549542/////////////////////////////////////////////////////////////////////////////////////
    550 // Virtual Fuctions  tlm::tlm_fw_transport_if VCI SOCKET
     543// Virtual Fuctions  tlm::tlm_fw_transport_if (VCI TARGET SOCKET)
    551544/////////////////////////////////////////////////////////////////////////////////////
    552 
    553 //nb_transport_fw implementation calls from initiators
    554 tmpl(tlm::tlm_sync_enum)::my_nb_transport_fw                            // non-blocking transport call through Bus
    555                          ( tlm::tlm_generic_payload &payload,           // generic payoad pointer
    556                            tlm::tlm_phase &phase,                       // transaction phase
    557                            sc_core::sc_time                   &time)    // time it should take for transport
     545tlm::tlm_sync_enum VciRam::my_nb_transport_fw                           
     546( tlm::tlm_generic_payload &payload,           // generic payoad pointer
     547  tlm::tlm_phase           &phase,             // transaction phase
     548  sc_core::sc_time         &time)              // time it should take for transport
    558549{
    559550  // First, find the right segment using the first address of the packet
     
    563554  payload.get_extension(extension_pointer);
    564555
     556  //if soclib command is TLMT_NULL_MESSAGE then message is not threated
    565557  if(extension_pointer->is_null_message()){
    566 #if VCI_RAM_DEBUG
    567     std::cout << "[RAM " << m_tgtid << "] Receive NULL MESSAGE Time = "  << time.value()  << std::endl;
    568 #endif
    569558    return tlm::TLM_COMPLETED;
    570559  }
     
    744733}
    745734
     735
    746736}}}
    747737