芯来科技
直播中

jjll652

9年用户 1417经验值
私信 关注
[问答]

cmt_instret_ena的使能为什么要排除branch等指令造成流水线冲刷的情况?

在e203_exu_commit.v中:assign cmt_instret_ena = cmt_ena & (~alu_brchmis_flush_req);
cmt_instret_ena的使能排除 branch(预测失败时)、fencei、mret和dret等指令造成流水线冲刷的情况。
根据文档,造成流水线冲刷的这些指令本身应该是交付的,但为什么计算提交指令数时要排除它们呢?
或许是我的理解有误,望各位老师和同学们指点一下,万分谢谢!

回帖(1)

自我清欢

2024-1-10 15:26:34
在RISC-V架构中,流水线冲刷是指当分支预测错误或发生异常时,流水线中的指令会被清除,并重新开始执行正确的指令序列。在这种情况下,被清除的指令不应该被计为已提交的指令,因此在计算提交指令数时需要排除这些指令。

具体来说,预测失败的分支指令会导致流水线冲刷,而且这些指令本身是被送达到提交单元进行处理的。但是在计算提交指令数时,我们关心的是真正成功提交到存储器的指令,而非发生冲刷的指令。因此,需要排除预测失败的分支指令等冲刷情况,只统计成功提交的指令个数。

而对于fencei、mret和dret等指令,它们在执行过程中不会对流水线产生冲刷影响,因此也不应该计入已提交的指令数中。

综上所述,cmt_instret_ena的使能排除了预测失败的分支指令、fencei、mret和dret等指令,以确保在计算提交指令数时只包括成功提交到存储器的指令。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分