[英]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.