新ちゃん 发表于 2020-8-9 00:26:40

第七章RISC-V的取指令

本帖最后由 ニコ·ロビン 于 2020-8-9 00:32 编辑


RISC-V架构特点对于取指的简化

1:指令长度编码放在低位


[*]得益于后发优势和多年来处理器发展的教训,所有RISC-V处理器的指令长度指示码都放在了低位,可以方便取指逻辑在取指过程中以最快的速度译码出当前指令的长度,极大地简化了硬件的设计


[*]另外,16位压缩指令子集是可选的,假设处理器仅支持32位的而不支持16位的,甚至可以把后两位忽略不存储,因为肯定固定为(11),从而减少了6.25%的指令缓存


[*]RISC-V不同指令长度的后几位定义如下图所示,不过除了32位和16位,其他的指令长度格式并不常用



2:简单的分支跳转指令


[*]无条件直接分支跳转指令,jal(跳转和链接)指令,用于进入子程序调用,同时将子程序的返回地址存在jal指令的目标寄存器(连接寄存器,link register)。



[*]无条件间接分支跳转指令,jalr(jump and link-register)指令,用于子程序返回指令,通过将jal指令(跳转进入子程序)保存的连接寄存器地址,作为jalr指令的基地址寄存器,则可以从子程序返回。



[*]带条件分支跳转指令,共有六条,他有两个操作数,先进性比较,之后在跳转,与其它RISC架构不同的是,RISC-V架构把比较和跳转两个操作放在一个指令中完成,减少了指令的条数,使他在硬件上更加简单。

3:取消了分支延时槽命令

4:提供明确的静态分支预测依据

固定地预测为向后跳转的分支指令为需要跳转,在RISC-V架构中明确规定,编辑器生成的代码应该尽量优化,使得向后跳转的分支指令比向前跳转的概率要大,最大化地提高静态预测的准确率
5:提供明确的RAS依据


[*]RAS:函数的调用和返回往往是成对出现的,在函数调时将当前PC值加4,即其顺序执行的下一条指令的PC值压入RAS堆栈中,等到函数返回时将RAS的值弹出,这样可以快速的为函数返回的分支跳转预测指令预测目标地址。



[*]通过在架构文档中明确规定,并且规定软件编译器按照此原则生成汇编代码,从而最大化提高预测的准确性


蜂鸟E200处理器的取指实现
本篇完

小飞飞 发表于 2020-8-11 21:35:21

分析的太好了
页: [1]
查看完整版本: 第七章RISC-V的取指令