跳转至

实验 6:综合实验

说明

本次实验,请在下面的任务中选择至少一项完成。如果多选,则需要在同一个 CPU 中实现。大家可以结合自己先前实验的完成情况与时间安排决定本次实验的工作量。

所有的任务最终均需要上板验证效果。在接入流水线时,请注意可能的停顿与相关的处理。

关于组队

为了减少负担,本次实验允许至多两名同学组队完成,组队情况在验收时告知助教即可。验收后,二人分数相同,且均需要在系统上提交实验报告。

任务 1:指令集扩展(M)

Task 1

请查询相关资料,设计乘除法运算单元,在流水线处理器中支持下面的 RV32M 指令。

  • mul, mulh, mulhu
  • div, divu, rem, remu

要求:乘法器能在至多 5 个周期内给出正确结果(也就是 ban 了循环加法);乘法器和除法器均不允许使用 IP 核或 */% 运算符。

为了验证正确性,你需要为这些指令设计合适的测试汇编程序,最后上板运行比对结果。

任务 2:指令集扩展(F)

Task 2

请查询相关资料,设计浮点运算单元,在流水线处理器中支持下面的 RV32F 指令。

  • fadd.s, fsub.s
  • fcvt.s.w, fcvt.w.s

你可以根据需要设定指令的舍入模式(视作常量,而无需 CPU 保存)。同样地,浮点运算的实现均不允许使用 IP 核。

为了验证正确性,你需要为这些指令设计合适的测试汇编程序,最后上板运行比对结果。仿真框架目前暂不支持对于浮点指令的测试。

说明

上述四条指令是浮点运算的最小单元。如果你希望更便捷地编写测试代码,可以自行添加其他浮点指令的支持,我们会提供额外的奖励分数。

任务 3:高速缓存

Task 3

请将 Lab5 设计的数据高速缓存接入流水线。注意:目前 PDU 内置的存储器是没有读写延迟的,为了与 Lab5 的 Cache 适配,你需要修改部分框架代码。

说明

本项的难度较高。如果你不想使用 Lab5 的框架,我们也提供了往年的框架补充文件以及快速排序供大家参考。注意:本次实验只需要接入数据高速缓存。

任务 4:分支预测

Task 4

Lab4 的流水线 CPU 在遇到需要跳转的分支指令时,需要冲刷 IF、ID 段的两条指令,对处理器的性能产生很大影响。分支预测技术是指处理器在 IF 阶段预测分支的跳转与否以及跳转目标地址,根据预测结果来实现不间断的指令流,从而让处理器的 CPI 接近理想情况中的 1。

请结合相关的资料,实现下面的内容:

  1. 基于局部历史的分支预测

    设计 BHT 与 PHT 的结构,并接入流水线 CPU。正确修改预测失败后流水线与分支预测器的相关内容。

  2. 基于全局历史的分支预测以及竞争处理

    设计全局预测器的结构,并设计算法处理全局预测与局部预测结果不一致时的竞争关系,以及对于全局预测器的实时修正。

你可以通过提供的矩阵乘法程序检验分支预测的效果。

实验检查与提交

本次实验布置时间为 2025-05-21,持续两周。相应的 DDL 节点如下:

检查 DDL 报告提交 DDL
2025-06-04 21:00 2025-06-11 23:59

检查与报告延迟一周以内(含)的,至多只能得到 80% 分数;延迟一周以上、两周以内(含)的,至多只能得到 60% 分数;延迟超过两周的不得分。

提醒

实验的 DDL 为当天晚上 21:00。助教有权利在 21:00 准时停止检查,请大家合理安排好自己的时间。

关于实验报告

实验报告需要大家提交 PDF 格式。我们推荐大家使用 Markdown 或者 Latex 撰写实验报告,这样可以直接导出为 PDF。大家也可以使用 Word、WPS 等进行报告撰写,最后转换为 PDF 格式。我们不推荐也不拒绝大家手写实验报告,但请将其拍照扫描成 PDF 文件后再上传。我们不接受任何因为文件格式错误而导致成绩异常的申诉请求!

在实验报告中,你需要给出每一项任务的答案,并附上必要的说明过程(或截图)。

特别地:实验报告的字数和排版与最终得分无关。影响得分的仅有内容正确性与完整性。

实验报告请提交至 BB 平台。

评论