其他分享
首页 > 其他分享> > 指令解码

指令解码

作者:互联网

指令解码

指令解码:将指令中携带的信息提取出来,处理器使用这些信息来控制后续的流水线执行这条指令。

CISC指令长度不固定,解码首先需要分辨指令边界,寻址方式也很复杂,提升了解码难度。

RISC指令长度固定,寻址方式相对简单,解码更容易。

超标量处理器希望一个周期能够解码n条指令,对应n个解码电路。

6.1 指令缓存

为减少I-Cache miss带来的影响,处理器可以在取指令阶段从I-Cache中取出的指令个数多余每周期可以解码的指令个数。需要在取指令和译码之间加入缓存,将多取的指令保存起来。

指令缓存本质是个FIFO。

指令缓存FIFO实际实现时不会采用多端口SRAM,而是采用多个单端口SRAM。避免使用多端口SRAM带来的硬件和速度上的限制。

6.2 一般情况

MIPS指令集一般的指令包含Rs、Rt两个源寄存器,Rd一个目的寄存器。

ARM指令集一般的指令包含Rn、Rs、Rm三个源寄存器,Rd一个目的寄存器。

6.3 特殊情况

ARM指令集中的LDM/STM指令,需要多个周期才能够完成,而且目的寄存器、源寄存器有多个。在超标量处理器中不会直接处理这种复杂的指令,而是转化为多条简单的指令,按照一般方式进行处理。

6.3.1 分支指令的处理

在对预测失败进行状态恢复时,为了减少复杂度,需要限制每周期内解码的分支指令个数。而若是每周期读取了多条分支指令,就需要在解码阶段处理这个情况。

简单方法:遇到分支指令时,就不在本周起对这条分支指令后面的指令进行解码。

6.3.2 乘累加/乘法指令的处理

在4-way超标量处理器中,如果一个周期内解码的四条指令都是乘累加类型的指令,那么会解码出八条指令。寄存器重命名不可能设计成每周期可以对8条指令进行操作,这会浪费大量的硬件面积。

6.3.3 前/后变址指令的处理

与乘累加处理类似

ARM采用一条指令的功能MIPS需要两条指令才能完成,可以占用更少的指令存储器,降低I-Cache的缺失率,但也会占用更多硅片面积,增加功耗。

6.3.4 LDM/STM指令的处理

LDM:将存储器中一片连续地址空间上的数据加载到多个寄存器

STM:将多个寄存器的内容保存在存储器中的一片连续空间

处理时拆成多条普通的load/store指令

6.3.5 条件执行指令的处理

CPSR寄存器作为状态寄存器

标签:解码,指令,6.3,处理器,寄存器,CPSR
来源: https://www.cnblogs.com/icwangpu/p/15923169.html