Changes between Version 11 and Version 12 of TLMDT


Ignore:
Timestamp:
May 23, 2011, 4:04:20 PM (13 years ago)
Author:
gioja
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TLMDT

    v11 v12  
    127127}}}
    128128
    129 === 2.2. PDES Null_command
    130 The Null_command is a message with does not require a response. Its only goal is to deliver a temporal information, in order to preserve the synchronization between components. Mostly, the initiator doesn't stop when the null_command message is sent, except if it is waiting for the response from a transaction. This messages allows the interconnects to respect their time quantums, regarding to its targets. It is also used to perform the Active_Sync on initiators. The message scope is local, it cannot be routed or redirected. Receiving a null_command awakes the target if it is waiting. Initiators and interconnects can send Null_commands.
     129=== 2.2. PDES Nolock_command
     130The Nolock_command is a message which does not require a response. Its only goal is to deliver a temporal information, in order to preserve the lockfree feature. When such a message is initiated, some others will have to be sent in order to reach the bottom of the architecture. This allows to locally broadcast a temporal information across different level of interconnection in order to prevent a possible lock. The initiator needs to wait when a Nolock_command message is sent. It is used to perform the Active_Sync on initiators. The message scope is local, it cannot be routed or redirected. Receiving a nolock_command awakes the target if it is waiting. Initiators, Local interconnects and Target-Initiators can send Nolock_commands.
    131131{{{#!c++ 
    132132tlm::tlm_generic_payload *payload_ptr = new tlm::tlm_generic_payload();
     
    148148}}}
    149149
    150 === 2.3. PDES Null_response
    151 The Null_response is a message which transits on networks like a VCI responses. Only transactions which are blocking or conditionnaly blocking needs to receive Null_responses. The meaning of this message is : "The response to the associated VCI transaction won't be caught before this time". The Null_response is part of the Passive/Active_Sync mechanisms. It is used to predict the future of simulation. The only useful data contained in the Null_response is the temporal information. When an initiator receives a Null_response instead of a VCI response, it allows itself to pursue its treatment, neglecting the need of the VCI response, until the Null_response time. In order to properly aim the right transaction on the right initiator, the VCI transaction is reused for the Null_response. When the Null_response is sent, only the target of this message is awaken. Multiple Null_responses can be sent for a single VCI transaction. Successives Null_response's time related to the same transaction needs to grow.
    152 
    153 Interconnects and targets can generate and transmit the Null_responses. Null_responses are useful for preventing deadlocks related to synchronization. For performance optimizations, an interconnect can neglect generating a Null_response when the associated transaction is primary. Since Null_response allows to release parallelism of the simulation, it seems important to send it with the highest time possible.
     150=== 2.3. PDES Sync_response
     151The Sync_response is a message which transits on networks like a VCI responses. Only transactions which are blocking or conditionnaly blocking needs to receive Sync_responses. The meaning of this message is : "The response to the associated VCI transaction won't be caught before this time". The Sync_response is part of the Passive/Active_Sync mechanisms. It is used to predict the future of simulation. The only useful data contained in the Sync_response is the temporal information. When an initiator receives a Sync_response instead of a VCI response, it allows itself to pursue its treatment, neglecting the need of the VCI response, until the Sync_response time. In order to properly aim the right transaction on the right initiator, the VCI transaction is reused for the Sync_response. When the Sync_response is sent, only the target of this message is awaken. Multiple Sync_responses can be sent for a single VCI transaction. Successives Sync_response's time related to the same transaction needs to grow.
     152
     153Interconnects and targets can generate and transmit the Sync_responses. Sync_responses are useful for preventing deadlocks related to synchronization. For performance optimizations, an interconnect can neglect generating a Sync_response when the associated transaction is primary. Since Sync_response allows to release parallelism of the simulation, it seems important to send it with the highest time possible.
    154154{{{#!c++ 
    155155soclib_payload_extension *extension_ptr;
    156156payload_ptr->get_extension(extension_ptr);
    157157
    158 //Set the Null_response flag - 2 methods
    159 extension_ptr->set_null_response();
    160 extension_ptr->set_command(PDES_NULL_RESPONSE);
     158//Set the Sync_response flag - 2 methods
     159extension_ptr->set_sync_response();
     160extension_ptr->set_command(PDES_SYNC_RESPONSE);
    161161//set the tlm phase
    162162phase = tlm::BEGIN_RSP;
     
    166166
    167167//Retrieve information
    168 extension_ptr->is_null_response();
    169 }}}
    170 
    171 === 2.4. PDES Sync transaction
    172 The Sync transaction is composed of a command and a response. It is used by initiators which went ahead their quantum, in order to keep the synchronization between initiators connected on the same interconnect. The transaction's scope is local. Its response is sent when it is arbitrated on the interconnect. This means that every other initiators connected to this interconnect got a higher time, so it can pursue its treatment until the next quantum.
     168extension_ptr->is_sync_response();
     169}}}
     170
     171=== 2.4. PDES Sync_request
     172The Sync_request is composed of a command and a response. It is used by initiators which went ahead their quantum, in order to keep the synchronization between initiators connected on the same interconnect. The transaction's scope is local. Its response is sent when it is arbitrated on the interconnect. This means that every other initiators connected to this interconnect got a higher time, so it can pursue its treatment until the next quantum.
    173173
    174174{{{#!c++
     
    203203}}}
    204204
     205=== 2.2. PDES Sync_command
     206The Sync_command is similar to a Sync_request except that it doesn't need a response. It is used for Interconnects and Target-Initiator components which are bound to the requests they receives in order to increase their time.
     207
    205208=== 2.5. Passive_Sync / Active_Sync
    206 According to the TLMDT for SOCLIB specification, an initiator which sends a blocking request will be completely locked until the response comes back. However, targets are not ever only reactive and won't ever immediately answer to a request, possibly waiting another request which could be handled before the first one, due to the target structure. In this case, if the initiator doesn't transmit a greater time information than the one of its last request, the related interconnect won't be able to route any other request to the waiting target. The null_response is the message which allows to inform an initiator that it needs to increase its own time up to the one in the message.
    207 
    208 There are two methods for handling the null_responses.
    209 The first and easiest one is to continue to consider that an initiator is fully locked until the real response is caught. This way, the only thing to do when a null_response is caught is to send a null_command to the interconnect with the same time information as the null_response. This doesn't even need to wake up the initiator. This method is called Passive_Sync.
    210 
    211 The second one is dedicated for advanced multitransactionnal components modeling. There is a gap between the null_response time and the initiator one. During this gap, there can be some useful cycles to simulate which can also initiate a transaction. In order to prevent this eventual request to be delayed, the cycles in the gap need to be simulated. When a null_response is caught, the initiator is woken up and is allowed to pursue its treatment until a new transaction is sent or the null_response time is matched, resulting in the sending of a null_command. This method is called Active_Sync.
     209According to the TLMDT for SOCLIB specification, an initiator which sends a blocking request will be completely locked until the response comes back. However, targets are not ever only reactive and won't ever immediately answer to a request, possibly waiting another request which could be handled before the first one, due to the target structure. In this case, if the initiator doesn't transmit a greater time information than the one of its last request, the related interconnect won't be able to route any other request to the waiting target. The sync_response is the message which allows to inform an initiator that it needs to increase its own time up to the one in the message.
     210
     211There are two methods for handling the sync_responses.
     212The first and easiest one is to continue to consider that an initiator is fully locked until the real response is caught. This way, the only thing to do when a sync_response is caught is to send a nolock_command to the interconnect with the same time information as the sync_response. This doesn't even need to wake up the initiator. This method is called Passive_Sync.
     213
     214The second one is dedicated for advanced multitransactionnal components modeling. There is a gap between the sync_response time and the initiator one. During this gap, there can be some useful cycles to simulate which can also initiate a transaction. In order to prevent this eventual request to be delayed, the cycles in the gap need to be simulated. When a sync_response is caught, the initiator is woken up and is allowed to pursue its treatment until a new transaction is sent or the sync_response time is matched, resulting in the sending of a nolock_command. This method is called Active_Sync.
     215
    212216== 3. Efficient time modeling in a multi-transactionnal VCI Component
    213217Mostly, a multi-transactionnal component is composed of several threads in its CABA model. Those threads are used to model various behaviors, such as the control of access to a material resource or the resource usage by a dataflow.
     
    221225A decoupled Target-Initiator component can be seen as two components, a regular target and a regular initiator. The interesting part is the interactions between those two. When the target receives a message, it is transmitted to the initiator which will instantly send an activity message if it was inactive. The initiator part will pursue its treatment until it has nothing else to do but to wait and then send an inactivity message.
    222226== 6. VCI Target-Initiator (coupled) modeling
    223 A coupled Target-Initiator acts like a simple initiator but needs to consider the input timer and some suppositions on the capabilities of the next incoming transaction. It cans also generate null_responses.
     227A coupled Target-Initiator acts like a simple initiator but needs to consider the input timer and some suppositions on the capabilities of the next incoming transaction. It cans also generate sync_responses.
    224228== 7. VCI Target modeling
    225229There are no changes in the target modeling.
     
    233237// T = Time - Q = quantum
    234238If (T.global_input + Qqlc < T.local_crossbar)
    235    If (null_command of vci_transaction received from global crossbar)
     239   If (sync_command of vci_transaction received from global crossbar)
    236240      T.global_input = T.local_crossbar
    237241Else If(arbitration ok : Req = handled request)
     
    240244   For every local target
    241245      if(T.local_target + Qqlc < T.local_crossbar)
    242          send a null_command to the target
     246         send a sync_command to the target
    243247         T.local_target = T.local_crossbar
    244248   //Global Synchronisation
    245249   If (T.global_input + Qqlc < T.local_crossbar)
    246       send a null_command to the global_crossbar
     250      send a sync_command to the global_crossbar
    247251   //Initiators Synchronisation
    248252   Else If (Req.type == Sync_request)
    249253      send the response to this transaction
     254   Else If (Req.type == Sync_command)
     255      nothing else to do //time update already done
    250256   //Cluster Unlock
    251    Else If (Req.type == Null_command && input != global_input)
    252       send a Null_command to every local target and global crossbar
     257   Else If (Req.type == Nolock_command)
     258      send a Nolock_command to every local target and to the global crossbar
    253259   //Routing
    254260   Else If (Req.type == vci_transaction && input == global_input)
     
    258264      Routage
    259265Else //arbitration ko
    260    send a null_response for any non primary blocking or conditionnaly blocking request for which the interconnect did not sent one before.
     266   send a sync_response for any non primary blocking or conditionnaly blocking request for which the interconnect did not sent one before.
    261267   wait for a new incoming transaction
    262268}}}
     
    271277   If (T.input <= T.global_crossbar + Qqgc)
    272278      //Synchronization
    273       If(Req.type == Null_command)
    274          Send back another null_command with the same temporal information.
     279      If(Req.type == Sync_command || Req.type == Nolock_command)
     280         Send back another Sync_command with the same temporal information.
    275281      //Routing
    276282      If(Req.type == vci_transaction)