Skip to content

实验1-2: 指令扩展

1. 实验目的

  • 扩展指令,理解不同类型指令在流水线中的运作差异
  • 实现功能基本完善的流水线 CPU

2. 实验环境

  • HDL:Verilog
  • IDE:Vivado
  • 开发板:Nexys A7

3. 实验要求和步骤

3.1 实验要求

在流水线 CPU 中加入以下的 RV32I 指令:

  • lui
  • jal, jalr
  • beq, bne
  • lw, sw
  • addi, slti, xori, ori, andi, srli, srai
  • add, sub, sll, slt, sra, or, xor, and

RISC-V 相关的指令可以在官网上找到相应的编码信息和介绍。实现上述的 RV32I 指令也需要同学们对 RISC-V 的指令编码有深刻的认识,有余力的同学可以自主实现其他不做要求的 RV32I 指令。

请注意,我们会保证本次实验的测试程序不存在数据竞争,同学们无需考虑相关的设计问题。

3.2 实验步骤

  1. 使用开发工具建立工程。
  2. 根据书上的 DataPath 或自己设计的 DataPath 搭建完整的流水线 CPU。
  3. 进行仿真测试,以检验 CPU 基本功能。
  4. 进行上板测试,以检验 CPU 设计规范。

4. 思考题

在你的设计中,本实验测试文件中的 nop 数量是否多于每条指令所需的延迟周期数?

又是否存在出现冲突但是没有给足 nop 的情况?

请计算每条指令间实际所需要的 nop 数量,并对你的 coe 文件进行修改,使之正确地运行出相应的结果。