微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

确定 CPU 中寄存器的值

如何解决确定 CPU 中寄存器的值

enter image description here 在特定的时钟周期内,考虑图中所示的 cpu
假设存在以下初始数据(所有值均以十进制显示):
x3=72,x4=40,x8=0,x16=24,x17=56,x18=48,x20=40,x24=80
假设下面5条指令在流水线中
(第一列是指令的地址;所有值都以十进制显示):
66992 beq x17,x16,24
66996 addi x17,x8,8
67000 sd x20,40(x24)
67004 子 x10,x4,x18
67008 ori x27,x3,16
在有问题的循环中,上述列表第一行的指令在
回写阶段,上表最后一行的指令处于取指
阶段。
如何确定 L1 、 L2 和 L3 的值?:


我不知道如何开始解决此类问题。就像 L1 是关于
读取数据 1. 但是它会从哪里读取数据。好像
L1连接指令[31-0]、指令[30,14-12]和
说明[11-7]。所以它会从这个指令之一读取数据
如果我考虑到 or x21,x19 处于指令提取阶段
的事实,那么 L1 应该包含 x3 = 72
的值 不知道对不对

解决方法

行:读寄存器 1、读寄存器 2、写寄存器都是 5 位行,它们是来自指令字段的寄存器名称(编号)。写入数据是来自较早指令(在图中的后面)的 64 位内联数据。

您必须了解处理器中解码的一些基础知识以及每条指令的作用才能了解这一点。

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

看看这篇文章,解释一些关于时序的事情:https://www.codementor.io/@erikeidt/logic-block-diagrams-w6zxr6sp6. 特别注意,提供读取寄存器 1、2 和写入寄存器的指令字段标有您可以关联的指令字段位位置RISC V 指令格式,例如:https://inst.eecs.berkeley.edu/~cs61c/resources/su18_lec/Lecture7.pdf(有关格式的概述,请参见幻灯片 8)。

将这两条信息放在一起,告诉我们,例如Read register 2来自指令字段24:20,它对应于所谓的R-Type,S的rs2字段-Type 和 SB 型指令。

这有点飞跃,但 L1 上的对应值是在由 L2 命名的寄存器中找到的寄存器(寄存器文件)中查找的 64 位(假设为 RV64)值(在查找时执行)。

因此,例如,如果您对 I-Type 指令与 R-Type 指令的工作方式有所不同,那么您将了解一些数据路径上的内容。

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

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

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

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

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


是的,对于带有寄存器 orix3,L2 将是 3(对于 x3),L1 将是 72。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。