寄存器堆实验

实验目的

  1. 理解寄存器堆的电路结构和功能特性。

  2. 学会使用Digital仿真软件的层次化设计方法。

  3. 学会使用Digital仿真软件的探测器、分线器、常量等组件。

实验原理

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

双端口寄存器堆

图 1是双端口寄存器堆的电路结构。其中RA(Read Address)表示读端口地址,RD(Read Data)表示读端口数据;WA(Write Address)表示写端口地址,WD(Write Data)表示写端口数据;WE(Write Enable)是写使能,Clk是写时钟。

双端口寄存器堆
图 1. 双端口寄存器堆的框图

根据图 1用Digital仿真软件设计的电路图如图 2所示。

双端口寄存器堆电路图
图 2. 双端口寄存器堆电路图

说明如下。

  1. 四个4位的寄存器

    R0~R3寄存器使用曾在触发器和寄存器实验学习过的寄存器组件,可从菜单“Components/组件 ➤ Memory/存储器 ➤ Register/寄存器”找到该组件,将数据位数设置为4。

    为便于观察寄存器的值,在寄存器的Q输出端放置了探测器组件,该组件的介绍见第一章Digital仿真软件使用指南“几个有用的组件”。

  2. 2-4译码器

    使用译码器实验完成的2-4译码器作为子电路。 有关添加子电路的方法,请参考第一章Digital仿真软件使用指南“层次化设计”。

    图 2写端口地址WA使用一个2位的输入组件,需要用分线器组件将2位的WA拆分为两个1位的导线,再连接到译码器的A1、A0。分线器组件的介绍见第一章Digital仿真软件使用指南“几个有用的组件”。

  3. 多路选择器

    多路选择器实验中使用过多路器组件作为2选1多路器,这里需要4选1多路器,应将选择位的位数设置为2。

  4. 使用时钟输入组件作为Clk输入

    时钟输入组件及其用法见第一章Digital仿真软件使用指南“时序电路仿真”。

三端口寄存器堆

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

三端口寄存器堆
图 3. 三端口寄存器堆的框图

图 1相比,有两个区别:

  1. 增加了一组读端口

    RA1、RD1为读端口1,RA2、RD2为读端口2。

    读端口1和读端口2均可读出R0~R3四个寄存器中的某一个寄存器的值。 不要误解为RD1只能输出R1的值,RD2只能输出R2的值。

  2. R0寄存器的值恒为0

    在RISC指令系统中,通常要求R0恒为0。为了实现这一要求,用常数“0”代替R0寄存器作为4选1多路选择器0通道的输入,图 3中R0寄存器的虚线表示其实际并不存在。

    虽然Digital仿真软件中有一个现成的寄存器堆组件(位于“Components/组件 ➤ Memory/存储器 ➤ RAM ➤ Register File”),但是它的R0寄存器是可写入的,不具备恒为零的特性。

实验任务

设计任务

理解图 3结构,设计该三端口寄存器堆。

常数“0”可以用常量组件产生,位数与寄存器的字长相同,即4位。常量组件的介绍见“几个有用的组件”。

验证任务

通过仿真验证寄存器堆的功能,并保存仿真过程数据文件。

  1. 验证R0恒为0

    尝试将一个非零数据写入R0寄存器,检查R0是否被改变。

  2. 数据写入寄存器堆

    将不同的数据存入R1、R2、R3寄存器。

  3. 从寄存器堆读出数据

    分别从RD1和RD2读出R0、R1、R2、R3的值。

实验结果分析

对仿真过程数据进行分析,从中体现对图 3电路原理的理解。