next up previous contents
Next: Processing incoming REQUESTs Up: Directory and Memory Simulation Previous: Directory and Memory Simulation

Obtaining a new or incomplete transaction to process

The first stage is DIRSTART. In this stage, the directory first sees if it can send out a message that was previously added to its list of outbound transactions (OutboundReqs). If a message can be sent, the directory jumps to state DIROUTBOUND; otherwise, the message at the head of the OutboundReqs list is pushed to the end.

Next, the directory starts to check its input ports (REQUEST and COHE_REPLY) in a round-robin fashion. However, the directory cannot bring in a new REQUEST if it still has a partially completed REQUEST transaction (described in Sections 14.2 and 14.3). This transaction must be completed before the any new REQUESTs are brought in. In this case, the directory transitions to state DIRSENDCOHE to attempt to complete the previous REQUEST transaction rather than bringing in a new one. Further, the directory cannot bring in a new REQUEST if a formerly pending request (described in Section 14.2) has become ready for processing. In this case, the formerly pending REQUEST is chosen rather than a new REQUEST. Before looking at the input port for new REQUESTs, the directory will check to see if it has a partially completed transaction in flight (noted in the req_partial field). This transaction must be completed before any new REQUESTs are brought in. In this case, the directory transitions to state DIRSENDCOHE. If there are no partially completed transactions, the directory then looks at its list of previously pending REQUESTs to process an old REQUEST before bringing in a new one. Only if there is no partially completed transactions or formerly pending REQUEST available will the directory bring in a new REQUEST. However, there is no restriction on the directory bringing in a new COHE_REPLY: such an access will be brought in and processed regardless of previous pending REQUESTs or partially-completed REQUEST transactions.

For new REQUESTs, formerly pending REQUESTs, or COHE_REPLYs, the directory must now stall for its access latency. This is calculated based on the width of the directory port and the flit transfer time, discussed in Section 12.3. Additionally, for all accesses except COHE_REPLYs that do not access memory (simple acknowledgments without copy-back), the directory must delay by the memory latency specified with ``-M''. For COHE_REPLYs that do not access memory, the directory only stalls for the amount of time specified with the configuration parameter dircycle, which represents the minimum directory delay.

After these stalling, the directory jumps to state DIRSERV, where REQUESTs are dispatched to DIRREQ, write-backs or other replacement messages are sent to case DIRWRB, and other COHE_REPLYs are sent to state DIRCOHEREP. Each of these states is discussed in the following sections.


next up previous contents
Next: Processing incoming REQUESTs Up: Directory and Memory Simulation Previous: Directory and Memory Simulation

Vijay Sadananda Pai
Thu Aug 7 14:18:56 CDT 1997