验证文档众包第一期:第三代香山(昆明湖)架构CPL2模块文档众包(进行中)
了解香山CPL2微架构设计,提交说明文档
Created Dec 11, 2024 - Last updated: Dec 11, 2024
在本期验证文档众包任务中,各位朋友将走近香山昆明湖架构的CPL2模块,了解香山L2Cache的设计思路,加深对RISCV指令集架构的理解。欢迎各位报名参加(报名填写这里,qq群:1038700912。)!
CPL2(CHI-CoupledL2)是非阻塞的二级高速缓冲存储器,主要功能有接收来自 L1 的预取请求、支持 BOP 预取、支持Temporal 预取、支持访存请求和预取请求的融合等。
本期任务中,合计发布14个子任务,涵盖CPL2的20个子模块。
文档编写
本次验证文档众包任务请阅读并理解香山对应模块代码后,基于我们提供的文档模板完成文档撰写工作并向该仓库提交PR。
成果提交
请fork XiangShan-Design-Doc仓库之后完成文档的编写,成果齐备后,请发起PR以提交。
任务难度
任务难度是根据理解难度、工作量等因素综合得出的,一般来说难度1~3的任务是简单的任务,4~7的任务难度一般,或许工作量较大,或许需要花费一定时间理解任务隐藏信息,8~10的任务较为困难,一般同时具有较大的工作量和较高的理解难度。
奖励信息
最终,根据任务的难度和各位的完成情况,各位将能获得数额不等的奖金。
任务详情
CPL2的设计文档请点击这里下载,以下是本期各个子任务的详细介绍:
任务 1.1:SinkA、RequestBuffer子模块
SinkA把来自总线A通道和预取器的请求进行处理,转化为内部任务格式,然后发送给RequestBuffer。Request Buffer用来缓冲那些暂时需要阻塞的 A 通道请求,同时让满足释放条件/不需要阻塞的 A 通道请求先进入主流水线。
预期任务难度:4/10
任务1.2:SinkC、ReleaseBuf子模块
SinkC接收来自总线C通道的请求。ReleaseBuf 用于暂存上游 Cache 释放的数据、或者 L2 即将释放的数据。
预期任务难度:4/10
任务1.3:GrantBuffer子模块
GrantBuffer接收来自MainPipe的任务,并根据任务类型进行转发。
预期任务难度:4/10
任务1.4:TXREQ、TXRSP、TXDAT子模块
TXREQ 模块接收来自 MainPipe 和 MSHR 两个模块发往 REQ 通道的请求,在两者之间进行仲裁,并用队列进行缓冲,最终发送到 CHI 的 TXREQ 总线通道上。TXRSP 模块接收来自 MainPipe 和 MSHR 两个模块发往 SRSP 通道的请求,在两者之间进行仲裁,并用队列进行缓冲,最终发送到 CHI 的 TXRSP 总线通道上。TXDAT 模块无条件接收来自 MainPipe 发往 WDAT 通道的请求,并用队列进行缓冲,最终发送到 CHI 的 TXDAT 总线通道上。
预期任务难度:3/10
任务1.5:RXSNP、RXRSP、RXDAT子模块
RXSNP把来自总线B的请求进行处理,转化为内部任务格式,然后发送给ReqArb。接受来自RXRSP通道的无数据的响应消息,直接把响应送到MSHRCtl,用消息中txnID用来识别mshrID。接受来自RXDAT通道的有数据的响应消息,将数据存入RefillBuffer,同时把响应送到MSHRCtl,用消息中txnID用来识别mshrID。
预期任务难度:4/10
任务1.6:MSHRCtl子模块
MSHRCtl模块主要负责为请求分配MSHR,将来自RXRSP/RXDAT/sourceC通道控制器等的信息传入目标MSHR,并对MSHR的请求进行仲裁,发送给对应的TXREQ/TXDAT通道控制器或者MainPipe(RequestArb)。内部包含模块MSHR,当L2发生缓存miss或者命中但需要更改meta权限时,会为请求分配一项MSHR,用于记录请求所处的状态,并接收通道控制器与目录的响应,根据当前状态发出对应的控制请求。当所有控制请求完成后,释放MSHR。
预期任务难度:6/10
任务1.7:RefillBuf子模块
RefillBuf 用于暂存从下游 Cache 返回的数据。
预期任务难度:4/10
任务1.8:RequestArb子模块
RequestArb 负责仲裁哪个请求应该进入主流水线,同一拍只允许一个请求进入。
预期任务难度:5/10
任务1.9:MainPipe子模块
非阻塞的主流水线负责接收和处理所有与Directory、DataStorag、RefillBuf、ReleaseBuf 读写相关的通道请求和MSHR请求,并生成响应与分配MSHR。
预期任务难度:9/10
任务1.10:Directory子模块
Directory 会根据读请求查找L2是否存储该数据块(是否命中)。如果命中,则返回该数据块的元数据信息。如果缺失,则挑选一个无效的路/被替换的路,返回该路数据的元数据信息。请求处理完成后,会将新的目录信息写入Directory进行更新。
预期任务难度:3/10
任务1.11:DataStorage子模块
DataStorage模块负责Cache数据的存储与读写,采用单端口 SRAM 构建。
预期任务难度:3/10
任务1.12:Prefetcher子模块
Prefetcher模块接收来自L2 Cache的预取训练数据,并将训练数据发送给BOP模块进行预取训练。包含PrefetchReceiver、PrefetchQueue、BOP(BestOffsetPrefetch)三个子模块。
PrefetchReceiver模块仅根据输入的L1 DCache预取请求重新生成符合L2 Cache预取请求格式的信号(将recv_addr转换为L2预取请求格式),无其他功能。PrefetchQueue模块例化了一个容量为16(inflightEntries)的寄存器循环队列用于缓存预取请求。BOP模块接收来自Prefetcher模块的训练数据进行最佳偏移量预取。BOP模块包含RecentRequestTable(最近请求表,用于记录最近的BOP预取相关的内存访问请求)和OffsetScoreTable(偏移量分数表,用于训练、记录各个偏移量的分数,获取当前最佳偏移量)两个子模块。
预期任务难度:8/10
任务1.13:MMIOBridge子模块
MMIOBridge 模块接收来自核侧基于 TileLink 总线的 MMIO 请求,将其转化为 CHI 中的 ReadNoSnp / WriteNoSnp 请求,并在 MMIO 事务处理完成后向核侧的 TileLink 总线 D 通道返回响应。
预期任务难度:6/10
任务1.14:LinkMonitor子模块
LinkMonitor 模块将基于 Valid-Ready 握手的消息转化为基于 L-Credit 的握手,同时会维护 TX、RX 两条方向的 Link 的功耗状态。
预期任务难度:5/10