寄存器堆实验
实验原理
CPU内部包含若干个通用寄存器,用于暂存参加运算的数据和中间结果,这些寄存器的集合就称为通用寄存器组(Genral Register Set)。 寄存器组可以设计为单端口、双端口或三端口。单端口是指读出和写入共用同一组地址或数据端口,所以读出和写入不能同时进行,通常应用于多周期的数据通路。而双端口的读、写端口各自独立,在一个周期中可以同时读出和写入。三端口则有两个读端口和一个写端口可以同时操作,通常应用于单周期和流水线数据通路。和早期的处理器相比,现代处理器的通用寄存器的数量更多,一般称为寄存器堆(Register File),也有译为寄存器文件。
双端口寄存器堆
图 1是双端口寄存器堆的电路结构。其中RA(Read Address)表示读端口地址,RD(Read Data)表示读端口数据;WA(Write Address)表示写端口地址,WD(Write Data)表示写端口数据;WE(Write Enable)是写使能,Clk是写时钟。


说明如下。
三端口寄存器堆
图 3是具有2个读端口和1个写端口的三端口寄存器堆的电路结构。

和图 1相比,有两个区别:
-
增加了一组读端口
RA1、RD1为读端口1,RA2、RD2为读端口2。
读端口1和读端口2均可读出R0~R3四个寄存器中的某一个寄存器的值。 不要误解为RD1只能输出R1的值,RD2只能输出R2的值。
-
R0寄存器的值恒为0
在RISC指令系统中,通常要求R0恒为0。为了实现这一要求,用常数“0”代替R0寄存器作为4选1多路选择器0通道的输入,图 3中R0寄存器的虚线表示其实际并不存在。
虽然Digital仿真软件中有一个现成的寄存器堆组件(位于“Components/组件 ➤ Memory/存储器 ➤ RAM ➤ Register File”),但是它的R0寄存器是可写入的,不具备恒为零的特性。