在本期验证任务中,各位朋友将走近香山昆明湖架构的StoreUnit模块,了解香山存储地址执行单元的设计思路,加深对RISCV指令集架构的理解。欢迎各位报名参加! (报名链接点这里,qq群:600480230)。

StoreUnit 用于执行Store类指令的地址生成与处理,是Load/Store流水线中的关键组成部分,与LoadUnit共同构成了LSU(Load Store Unit)访存流水线。从功能来说,LSU负责访存类型指令的具体执行流程,包括正常的访存地址空间以及外设相关的MMIO地址空间,同时负责原子指令执行。从流程来说,LSU接受保留站发射的指令,根据访存指令的类型,经过不同指令的流水线,得到指令执行结果,写回到ROB中,并通知前递旁路网络,唤醒后续相关指令以及数据前递。

任务介绍

本期验证任务是对StoreUnit模块的功能点进行验证,合计发布21个微任务,参与者可自行挑选感兴趣的任务,完成1个或多个。

每个微任务均给出了函数模板,你仅需选择已提供的对应函数,编写测试用例验证对应功能,并完成验证报告的编写。除去前期的学习时间,每个微任务的验证时间约在2-5小时不等。 每个微任务均有奖金,我们将给成功完成该任务的前五人,发放现金奖励。此外,如果您在验证过程中首次找到了 bug 并联系我们确认后,根据 bug 实际情况,还会获得额外的奖金 💴

任务参与流程如下:

任务流程
任务流程
所有的任务都将通过万众一芯之香山处理器的issue分配。

LSU-StoreUnit详细验证文档: StoreUnit验证文档

任务列表

所有微任务如下所示,你可以选择完成1个或多个。每个微任务中,前五名提交成果并通过审核的同学,将获得任务奖金。

功能点难度预估验证时间奖金详情
标量指令派发★ ☆ ☆ ☆ ☆2小时100元test_scalar_dispatch
向量指令派发★ ★ ☆ ☆ ☆3小时150元test_vector_dispatch
地址流水线S0阶段★ ★ ☆ ☆ ☆3小时150元test_s0_address_calc
地址流水线S1阶段★ ★ ★ ☆ ☆4小时200元test_s1_raw_check
地址流水线S2阶段★ ☆ ☆ ☆ ☆1.5小时80元test_ s2_sq_mark_ready
向量指令拆分★ ★ ★ ☆ ☆3小时150元test_split
向量元素偏移地址计算★ ★ ☆ ☆ ☆2小时100元test_offset
Tlb缺失★ ★ ☆ ☆ ☆3小时150元test_tlb_miss
Raw违例检测★ ★ ☆ ☆ ☆3小时150元test_violation
Raw违例恢复★ ★ ★ ★ ★5.5小时270元test_recovery_mech
SBuffer合并★ ★ ☆ ☆ ☆3小时150元test_write_merge
Sbuffer替换★ ★ ☆ ☆ ☆3小时150元test_plru_replace
mmio指令执行顺序★ ★ ☆ ☆ ☆3小时150元test_order
mmio异常★ ★ ☆ ☆ ☆4小时200元test_exception
NC乱序执行★ ★ ☆ ☆ ☆2小时100元test_exec
Uncache转发★ ★ ☆ ☆ ☆3小时150元test_forward
标量非对齐指令拆分★ ★ ☆ ☆ ☆3小时150元test_scalar_split
向量Segment指令★ ★ ★ ★ ★5小时270元test_seg_handle
非对齐访问异常★ ★ ☆ ☆ ☆4小时200元test_exception
原子指令缓存预取★ ☆ ☆ ☆ ☆2小时100元test_preload
原子操作执行验证★ ★ ☆ ☆ ☆3小时150元test_ops

成果需求

  1. 测试用例:测试用例是代码成果,定义了用于测试的输入组合,以及预期的输出组合。
  2. 验证微报告:验证报告是文字成果,要求不少于500字,包括功能、输入和输出结果,以及边界条件分析。报告参考格式: 微报告模板
  3. 其他说明:如果运行您的项目需要其他的依赖,可在测试报告或PR中说明

参与与提交

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

请fork上述UnityChipForXiangShan仓库之后完成验证代码和文档的编写,成果齐备后,请发起PR以提交。

奖励信息

最终,根据任务的难度和各位的完成情况,各位将能获得数额不等的奖金。此外,如果为LSU StoreUnit模块找出bug并反馈确认后,有机会得到更多奖金。

bug报告

请直接在UnityChipForXiangShan的仓库下使用bug report模板提issue。

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