繁体   English   中英

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

[英]Data path on a single-cycle 32-bit MIPS processor

我正在做作业,我需要在下面的数据路径上回答标记为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)

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

前面:

我不确定该如何继续前进,希望有人能启发我?

在此处输入图片说明

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”行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM