在RV实现部分原文提到
“
跳转停顿:BRANCH/JALR 指令需要寄存器读值才能计算 npc ,为了防止 ID段 组合逻辑过长,我们在 EX段 才计算并发送 npc 到 IF 段,导致总是在 ID段 产生一周期的气泡 (这里不考虑 speculation + 冲刷流水线的技术)。
实现方法:EX段 和 ID段 都可以向 IF段 发送 npc ,但不会同时,所以给 EX段 和 ID段 加上 (* conflict_free *) 属性。
”
想问一下,如果前一条是BRANCH/JMP指令,需要在EX阶段执行if_pc.enq();而后一条指令为NOP,在ID阶段执行if_pc.enq(),那么EX段 和 ID段 都可以向 IF段 发送 npc ,但会同时,我的理解有问题吗?
在RV实现部分原文提到
“
跳转停顿:BRANCH/JALR 指令需要寄存器读值才能计算 npc ,为了防止 ID段 组合逻辑过长,我们在 EX段 才计算并发送 npc 到 IF 段,导致总是在 ID段 产生一周期的气泡 (这里不考虑 speculation + 冲刷流水线的技术)。
实现方法:EX段 和 ID段 都可以向 IF段 发送 npc ,但不会同时,所以给 EX段 和 ID段 加上 (* conflict_free *) 属性。
”
想问一下,如果前一条是BRANCH/JMP指令,需要在EX阶段执行if_pc.enq();而后一条指令为NOP,在ID阶段执行if_pc.enq(),那么EX段 和 ID段 都可以向 IF段 发送 npc ,但会同时,我的理解有问题吗?