跳到主要内容

前端总体结构

前端的任务不是简单地“从 PC 读指令”,而是稳定地产生足够宽、方向正确、边界明确的指令流,同时为后端保留恢复所需的上下文。

四个关键职责​

  1. 选 PC:预测器给出下一取指块地址。
  2. 取字节:ICache 与 ITLB 将虚拟地址转换并返回指令数据。
  3. 识别控制流:预译码识别分支、调用、返回和跨边界指令。
  4. 保存上下文:FTQ 关联预测、取指、后端重定向与训练。

源码入口​

  • frontend/Frontend.scala:前端 LazyModule 与主要子模块连接。
  • frontend/BPU.scala:预测流水与恢复。
  • frontend/NewFtq.scala:FTQ 表项、入队、提交和更新。
  • frontend/FrontendBundle.scala:前端接口语义。
  • frontend/icache/ICache.scala:ICache arrays 与顶层。

前端性能的三个限制​

  • 预测带宽/准确率:方向或目标错会产生错误路径指令。
  • 供给带宽:即使预测正确,ICache miss、TLB miss 或跨行也会断供。
  • 后端背压:Instruction Buffer 满后,压力会逐级返回前端。

阅读任务​

在 Frontend.scala 里标出 BPU、FTQ、IFU 和 ICache 的实例。为每对相邻模块写出“请求”和“响应”的语义,不需要抄具体信号名。