在本期验证任务中,各位朋友将走近香山昆明湖架构的ICache模块,在验证实战中体会香山取指模块的设计思路,加深对RISCV指令集架构的理解。欢迎各位报名参加(报名填写这里,qq群:600480230。)!

ICache(Instuction Cache)即指令缓存,负责接收FTQ的取指和预取请求并从向ITLB获取物理地址和通过Tilelink获取指令数据,最终将指令数据或者异常数据发送给IFU。

本期任务中,合计发布6个子任务,涵盖ICache的7个子模块(IPrefetchPipe、MainPipe、WayLookup、FIFO、MissUnit、CtrlUnit和ICache),所有的任务都将通过万众一芯之香山处理器的issue分配。

报名参与

任务流程
任务流程

以上是参与任务的流程环节,根据您选择的任务难度及完成情况,将会获得数额不等的奖金(本期奖金池7000),您的努力将会获得回报。此外,如果您在验证过程中首次找到了bug并联系我们确认后,根据bug实际情况,还会获得额外的奖金💴

请填写报名问卷参与本期任务,也欢迎加入活动官方qq群:600480230

本次验证任务请基于UnityChipForXiangShan提供的验证框架完成验证工作并向该仓库提交PR。

任务详情

任务难度是根据理解难度、工作量等因素综合得出的,一般来说难度1~3的任务是简单的任务,4~7的任务难度一般,或许工作量较大,或许需要花费一定时间理解任务隐藏信息,8~10的任务较为困难,一般同时具有较大的工作量和较高的理解难度。

以下是本期各个子任务的详细介绍:

任务 1:IPrefetchPipe子模块

IPrefetchPipe子模块负责预取请求过滤。 接收FTQ的预取请求,通过ITLB进行地址转换和PMP检查,之后对 MetaArray 进行查询,将元数据(在哪一路命中、ECC 校验码、是否发生异常等)存储到 WayLookup 中,如果该请求缺失,就发送至 MissUnit 进行预取。

预期任务难度:7/10

功能文档参考:IPrefetchPipe功能

issue link:IPrefetchPipe issue

任务 2:MainPipe子模块

MainPipe 为 ICache 的主流水,为三级流水设计,负责从 DataArray 中读取数据,pmp 检查,缺失处理,并且将结果返回给 IFU。

预期任务难度:7/10

功能文档参考:MainPipe功能

issue link:MainPipe issue

任务3:WaylookUp模块

内部是 FIFO 环形队列结构。暂存 IPrefetchPipe 查询 MetaArray 和 ITLB 得到的元数据,以备 MainPipe 使用。同时监听 MSHR 写入 SRAM 的 cacheline,对命中信息进行更新。

预期任务难度:5/10

功能文档参考:WayLookup功能

issue link:WayLookup issue

任务4:FIFO和MissUnit子模块验证

FIFO为一个一个循环队列。 MissUnit用于管理Miss请求和MSHR,通过 TileLink 协议与 L2 缓存进行通信,发送获取缓存块的请求(mem_acquire),并接收 L2 缓存的响应(mem_grant)。还有处理特殊情况(如 flush、fencei、数据损坏等)。

预期任务难度:6/10

功能文档参考:MissUnit功能

issue link:MissUnit issue

任务5:CtrlUnit子模块验证

目前 CtrlUnit 主要负责 ECC 校验使能/错误注入等功能。

预期任务难度:5/10

功能文档参考:CtrlUnit功能

issue link:CtrlUnit issue

任务6:ICache顶层模块验证

ICache顶层模块,主要负责处理预取,取指请求,更新Replacer,读写MetaArray和DataArray,以及处理异常。

预期任务难度:8/10

功能文档参考:ICache顶层功能

issue link:ICacheTop issue

成果需求

本次验证任务请基于UnityChipForXiangShan提供的验证框架完成验证工作,并向该仓库提交PR。 每个子任务需要提交以下成果:

  1. 验证环境+API:验证环境和API是代码成果,是针对待验证对象(DUT)的数据职责(引脚)和行为职责(逻辑)的封装,需要提供特定的可复用的接口、 测试套件、测试覆盖率等的定义。其中,搭建验证环境可以参考验证环境搭建教程,测试覆盖率相关的文档可以参考这两篇:行覆盖率功能覆盖率
  2. 测试用例:测试用例是代码成果,定义了用于测试的输入组合,以及预期的输出组合。构建测试用例可以参考测试用例添加教程
  3. 验证报告:验证报告是文字成果,包括对环境、测试点和测试用例的介绍,复现代码所需的环境和指令,以及对测试覆盖率等衡量指标的报告。 验证报告的书写可以参考这篇教程:验证报告教程

本期任务在UnityChipForXiangShan验证框架中已经提供了初步的环境,各位也可以自行搭建验证环境和提炼API。

bug报告

请直接在UnityChipForXiangShan的仓库下使用bug report模板提issue,或者快捷点击这里

提交bug时,请先在label中选择bug need to confirm标签。然后从label提供的四种bug分级(minor、normal、serious、critical)中选择您认为最符合的一种标签。最后,请选择您发现bug的模块,本次验证的是前端的icache模块,可以统一打上ut_frontend.icache标签。