建筑模拟器中的流水线

Pipelining in Architectural Simulators

所以我正在研究架构模拟器(主要是简单标量)来弄清楚微处理器内部到底发生了什么。我注意到的一件有趣的事情是,整个管道都是倒着写的!也就是说,在纯顺序的 while 循环中,回写阶段出现在发出阶段之前,发出阶段出现在解码阶段之前,依此类推。

这有什么意义?假设一个假设的 fetch() 阶段的输出存储在一个共享缓冲区 ('latch') 中,该缓冲区由 decode() 阶段的输入访问。因为它是一个纯顺序的 while 循环,所以我看不出这个 latch/buffer 会被覆盖的问题。然而,像 this 这样的问题的答案:声称反向模拟管道以某种方式避免了这种情况 'problem'?一些 insight/guidance 方向正确的人将不胜感激!

我不太了解 Simplescalar,但我在其他建筑模拟器中看到过这样做。

流水线的外循环应该代表处理器的一个周期。想象这是第一个循环——为简单起见——前端的宽度为 1。如果每个阶段都按照fetchcommmit的顺序执行会怎样?

cycles 1
- fetch: instruction 1 (place it in fetch/decode latch)
- decode: instruction 1 (place it in decode/rename latch)
- rename: instruction 1 (place it in rename/dispach latch)
- dispatch: instruction 1 (place it in issue queue)
- issue: instruction 1
etc...

您在这里没有模拟任何有用的东西,因为这不是管道。当循环按照 commitfetch 的顺序执行每个阶段时会发生什么?

cycle 1
- issue: noop
- dispatch: noop
- rename: noop
- decode: noop
- fetch: instruction 1 (place it in fetch/decode latch)

cycle 2
- issue: noop
- dispatch: noop
- rename: noop
- decode: instruction 1 (place it in decode/rename latch)
- fetch: instruction 2 (place it in fetch/decode latch)

这不是一个很复杂的想法,但它有助于简化模拟器。