确定CPU中寄存器的值



在此处输入图像描述在特定的时钟周期内,请考虑图中所示的CPU
假设存在以下初始数据(所有值均以十进制显示(:
x3=72,x4=40,x8=0,x16=24,x17=56,x18=48,x20=40,x24=80
假设管道中有以下五条指令
,x18
67008orix27,x3,16
在所讨论的周期中,上述列表第一行的指令处于
写回阶段,而上述列表最后一行的指令则处于指令提取
阶段
如何确定L1、L2和L3的值?:


我不知道如何开始解决这类问题。类似L1禁用
读取数据1。但它将从哪里读取数据。似乎
L1连接到指令[31-0]、指令[30,14-12]和
指令[11-7]。因此它将从其中一条指令中读取数据
如果我仔细考虑or x21,x3,x19处于指令提取阶段
,那么L1应该包含x3=72
不确定这是否是正确的

行:读取寄存器1、读取寄存器2、写入寄存器都是来自指令字段的寄存器名(数字(的5位行。写入数据是一个64位的行,它来自前面的指令(在图的后面(。

你必须了解处理器中解码的一些基础知识,以及每条指令的作用。

不幸的是,您的图表非常抽象——特别是,例如,L2线没有标记。

看看这篇文章,它解释了一些关于时间的事情:https://www.codementor.io/@erikeidt/logic-block-digrams-w6zxr6sp6。特别需要注意的是,为读取寄存器1、2和写入寄存器提供的指令字段标有指令字段位位置,您可以在这样的演示中与RISC V指令格式相关:https://inst.eecs.berkeley.edu/~cs61c/resources/su18_lec/Analocation7.pdf(有关格式概述,请参见幻灯片8(。

这两条信息加在一起告诉我们,例如,读取寄存器2来自指令字段24:20,它对应于R-Type、S-Type和SB类型指令的rs2字段。

这是一个跳跃的比特,但L1上的对应值是在寄存器(寄存器文件(中查找的64比特(假设RV64(值,该寄存器位于L2命名的寄存器中(执行查找时(。

因此,如果你对I-Type指令与R-Type指令的工作方式有所了解,就会知道其中一些数据路径上有什么。

L3是ALU比较器输出,在一些处理器设计中,它在EX级上输出,以指示两个寄存器是否进行相等比较,并由条件分支指令(beq和bne(使用。

这些图表都是从硬件中实际发生的事情中抽象出来的,因为RISC V的条件分支比==和!=多得多,但是这些图中的许多图是根据原始MIPS改编的,该原始MIPS仅具有用于条件分支的这两个比较器。

L4是一个新的PC值,在进行条件分支时使用。

L5,在这个图中很难看到,但ALU输出被转发到一些MUX,这些MUX选择写入数据的值。

(您的图表还包括流水线寄存器和阶段,许多其他的都没有,某些细节在相应的单循环图表上更容易理解。(


是的,对于具有寄存器x3ori,L2将是3(对于x3(,L1将是72。

最新更新