单周期数据通路实验

本实验是选做实验。

实验目的

1.理解单周期数据通路的组成结构及其信息加工过程。

2.掌握SystemVerilog的package、结构体、枚举等语法知识。

实验内容和要求

“周期”是指时钟周期,如果完成一次运算只需要一个时钟周期,就称为单周期数据通路;需要几个时钟周期才能完成一次运算则称为多周期数据通路。单周期数据通路很容易演变为流水线数据通路,多为RISC处理器采用。本项目设计的单周期数据通路将应用于RISC-V CPU。

参考设计

实验材料给出了图 1单周期数据通路的代码。该数据通路使用了前面实验中的三端口寄存器堆,2个读端口向ALU的两个输入端提供运算数据,1个写端口接收ALU的运算结果,可以一个周期完成读数据、运算、存结果;ALU使用前面算术逻辑单元实验的参考设计。

前面实验中ALU和寄存器堆都是直接写在VirtualBoard模块中的,本实验将它们写成独立的模块,并且字长采用参数定义,以便在后面的CPU设计中重复使用。

范例:单周期数据通路 150dpi
图 1. 参考设计:单周期数据通路

参考设计代码使用了SystemVerilog的package、结构体、枚举等描述方法,是本项目要掌握的内容之一。

设计任务

单周期数据通路300dpi
图 2. 设计任务:单周期数据通路

用前面实验中自己设计的ALU和三端口寄存器堆封装成模块,替换参考设计的相应模块。ALU模块的端口定义如下。

module ALU
#(parameter N=4)
(
input logic [N-1:0] iX, iY,
input logic [3:0] iALUop,
output logic [N-1:0]oF,
output defs::t_cmp oCmp
);

三端口寄存器堆模块的端口定义如下。

module RegFile
#(parameter N=4)
(
input logic Clk,
input logic iWE,
input logic [1:0] iWA, iRA1, iRA2,
input logic [N-1:0] iWD,
output logic [N-1:0] oRD1, oRD2
);

完成以下验证操作。

1)将2个数据存入R1、R2寄存器

数据通过Data开关设置。从数据通路图可以看出,Data并没有直接连在寄存器堆的写端口,而是经过多路器后送到了ALU的Y输入端;为了将Data送到寄存器堆的写端口,必须经过ALU。在前面寄存器堆的实验中已经设计R0寄存器的值恒为0,可以用ALU将Data加上R0寄存器值,将Data传送到寄存器堆的写端口。

2)完成ALU运算

运算数是R1、R2或者R1、Data。