architecture - 确定四个级间寄存器中每一个的最小大小(以位为单位)
问题描述
我不知道如何开始处理这个问题。
我可以阅读的任何提示或参考/视频等可以让我回答这个问题会很好考虑图 1 中显示的多周期 MIPS 数据路径,
它显示了 4 个级间寄存器:IF/ID、ID/EX 、EX/MEM 和 MEM/WB。还要考虑
图中蓝色显示的控制信号。假设 ALUOp 控制信号为
3 位。忽略未显示的控制信号(即控制转发的信号)。确定
四个级间寄存器中每一个的最小大小(以位为单位)
解决方案
他们说我们将把 4 个级间块中的每一个都视为由一个“寄存器”组成,并询问每个级间的这种寄存器有多宽。
您可以相当清楚地看到 IF/ID 级间块有一个“寄存器”,它接收作为输入 - 因此保存:(a) 从指令存储器读取的指令,以及 (b) 程序计数器 +4 计算。由于这些项目 (a,b) 中的每一项都是 32 位宽,因此 IF/ID“寄存器”必须是 64 位宽,以便保存这两个值。(IF/ID 寄存器中似乎没有控制信号。)
ID/EX 级间块还接收 (a) 位程序计数器,(b) 读取数据 1 和 2,(c) 符号扩展立即数,(d)rt
和rd
指令字段,以及 (e) 三个控制信号。因此,请推理它们的宽度并将它们相加以获得 ID/EX 级寄存器的宽度。(请注意,寄存器的 EX 部分有 3 个输出信号,并且文本中说其中一个是 3 位宽……除非另有说明,否则我们将控制信号的 1 位宽度计算在内,因为它们中的大多数都是简单的布尔值.)
总之,计算有多少位进入或离开级间寄存器,这就是那个级间的答案。(输入和输出的位数相等——寄存器只是直接从“输入”(用输入箭头在寄存器左侧绘制)和一个周期的结尾复制位,到开始时的“输出”下一个(用从寄存器右侧出来的箭头绘制的图表)。)
这张图过于简单化了。例如,为了在 EX 阶段实现旁路/转发和/或停顿,rs
也需要从 ID 到 EX 进行通信,但仅rt
显示rd
为共享。MEM阶段还需要旁路/转发,因此也需要指令的各种寄存器字段。
推荐阅读
- scala - 从嵌套地图中获取所有组合键
- mysql - 如何在 MySQL 中对列进行分组并仅显示其中之一
- javafx - 低级双向绑定
- mongodb - 测试 POST(创建 mongo 条目)时,如果没有 DELETE 端点,如何在测试后使用 Jmeter 删除 DB 中的条目?
- gnuplot - 如何在gnuplot中加粗重叠点?
- clearcase - 如何避免 clearTool 中的 rebase 命令弹出一个屏幕?
- python - 在 QStackedWidget 中显示箭头
- windows - 测试厨房:无法在 Windows 上的 .kitchen.yml 中使用 ENV 变量
- jquery - 如何在while循环中使用ajax获取输入值
- javascript - jquery同位素上的多个过滤器