SinkC
Function Description
SinkC receives requests from bus C channel (Release/ReleaseData/ProbeAck/ProbeAckData). The internal buffer depth is 3, and it uses the valid/ready handshake protocol to block the C channel, performing the following operations: a. If the request is Release(Data), it allocates a buffer entry to save it. When the pipeline can receive C requests, it sends it to RequestArb to enter the main pipeline; If it contains data, it delays two cycles and sends the data to MainPipe when the request enters S3; b. If the request is ProbeAckData, it sends feedback directly to MSHR and writes its data into ReleaseBuf.
Feature 1: RefillBuffer Overwrite
Because currently, the refill operation first returns data to L1, and then schedules the refill data (in RefillBuf) to be written to L2's DataStorage, there is a time difference between the two. If L1 releases dirty data during this period, to ensure the latest data is written to L2, we also let ReleaseData synchronously write a copy of its data into RefillBuf, overwriting the original refill data.
Feature 2: ReleaseBuffer Overwrite
When MSHR processes a release and needs to probe L1D$, after this probeAckData finds and matches the release in MSHR, it will actively write the data into ReleaseBuf.
Overall Block Diagram