一、概述
在执行阶段,接收指令的源操作数,对其进行对应的操作,比如加减乘除、访问存储器等。执行结果会更新处理器的状态,比如更新物理寄存器堆,此外执行结果还会作为其他指令的源操作数(即旁路)。执行模块通常被称为Function Unit(FU)。
一个处理器包含的FU的类型取决于该处理器支持的指令集,一般的RISC-V指令集支持以下操作类型,
1.算术运算,如加减乘除、逻辑运算与移位运算。
2.访问存储器,如从存储器读取数据(load)和向存储器写数据(store)。
3.控制程序流,如分支(branch)、跳转(jump)、子程序调用(call)、子程序返回(return)等。
4.特殊指令,用来实现一些特殊功能的指令,如操作TLB的指令等。
由于指令复杂度不同,所以在FU中的执行时间也不同,称为latency。FU的个数决定了每周期最大可以并行执行的指令个数,即issue width。执行完成后并不会将结果马上更新到逻辑寄存器堆(ARF),而是会先写到临时的地方,如物理寄存器堆(PRF),当一条指令顺利退休时,才会对处理器的状态进行更新。
执行阶段另一重要部分是旁路网络(bypassing network),它主要将FU的运算结果马上送到需要它的其他地方,如物理寄存器堆、所有FU的输入端、store buffer中等。
FU与物理寄存器堆的读端口有固定的对应关系。
二、FU的类型
ALU
用来实现整数的加减、逻辑、移位运算,或者简单的乘除法、数据传输指令等,具体实现什么运算类型由处理器微架构而定。
AGU
用来计算地址。