单周期数据通路实验(Ⅱ)

实验目的

1.理解单周期数据通路的组成结构。

2.掌握单周期数据通路信息加工过程。

3.锻炼分析问题与解决问题的能力。

实验原理

图 1是本实验的单周期数据通路,该数据通路使用了前面实验中的ALU、三端口寄存器堆和RAM存储器。 ALU输入端X的运算数据来自寄存器堆的RD1读端口,另一个输入端Y的运算数据可以来自寄存器堆的RD2读端口,或者来自立即数;ALU的运算结果F可以作为寄存器堆的写数据WD,也可以作为存储器的地址A。 DI是存储器的数据输入端口,写入存储器的数据由寄存器堆的RD2读端口提供。 寄存器堆写端口WD的数据除了可以来自ALU的运算结果,也可以来自存储器的读出数据DO。 该数据通路可以在一个周期内完成一次完整的ALU运算或者一次存储器访问,这里所说的“完整的ALU运算”包括从寄存器堆读数据、ALU运算、运算结果保存到寄存器堆。

单周期数据通路
图 1. 单周期数据通路

实验任务

  1. 设计

    用Digital仿真软件按照图 1绘制电路图。 ALU三端口寄存器堆使用前面实验完成的。 存储器使用存储器实验中已经熟悉的RAM组件。

    图中存储器的OE端口也可以固定接常量1,即始终读出。
  2. 仿真

    通过仿真验证数据通路,并保存仿真过程数据文件。

    1. 数据写入寄存器堆

      将2个常数存入R1、R2寄存器。

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

      存入的常数应有助于判别下面将要验证的各种运算结果是否正确,可参考加减运算电路实验

      可以手动操作完成验证,或者编写测试用例(test case)进行电路测试。 例 1给出了将“5”存入R1寄存器的测试数据。

      例 1. 将“5”存入R1寄存器
      Clk RegWr WA RA1 RA2 IM  Ysel M  S1 S0  MemWr WDsel F   S  Z  C  O
      C   1     1  0   0   0x5 1    0  0  0   0     0     0x5 0  0  0  0 (1)
      0   0     0  1   0   0   0    0  0  0   0     0     0x5 0  0  0  0 (2)
      1 将“5”写入R1寄存器;
      2 读出R1。
    2. 寄存器数据写入RAM

      将R1和R2寄存器的内容,分别写入到存储器的0号单元和1号单元中。即

      R1 → Mem[0];

      R2 → Mem[1];

    3. 完成各种ALU运算,并将结果存入存储器的2~7号单元。即

      R1 + R2 → R3; R3 → Mem[2];

      R1 − R2 → R3; R3 → Mem[3];

      R1 & R2 → R3; R3 → Mem[4];

      R1 | R2 → R3; R3 → Mem[5];

      R1 ⊕ R2 → R3; R3 → Mem[6];

      R2 ⊕ 0b1111 → R3; R3 → Mem[7];

    4. 依次读出存储器的0~7号单元内容并验证结果是否正确。

    5. 设计更复杂的数据通路操作。

      例如,将两个存储单元的内容相加,结果存入另一存储单元。

  3. 实验结果分析

    对实验结果进行详细分析说明,并给出结论。

    若结果与预期不符,尝试独立分析故障现象并排除故障,锻炼分析问题与解决问题的能力。