前端总体结构
前端的任务不是简单地“从 PC 读指令”,而是稳定地产生足够宽、方向正确、边界明确的指令流,同时为后端保留恢复所需的上下文。
四个关键职责
- 选 PC:预测器给出下一取指块地址。
- 取字节:ICache 与 ITLB 将虚拟地址转换并返回指令数据。
- 识别控制流:预译码识别分支、调用、返回和跨边界指令。
- 保存上下文: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 的实例。为每对相邻模块写出“请求”和“响应”的语义,不需要抄具体信号名。