跳转至

RXSNP

Function Description

The RXSNP module processes Snoop requests from the RXSNP bus channel, converts them into an internal task format, and then sends them to RequestArb. At the same time, if there is an ongoing MSHR that meets the following conditions, the RXSNP bus is blocked from entering SinkB: - The addresses are the same, and it cannot be nested by this Snoop request. - The data block ready for replacement has the same address as this Snoop request and cannot be nested by this Snoop request.

Feature 1: When does a Snoop(addr=X) nest an ongoing read operation (addr=X) handled by an MSHR with the same address?

  1. Before the MSHR receives the first response data, a Snoop with the same address has a higher priority and should be performed first.
  2. After the MSHR receives the first response data, a Snoop with the same address should wait for this MSHR to complete before being responded to.
  3. When the MSHR is about to send WriteBackFull/Evict to write the refill data into DS, the Snoop should be blocked, because the data required by the Snoop is still in the refillBuffer, not in the DS.
  4. When the MSHR has sent WriteBackFull/Evict and has already written the refill data into DS, the Snoop should be responded to first, because the Snoop has a higher priority.

Feature 2: When does a Snoop(addr=Y) nest an MSHR that is currently performing replacement (replaced line address addr=Y)?

  1. When the MSHR has determined which way is replaced and the probe generated by this replacement to the Core has not completed, this Snoop is blocked because this Snoop might generate a probe with the same address to the Core.
  2. If all probes from the MSHR to the Core have completed, the Snoop should nest the MSHR.
  3. When the MSHR is a CMO operation, the Snoop is blocked until all generated Probe operations are completed.

Overall Block Diagram

RXSNP