Skip to content

Vector Load Merge Unit VLMergeBuffer

Functional Description

A freelist-based queue that receives requests from the VLSplit module, allocates an entry for each uop dispatched to the backend to store uop-related information, collects data returned from the Load pipeline, and writes back to the backend and Load Queue after all memory access requests split from the uop are received.

Feature 1: Maintains split memory requests for uops.

In the second stage of the VLSplit module's pipeline, initiate an entry request to the VLMergeBuffer. In the same cycle, the VLMergeBuffer returns an entry index to the VLSplit, with the corresponding entry's allocated flag set to true. During enqueue, the counter for the corresponding entry is written with the number of memory access requests split by the current uop. Each uop is allocated one entry, with each entry maintaining the number of flows that need to be collected. Once all are collected, it is marked as uopfinish and written back at the uop granularity. Among the entries marked as uopfinish, select one to write back to the backend. When multiple entries are ready for writeback, the one with the smaller index is written back first, and the corresponding flags are cleared.

Feature 2: Data Merging

Based on the Load pipeline output information, merge data at the uop granularity. Merging considers factors such as exceptions, element positions, and masks.

Feature 3: Exception Handling

Based on the pipeline output information, correctly sets ExceptionVec, vstart, and other relevant data when exceptions occur.

Feature 4: Threshold Backpressure

To prevent deadlock, when the number of free entries in the VLMergeBuffer is less than or equal to 6, a threshold reaction signal is generated and sent to the VLSplit, backpressuring the VLSplit Pipe. Refer to Backpressure based on the VLMergeBuffer's Threshold signal.

Overall Block Diagram

Single module without a block diagram

Main ports

Direction Description
frompipeline In Receive read data returns from the Load pipeline
fromSplit.req In Receives entry requests from the VLSplit module
fromSplit.resp Out Feedback to the VLSplit module, indicating whether allocation was successful and the allocated entry
uopWriteback Out Write back the completed uop to the backend.
toLsq Out Updates the entry status in the Load queue when completed uops are written back to the backend
redirect In Redirect port
feedback Out Feedback to the backend Issue Queue, currently the backend does not perform any processing
toSplit Out Feedback to the VLSplit module indicating the VLMergeBuffer is approaching its threshold

Interface timing

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

Description
frompipeline Includes Valid and Ready signals. Data is valid when Valid && Ready.
fromSplit.req Includes Valid and Ready signals. Data is valid when Valid && Ready.
fromSplit.resp Has Valid status. Data is valid when Valid is asserted.
uopWriteback Includes Valid and Ready signals. Data is valid when Valid && Ready.
toLsq Has Valid status. Data is valid when Valid is asserted.
redirect Has Valid status. Data is valid when Valid is asserted.
feedback Has Valid status. Data is valid when Valid is asserted.
fromMisalignBuffer No Valid signal; data is always considered valid, and responses are generated as soon as the corresponding signal is present.