mirror of
https://github.com/handsomezhuzhu/2025-yatcpu.git
synced 2026-02-20 20:10:14 +00:00
lab3跑完
This commit is contained in:
@@ -44,8 +44,15 @@ class Control extends Module {
|
||||
val id_jump_needs_ex_alu = io.jump_instruction_id && io.rd_ex =/= 0.U &&
|
||||
!io.memory_read_enable_ex && // 确保不是load-use hazard
|
||||
(io.rd_ex === io.rs1_id || io.rd_ex === io.rs2_id)
|
||||
|
||||
// 当ID阶段的分支/跳转依赖于MEM阶段的一条load指令结果时,必须阻塞,
|
||||
// 因为此时无法从MEM阶段获得真实的读数据(仅有ALU地址)。
|
||||
val id_jump_needs_mem_load = io.jump_instruction_id && io.memory_read_enable_mem && io.rd_mem =/= 0.U &&
|
||||
(io.rd_mem === io.rs1_id || io.rd_mem === io.rs2_id)
|
||||
|
||||
// 最终的阻塞条件
|
||||
stall := load_use_hazard || id_jump_needs_ex_alu
|
||||
stall := load_use_hazard || id_jump_needs_ex_alu || id_jump_needs_mem_load
|
||||
|
||||
// 只有在流水线不被阻塞时,跳转信号(flush)才应该生效。
|
||||
val flush = io.jump_flag && !stall
|
||||
// 最终输出
|
||||
|
||||
Reference in New Issue
Block a user