程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了确定 CPU 中寄存器的值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

开发过程中遇到确定 CPU 中寄存器的值的问题如何解决?下面主要结合日常开发的经验,给出你关于确定 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 的值?:
@H_616_17@


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

解决方法

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

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

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

看看这篇文章,解释一些关于时序的事情: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)。@H_616_17@

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

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

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

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

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

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

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

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


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

大佬总结

以上是大佬教程为你收集整理的确定 CPU 中寄存器的值全部内容,希望文章能够帮你解决确定 CPU 中寄存器的值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。