需要实现的功能(必做)
bool Backend::dispatchInstruction
- 检查 ROB 是否已满
- 检查对应的保留站是否已满
- 插入 ROB
- 插入保留站
- 更新寄存器占用情况
- 插入成功返回 true, 失败返回 false, 请保证返回 false 时没有副作用
bool Backend::commitInstruction
- 完成指令提交
- (Optional) 更新 bpu
- ROB 弹出
- 若 mispredict,跳转,清空
- 若提交 Exit,返回 true,否则返回 false
void ReservationStation::insertInstruction
- 若有 slot 空闲,执行插入
- 插入时,设置两个寄存器读取端口是否已经唤醒,以及对应值,必要时从 ROB 中读取。
- 寄存器设置 busy
- slot busy,返回
需要保证保留站内部的指令顺序,供发射 Store 指令时使用。
void ReservationStation::wakeup
- 查看每个 slot 的寄存器读取端口是否已经唤醒
- 如果未唤醒,比对信息,尝试唤醒指令
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日
作者: