单周期32位MIPS处理器上的数据路径

时间:2019-05-18 22:07:04

标签: assembly mips

我正在做一个作业,我需要在下面的数据路径上回答标记为A,B,C,D,E的信号值,该数据路径是单周期32位MIPS处理器,但是我有一些疑问到D和E,

假定前四行已执行,并且处理器当前正在执行lw指令。第一个addi 指令位于内存地址0x00040210

addi $t0,$zero,0x3ff0
addi $t0,$t0,16
sw $t0,-8($t0)
addi $t0,$t0,12
lw $s2,-20($t0)

对于D:

所以它是程序计数器之后的路径,并且我们已经执行了四条指令,第一条指令从地址0x00040210开始指向:

address 0x00040210: addi $t0,$zero,0x3ff0
address 0x00040214: addi $t0,$t0,16
address 0x00040218: sw $t0,-8($t0)
address ???: addi $t0,$t0,12
address ???: lw $s2,-20($t0)

我停留在标有地址的问题上,如何从那里算地址?

对于E:

我不确定我应该怎么去那里,希望有人能启发我?

enter image description here

1 个答案:

答案 0 :(得分:1)

D:

有一个加法器(原理图中字母“ D”上方)将常数4添加到PC。

这意味着“ D”行将始终保持值PC+4-即使当前指令是跳转或分支指令。

如果一条指令不是跳转指令或分支指令,则“ D”线将通过原理图左上方的两个多路复用器反馈到PC寄存器的输入。

这意味着PC的下一个值将是PC+4的旧值,除非执行了跳转或分支指令。

顺便说一句:

原理图中的CPU不能像真正的MIPS CPU一样工作(就像十年前在WLAN路由器中发现的那样)。

如果我正确理解了原理图,则只有两条指令可以执行跳转/跳转:j的变体和beq(或beqz)之一(两种变体)不使用延迟槽)。

使用这样的CPU,您将无法进行子例程调用(函数调用),因为没有指令“跳回”调用函数。

E:

“ E”是某些多路复用器的输出。如果您不执行“ MemToReg”指令(我想是指lw),那么“ B”信号将通过多路复用器馈入。

换句话说:如果当前指令不是lw,则“ E”和“ B”相等。

如果指令为lw,则“ E”是存储在RAM中地址“ B”的值。

编辑

  

对于E,仍然不确定如何获得结果

这实际上是编程而不是电子方面的问题。让我们看看您的程序:

  

addi $t0,$zero,0x3ff0

现在t0包含0x3FF0

  

addi $t0,$t0,16

现在t0包含0x4000

  

sw $t0,-8($t0)

将值0x4000写入RAM地址0x3FF8(注:0x4000-8 = 0x3FF8)

  

addi $t0,$t0,12

现在t0包含0x400C

  

lw $s2,-20($t0)

从地址0x3FF8读取一个字(注:0x400C-20 = 0x3FF8)。

上面的两条指令,已将值0x4000写入地址0x3FF8。

因此,从RAM读取值0x4000。因此,值0x4000通过多路复用器馈送到“ E”行。