timebuffer.rst 1.2 KB

123456789101112131415161718192021222324
  1. Gem5 的 TimeBuffer 数据结构
  2. ==================================
  3. 读 O3CPU 的时候,我们遇到一个叫 TimeBuffer 的数据结构。从名字可以看出来,
  4. 这个数据结构用于模拟数据在一定延迟之下,在部件之间的传送。同样在 MinorCPU 中,
  5. 也有一个叫 Latch 的结构,事实上是对 TimeBuffer 进行了一个封装。
  6. 通过读 TimeBuffer 的代码,可以发现,其实它就是构造了一个环形队列,同时用 wire
  7. 指针可以访问这个队列里的每一个元素。在每个时间单位的 advance() 操作之后,该队列的
  8. 内部指针自增,使得 wire 指向的内容自动变为一个时间单位后的内容。
  9. 我把 timebuf.hh 复制出来单独使用,写了一个小的测试程序 `<testbuf.cpp>`__.
  10. 可以看出,我的 fromPrev wire 用于访问 3 个时间单位之前写入至 TimeBuffer 的数据,
  11. 从而在这个 TimeBuffer advance() 3 次之后,fromPrev 就得到通过 toNext wire 写进去的数据,
  12. 再 advance() 一次,fromPrev 就不再指向这个数据了。
  13. 此外,把代码改为以下形式结果相同::
  14. TimeBuffer<MyClass> mybuf(0, 3);
  15. TimeBuffer<MyClass>::wire toNext = mybuf.getWire(3);
  16. TimeBuffer<MyClass>::wire fromPrev = mybuf.getWire(0);