跳转至

需要实现的功能(必做)

bool Backend::dispatchInstruction

  1. 检查 ROB 是否已满
  2. 检查对应的保留站是否已满
  3. 插入 ROB
  4. 插入保留站
  5. 更新寄存器占用情况
  6. 插入成功返回 true, 失败返回 false, 请保证返回 false 时没有副作用

bool Backend::commitInstruction

  1. 完成指令提交
  2. (Optional) 更新 bpu
  3. ROB 弹出
  4. 若 mispredict,跳转,清空
  5. 若提交 Exit,返回 true,否则返回 false

void ReservationStation::insertInstruction

  1. 若有 slot 空闲,执行插入
  2. 插入时,设置两个寄存器读取端口是否已经唤醒,以及对应值,必要时从 ROB 中读取。
  3. 寄存器设置 busy
  4. slot busy,返回

需要保证保留站内部的指令顺序,供发射 Store 指令时使用。

void ReservationStation::wakeup

  1. 查看每个 slot 的寄存器读取端口是否已经唤醒
  2. 如果未唤醒,比对信息,尝试唤醒指令

bool ReservationStation::canIssue

检查是否有已经唤醒的指令

注意 Store 指令需要按序发射

IssueSlot ReservationStation::issue

弹出一条完成唤醒的指令,返回发射槽

你需要返回一条 busy 的发射槽!

注意 Store 指令需要按序发射

std::optional<unsigned> StoreBuffer::query

按照地址和顺序查询 store buffer 中“最新”的内容,命中时返回对应数值

void LoadBuffer::check

按照规则查询顺序在该 Store 指令之后,但已经完成推测执行的 Load 指令。

将这些 load 指令的 load buffer 表项设置为 invalid。


最后更新: 2024年2月23日
作者:cuibst