在单周期32位MIPS处理器中如何查找指令执行后的信号值? [已关闭]

问题描述 投票:0回答:1

考虑单周期 32 位 MIPS 的以下数据路径 处理器。

Datapath for a single-cycle 32-bit MIPS
processor

假设以下程序中正在执行lw指令:

lui $t2,0x3f 
ori $t2,$t2,0x11 
lw $t8,4($t2) 

说明

lui
位于地址
0x40004044
。那么什么是 当
lw
指令为 A、B、C、D 和 E 的信号值 被处决?对于每个信号,用整数或 对于无法确定的信号值,写入未知 具有给定信息的精确值。

如何解决这个问题?我已经得到了答案,但我不知道如何解决实际问题以获得这些答案:

信号值为

A = 24
B = 0x003f0011
C = 未知
D = 0x40004060
E = 0x4000404C

mips cpu cpu-architecture
1个回答
2
投票

首先,由于这是一个单周期处理器,因此在感兴趣的

lw
之前有指令这一事实,仅影响寄存器(包括 PC)中的值,而不影响
lw
执行时的控制信号。

如果

lui
指令存储在
0x40004044
,则
ori
存储在
0x40004048
,而
lw
存储在
0x4000404C
。因此,当
lw
执行时,当前PC值为
0x4000404C

那么,让我们从

E
开始,它是一个PC值:
0x4000404C
lw
指令的位置。您可以看到这一行从 PC 寄存器出来,进入指令存储器,这是对
lw
指令位的提取。该 PC 值也进入增量电路,该电路将 PC 值加 4,以便顺序执行下一条指令。

接下来,

A
lw
指令的目标寄存器号。我们怎么知道呢?这是一个“指令解码”的问题。 lw指令具有I-Type格式。这意味着
rs
rt
字段是相关的。它执行
R[rt] = M[R[rs]+SignExtImm]
rs
字段占用比特25:21并且
rt
字段占用比特20:16。因此,在
lw $t8,4($t2)
中,
$t8
rt
,而从
$t8
的友好名称我们可以知道
$24
的实际寄存器编号值,因此24基十(即24
10
),通过只需在寄存器名称表中查找即可。

B

值是寄存器的内容,其编号称为源寄存器

A1
,位25:21又名
rs
,此处为
$t2
。这个值,即寄存器
$t2
的内容,可以通过前面2条指令的执行来理解,这两条指令形成了
$t2
的32位地址,即
0x3f0011

C

是数据存储器读取操作的输出。它是内存位置

0x3f0015
的值(根据寻址模式,来自
0x3f0011
+ 4)。由于这是一个奇怪的地址,因此它很可能会出错而不是产生一些值。如果没有出现故障,则要确定该值,您必须获得存储在从
0x3f0015
开始的 4 个内存位置中的值。

D

是分支目标的计算,就好像指令是分支一样——然而它不是分支,但尽管如此,硬件只会计算分支目标地址,然后将其丢弃。在许多情况下,硬件的工作原理如下:计算我们不一定知道相关的东西,尽管计算是并行完成的,以防万一,而不是等到真正知道该值是否相关或相关时才计算它不。

这个值很简单(4 

lw $t8, 4($t2)

,加上 << 2), where the 4 comes from the 4 in

lw
的 PC 值/位置(加上 4,因为另一个输入是 PC 后增量 4)。因此,
0x0400404c
+ 4 + (4
0x04004060
) .<<2) =
    

© www.soinside.com 2019 - 2024. All rights reserved.