实验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 实验步骤
- 使用开发工具建立工程。
- 根据书上的 DataPath 或自己设计的 DataPath 搭建完整的流水线 CPU。
- 进行仿真测试,以检验 CPU 基本功能。
- 进行上板测试,以检验 CPU 设计规范。
4. 思考题
在你的设计中,本实验测试文件中的 nop 数量是否多于每条指令所需的延迟周期数?
又是否存在出现冲突但是没有给足 nop 的情况?
请计算每条指令间实际所需要的 nop 数量,并对你的 coe 文件进行修改,使之正确地运行出相应的结果。