现在的位置: 首页 > 综合 > 正文

《大话处理器》连载——微架构(4) 史上最经典的5级流水线

2018年01月25日 ⁄ 综合 ⁄ 共 1085字 ⁄ 字号 评论关闭

        处理器内部有很多通用寄存器,这些寄存器用来存储指令的操作数,它对程序员可见,如x86有8个通用寄存器,RISC处理器则更多,常有32个或64个等等。这一堆寄存器也被叫做Register file(寄存器堆)。

        在流水线设计中,为了确保不同流水线节拍不会相互影响,在每个阶段引入了流水线寄存器来分隔各个流水线节拍:

流水线寄存器

 

      寄存器就像是红灯,信号只在固定的时间才会将左端节拍的值传递给右端节拍,这样各个节拍的工作就不会出现紊乱。

        在汇编语言中,ALU(算术逻辑单元)单元直接访问通用寄存器进行运算,在硬件实现时,通用寄存器中的数据先被读到流水线寄存器中,也即ALU的输入寄存器中,ALU运算结束后,数据会存储在ALU的输出寄存器中,最后再送回到通用寄存器中。下图为ALU、通用寄存器、ALU输入输出寄存器的结构图:

 

ALU、ALU输入输出寄存器、寄存器堆的关系

 

       流水线寄存器是对程序员不可见的,ALU指令的执行节拍可以进一步细分为3个子节拍:

       1.       从寄存器堆中读取寄存器的值

       2.       进行运算

       3.       将运算结果写回到寄存器堆中

       根据这个分析,处理器的流水线可以进一步细分。MIPS处理器在设计时,将处理器的执行过程划分为5个阶段: 

5级流水线

 

       在MIPS的5级流水线中,从寄存器堆中读数据到ALU输入寄存器这个步骤被放在了ID阶段,将运算结果写回到寄存器堆被作为一个独立的阶段。

       到目前为止,我们都认为数据已经存放在寄存器中,事实上,数据被存放在内存(Memory)中,在RISC处器中,数据要先从内存load(导入)到寄存器中,然后再参与运算,然后将运算结果store(导出)到存储器中去。因此,MIPS的5级流水线增加了一个MEM阶段。

        对于运算指令,在MEM阶段空闲。对于load指令,在EX阶段计算要访问的地址,在MEM阶段从内存中将数据读入到MEM register(MEM和WB之间的流水线寄存器)中,在WB阶段,将MEM register的数据写回到Register file中。对于store指令,在EX阶段计算要访问的地址,在MEM阶段将寄存器中的数据写回到存储器中。

        下图是MIPS 5级流水线的执行顺序图:

MIPS 5级流水线

        这5级流水线可以说是史上最经典的流水线,早期的MIPS、ARM9等处理器使用这种流水线,以后的处理器也都能看到它的影子,包括x86处理器等。

抱歉!评论已关闭.