只有一条addi指令的CPU设计

实验目的

(1)熟悉CPU实验的代码框架和参考设计;

(2)初步掌握CPU实验的调试方法。

实验原理

实验材料中给出了图 1电路的HDL代码,它仅支持addi rd,rs1,imm指令。

SingleCycleRISCV_07_SC0_300dpi
图 1. 仅支持addi rd,rs1,imm指令的数据通路示例

实验步骤

1. 创建CPU实验工程

CPU实验的工程框架与前面实验不同,实验材料中提供了相关的文件。用Quartus Prime打开project文件夹中的RV_Project.qpf工程文件,该工程已经包含了CPU实验的工程框架的基础文件。如果因为Quartus软件版本问题无法直接使用RV_Project.qpf,project文件夹中包含了一个create_project_rv_pocket.tcl文件以及使用说明“用TCL文件自动创建Quartus工程”,按照说明创建工程。

2. 添加CPU设计文件

将verilog文件夹下的所有源文件添加到工程,这些文件是实现addi指令的参考设计;但是没有提供寄存器堆模块的设计文件,须将前面存储器实验自己设计的三端口寄存器堆模块添加到工程中。注意,definitions.sv要放在文件列表的最上面,Quartus按照列表的顺序编译;或者在引用相关定义的文件中用`include 包含"definitions.sv"

3. 在实验系统上运行

编译Quartus工程后在实验系统上运行以下指令。

	addi x5, x0, 100
	addi x6, x5, -1
	addi x7, x6, 0

分析运行结果,发现第2条指令的运算结果80000063是错误的。

4. 添加观察信号和观察数据

添加一些观察的数据和控制信号,如rs1寄存器、立即数,控制器输出的立即数类型等等,以便判断引起运算错误的原因。注意,虚拟面板和设计代码要同时添加,具体可观看辅导视频的演示。

5. 找出设计错误并改正

重新编译后再次运行,可以看出错误是由立即数引起的。分析立即数生成模块的代码,找出其中的错误,改正后在实验系统上验证。