Skip to content

Vector FOF Instruction Unit VfofBuffer

Functional Description

Process and write back the uop that modifies the VL register for vector Fault Only First (fof) instructions. For fof instructions, we additionally split out a separate uop responsible for modifying the VL register. Currently, we adopt a non-speculative execution approach for fof instructions.

Feature 1: Collect write-back information of memory-accessing uops

The VfofBuffer is responsible for collecting write-back information of memory-accessing uops from fof instructions, with only one entry. If the VL register needs to be updated, the information maintained in the VfofBuffer is updated accordingly. When a Fault Only First (fof) instruction is dispatched, in addition to the normal entry into VLSplit, an entry is also allocated in the vfofBuffer. This entry monitors the write-back of uops with the same RobIdx from the VLMergeBuffer, without preventing these uops from writing back to the backend. Instead, it collects relevant metadata from these uops to update its own VL. Uops written back to the backend from the VLMergeBuffer carry exception information and VL, among other details. Based on this write-back information, we determine whether the uop should cause a change in VL. If a VL change is required, it is compared with the VL maintained in the VfofBuffer and updated to the smaller value.

Feature 2: Write back the uop that modifies the VL register

The VfofBuffer will write back the uop that modifies the VL register only after all memory-accessing uops of the instruction have been written back. Even if no modification to the VL register is needed, this uop will still be written back, but the write signal will not be enabled.

Overall Block Diagram

No block diagram for a single module.

Main ports

Direction Description
redirect In Redirect port
in In Receive uop dispatch from the Issue Queue.
mergeUopWriteback In Receive data uops written back from the VLMergeBuffer
uopWriteback Out Write back the uop modifying VL to the backend

Interface timing

The interface timing is relatively simple, described only in text.

Description
redirect Has Valid status. Data is valid when Valid is asserted.
in Includes Valid and Ready signals. Data is valid when Valid && Ready.
mergeUopWriteback Includes Valid and Ready signals. Data is valid when Valid && Ready.
uopWriteback Includes Valid and Ready signals. Data is valid when Valid && Ready.