Skip to content

再次请教frontend几个问题 #1430

Closed Answered by jinyue110
ddxoxpp asked this question in Q&A
Discussion options

You must be logged in to vote

(。・∀・)ノ゙嗨,感谢您对香山项目的关注,针对您的问题:

  1. 这个其实是时序的考虑,last half其实可以统一处理,可以规约为fallthrouAddr或者说这个packet的结束边界恰好卡在一条RVI指令中间。但这样处理的坏处在于,需要根据变动的fallthrouAddr去找到最后一条有效指令,然后再判断这个指令是不是半条RVI,predChecker里面做了很多检查,生成的fixedRange逻辑路径比较长,如果再加上这个找最后一条有效指令index的路径,那到终点f3_lastHalf.valid寄存器的时序就会违例。所以这里我们只处理每个packet里第16条指令发生last half的情况,因为这时候最后一条指令的index是常数,省掉了找index的路径。而对于那些提前结束的last half(即最后一条有效指令在16之前,并且卡在一条RVI中间)我们认为是false hit造成的,因为既然提前结束了说明一定做出了预测(e.g. packet里有两条不跳转的分支),而预测结果不对(错误地把结束地址放在了一条RVI指令中间),这时候的情况我们观察下来是少数,因此这种时候我们发redirect 刷掉重新取指令。

  2. 这个和我们的range独热码产生的逻辑有关,你可以看到在你贴出的代码的261行,我们计算一个packet的range独热码(每一位为1代表这个2Bytes在这个packet的范围内,为0表示在fallthrouAddr之后了)的算法是根据fallThrouAddr(这个是以前的命名,现在是nextStartAddr),计算出最后一条指令的inde…

Replies: 3 comments 6 replies

Comment options

You must be logged in to vote
0 replies
Comment options

You must be logged in to vote
1 reply
@ddxoxpp
Comment options

Comment options

You must be logged in to vote
5 replies
@ddxoxpp
Comment options

@ddxoxpp
Comment options

@Lingrui98
Comment options

@ddxoxpp
Comment options

@Lingrui98
Comment options

Answer selected by ddxoxpp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
4 participants