跳转至

向量 Load 合并单元 VLMergeBuffer

功能描述

一个基于 freelist 的队列,接收 VLSplit 模块发来的请求,为后端发射的每一个 uop 申请一个表项,保存 uop 的相关信息,收集从 Load pipeline 上返回的数据,接收该 uop 拆分的全部访存请求之后写回后端与 Load Queue。

特性 1:维护 uop 的拆分访存请求

在 VLSplit 模块的 pipeline 第二阶段向 VLMergeBuffer 发起表项申请,同周期 VLMergeBuffer 向 VLSplit 返回一个表项 index ,同时相应表项 allocated 置 true。 入队同时会在对应项的计数器中写入当前 uop 拆分的访存请求数量. 为每个 uop 分配一项,每一项维护所需要收集的 flow 数量。当全部收集之后标记为 uopfinish,按照 uop 为粒度写回。 在标记 uopfinish 的表项中选择一项写回后端,当有多项可以写回时index小的先写回。同时清空相应标志位。

特性 2:合并数据

根据 Load 流水线输出信息,以 uop 为粒度合并数据。合并时候根据是否有异常、元素位置、mask 等进行合并。

特性 3:处理异常

根据流水线的输出信息,出现异常时正确的设置 ExceptionVec、vstart 等相应的数据。

特性 4:阈值反压

为了避免卡死,当 VLMergeBuffer 的空闲表项小于等于 6 项时,产生 threshold 反应信号至 VLSplit。反压 VLSplit Pipe。 参见 根据 VLMergeBuffer 的 Threshold 信号进行反压

整体框图

单一模块无框图

主要端口

方向 说明
frompipeline In 接收来自 Load pipeline 的读数据返回
fromSplit.req In 接收来自 VLSplit 模块的表项申请
fromSplit.resp Out 反馈至 VLSplit 模块,是否成功分配、分配的表项
uopWriteback Out 将执行结束的 uop 写回后端
toLsq Out 执行结束的 uop 写回后端时更新 Load queue 中表项状态
redirect In 重定向端口
feedback Out 反馈至后端 Issue Queue,目前后端不做任何处理
toSplit Out 反馈至 VLSplit 模块,VLMergeBuffer即将达到阈值

接口时序

接口时序较简单,只提供文字描述。

说明
frompipeline 具备 Valid、Ready。数据同 Valid && ready 有效
fromSplit.req 具备 Valid、Ready。数据同 Valid && ready 有效
fromSplit.resp 具备 Valid。数据同 Valid 有效
uopWriteback 具备 Valid、Ready。数据同 Valid && ready 有效
toLsq 具备 Valid。数据同 Valid 有效
redirect 具备 Valid。数据同 Valid 有效
feedback 具备 Valid。数据同 Valid 有效
fromMisalignBuffer 不具备 Valid,数据始终视为有效,对应信号产生即响应