- IF
- IC
- MemCtrl
- RegFile
- Decode
- ROB
- RS
- LSB
- ALU
- line
- instruction 从Ifetch中取出,到达Decoder,Decoder解析并发送给ROB,ROB将结果再发送给RS与LSB,并附上ROB's order。
- 输出信号的同时一定要输出一个flag代表当前值有效吗?虽然这样做比较保险的样子,在没有很明白的时候先这样实现
- (from LSB) 如何处理多个模块同时调用memctrl的问题?
- 005
- 000
- 001
2022/12/2 初步完成全部连线以及各模块功能代码 💁🏻 2022/12/13 开始调IF部分 2022/12/14 还是IF部分,增加bc操作 2022/12/17 重构了ROB,LSB,RS之间的关系 2022/12/23 first passed
- 需要对各模块进行initial操作
- 还是Eclipse好用,除了操作比较诡异
- 对于现有的branch采取halt处理,在ROB commit结果后解除halt状态
- ALU负责广播并更新ROB/RS/LSB中的ready值,ROB负责更新regfile以及LSB中STORE指令
- ic_flag一直是true,导致两个指令衔接的空档周期也会读入指令,产生错误
- S指令不需要放入ROB与RS中
- L指令需要放入ROB,不需要放入RS中
- initial块的作用与rst情况等价
- IF stall 与 ROB full同时发生 可能导致branch无法放入ROB从而一直stall
- ROB commit的时候恰好遇到了instruction in,commit 了之后val不可以设置成0 跳转错误时 信号由ROB即将commit branch指令时发出:
- 清空ROB
- 清空branch下的LSB
- 清空RS
- 修改pc
- 当前pc得到具体ins之后才会有下一条pc,IC会在返回ins的时候将flag设为True,且只能维持一个clk,否则pc可能多跳