实现多周期数据路径的指令

时间:2016-10-06 21:52:09

标签: cpu-architecture microprocessors

我试图自己学习一些计算机架构,但我有点卡在数据路径部分。我无法弄清楚如何将lui(立即加载立即)和ldi(立即加载数据)实现到下面的图片中,如果有人能帮助我并解释他们能做到的最好,我会非常高兴!

很抱歉,如果这不适合此论坛,但我在stackoverflow上看到了其他一些内容。 enter image description here

1 个答案:

答案 0 :(得分:0)

<强>声明
我不是EE或CPU设计师 请务必向您的教授或助教提出有关课程材料的问题。

lui编码为

31       26 25     21 20     16 15                            0
+---------+ +-------+ +-------+ +-----------------------------+
|   0xf   | |  d.c. | |  RT   | |          IMMEDIATE          | 
+---------+ +-------+ +-------+ +-----------------------------+
   6 bits    5 bits    5 bits               16 bits

其中

  

D.C。 =不在乎。允许任何值   RT =注册目标。要写入的寄存器。
  IMMEDIATE =要加载的常量。

执行如下:

该指令已加载到指令寄存器中,因此:

  • 指令[31-26] ,转发给** Op [5-0] *,是 0xf

  • 指令[25-21] ,转发给读取寄存器1 ,将被忽略,因此必须是任何后续数据流,必须忽略,因此右侧的多路复用器必须选择源0.因此 AluSrcA = 0

  • 指令[20-16] 转发至读取寄存器2 写入寄存器,因为lui只写,输出 B 必须被忽略,因此ALU的较低多路复用器不能使用源。此外,必须将写入寄存器之前的多路复用器编程为选择源0,因此 RegDst = 0

  • 指令[15-0] 遵循各种数据路径。第一个是在原理图的上半部分,它不会循环回寄存器文件(通过写入数据),因此可以忽略它。
    较低的数据路径将指令[15-0] 作为较低ALU多路复用器的源2和3(第一个是符号扩展,第二个是符号扩展并乘以4)。 所有这些路径都进入了ALU,所以从理论上讲,所有这些路径都可以实现lui(符号扩展和移位不是问题,让自己相信这一点。)
    我相信使用源2更加惯用,所以 ALUsrcB = 2
    ALU的结果在写入数据之前返回到多路复用器,因此 MemToReg = 0 ,当然 RegWrite = 1 ALUop 必须是将 SrcB 左移16的值。

  • 没有内存写入或读取,因此 MemWrite MemRead 均为0.

其他信号在流水线的其他阶段使用,特别是在提取 1 期间必须更新PC,这由 PCWrite PCWriteCond涵盖 IorD PCSource IRWrite ,以及 B ALU操作数的输入1(价值4)。

1 这个CPU似乎只有一个ALU,因此必须注意避免在交错不同阶段时停止。特别是EX和IF阶段不能同时执行,所以一段时间内指令停止或者CPU根本没有流水线。