Vector FOF Instruction Unit VfofBuffer
Functional Description
Processes and writes back the micro-operations (uops) for vector Fault only first (fof) instructions that modify the VL register. For fof instructions, we additionally split out a separate uop responsible for modifying the VL register. Currently, we handle fof instructions non-speculatively.
Feature 1: Collecting Write-back Information of Memory Access Uops
VfofBuffer is responsible for collecting write-back information of fof instruction memory access uops, and there is only one entry. If the VL register needs to be updated, the information maintained in VfofBuffer is updated. When a Fault only first instruction is dispatched, in addition to entering VLSplit normally, an entry is also allocated in vfofBuffer. This entry monitors the write-back of uops with the same RobIdx from VLMergeBuffer. It does not prevent these uops from writing back to the backend, but merely collects their relevant metadata to update and maintain its own VL. Uops written back from VLMergeBuffer to the backend carry exception information and VL, etc. We need to determine based on this write-back information whether this uop should cause the VL to change. If the VL needs to change, it is compared with the VL maintained in VfofBuffer and updated to the smaller VL.
Feature 2: Writing Back the Uop that Modifies the VL Register
VfofBuffer will write back the uop that modifies the VL register after all memory access uops for that instruction have written back. Even if the VL register does not need to be modified, this uop will still be written back, but the write enable signal will not be asserted.
Overall Block Diagram
No block diagram for a single module.
Major Ports
Direction | Description | |
---|---|---|
redirect | In | Redirect port |
in | In | Receives uop dispatch from Issue Queue |
mergeUopWriteback | In | Receives data uops written back from VLMergeBuffer |
uopWriteback | Out | Writes back the VL-modifying uop to the backend |
Interface Timing
The interface timing is relatively simple, only text descriptions are provided.
Description | |
---|---|
redirect | Has Valid. Data is valid when Valid is asserted. |
in | Has Valid, Ready. Data is valid when Valid && ready is asserted. |
mergeUopWriteback | Has Valid, Ready. Data is valid when Valid && ready is asserted. |
uopWriteback | Has Valid, Ready. Data is valid when Valid && ready is asserted. |