为什么这个问题没有考虑控制器延迟?

Why is the controller latency not accounted for in this question?

建议的答案是 (a.):

a. 30(PC Read)+250(IM)+25(Mux)+150(RF)+25(MUX)+200(ALU)+25(mux)+20(Setup) = 725 ps

b. 30+250+25+150+25+200+250+25+20= 975 ps

c. 30+250+25+150+25+200+250=930 ps

d. 30+250+25+150+25+200+5+5+25+20=735 ps

e. 30+250+50+150+25+20=525 ps

f. 30+250+25+150+25+200+25+20=725ps

g. 975 ps

数据路径

正如您在建议的答案中看到的那样,控制器的延迟从未被考虑在内。同样,符号扩展的延迟也未在“f”部分中考虑。

我对问题“a”部分的解决方案与建议的答案完全相同,但我会为控制器添加 50,对于“f”部分,我还为符号扩展添加 50。

那么建议的答案是否正确?还是我?

您可以计算每个子组件的时间,主要是从左到右计算。从中您可以计算任何周期所需的最长时间,或使用约束进行评估,例如仅考虑 R 型指令。

计算子组件计时的方法是:

  • endTime = startTime + 延迟时间,并且,
  • startTime = max(组件输入的所有结束时间)

我们必须特别考虑图中的后边。它们是需要设置时间但不计入组件输入列表的寄存器写入。此图中有两个后沿,一个用于写入 PC,另一个用于写入寄存器文件。 (它们都从其他数据路径中脱颖而出,因为它们使用从右到左形成循环的 arrows/lines。)这两者都发生在周期结束时,因为时钟上升沿触发从后面捕获数据边缘进入寄存器。

由于 PC 子组件在此周期开始时没有输入,我们可以将其开始时间确定为 0。然后其延迟为 30ps(读取寄存器),因此其结束时间为 0+30ps。

鉴于此,我们可以通过使用 30ps 作为它们的开始时间并添加它们各自的延迟来确定指令存储器和 PC+4 加法器的结束时间。

pc+4 加法器在 30ps 时获得良好的输入,所以这是它的 startTime,它的延迟是 150ps;它在 180ps 时产生良好的输出。

同样,寄存器文件前面的mux在30ps时得到良好的输入,它的延迟是25ps;因此,多路复用器提供了 55ps 的良好输出。

寄存器文件有三个与此处相关的输入,分别附加到结束时间为 30ps、55ps 和 30ps 的组件;因此寄存器文件组件的 startTime 是 55ps...

等等。随着您的深入,您会发现一些较快组件的延迟被其他较慢组件或路径的延迟所隐藏。