MIPS计算机是上个世纪八十年代中期推出的典型RISC结构,我们将以32位字长的机型为例,介绍MIPS计算机的运算器部件,其内部组成如图3.4所示,包括两个重要部分,一个是由128个寄存器组成的寄存器堆,另一个是执行数据运算的ALU。这个运算器被用于多周期CPU系统(对不同类型的指令选用不同的周期数)时,ALU既用于计算数据,又用于计算数据和指令在存储器中的地址,故还需要向ALU提供计算指令地址的相关信息。
寄存器堆可以使用两个端口(N1、N2)控制,从寄存器堆中读出两个寄存器的内容(Q1、Q2)并送到暂存器A和B,作为ALU运算的两路数据来源,B暂存器的内容还可以作为写入内存的数据。寄存器堆还要用第三个端口(ND)提供写入外部数据时用到的寄存器编号。
ALU完成对两路输入数据(A、B)的算术或者逻辑运算功能,向外直接提供运算的结果R(送PC)和结果的特征信息Z(结果为0标志),或将结果暂存于结果寄存器C中,为后续操作准备数据。
向ALU提供不同来源的两路数据,A路可以选择程序计数器PC或者寄存器A的输出,B路可以选择常数4、寄存器B的输出、或者另外两路数据Immed_1或Immed_2。这可以组合出A OP B,A OP Immed_1(OP代表不同的算数或者逻辑运算),PC 4,PC Immed_2等多种运算功能。前两种组合用于数据运算,包括两个寄存器之间的运算,或者一个寄存器和立即数之间的运算;后两种组合用于计算指令地址,PC 4得到下条相邻指令的地址,PC Immed_2得到相对转移指令的地址,更深入的内容将在控制器部件的章节进行说明。
MIPS计算机的运算器部件
MIPS计算机多周期CPU系统中的运算器部件的工作过程与控制信号
1.运算器与控制器之间的信息传递
控制器中的程序计数器(PC)需要通过ALU完成指令地址计算,它把自己的内容送到ALU的A输入端,图3.4中用pc-in表示,以实现PC 4和PC immed-2的加法运算,常数4和immed-2是由ALU的B输入端提供。PC 4的计算要在读取指令阶段完成,并在这一阶段就把计算结果(图中用pc-out表示)写回PC。PC immed-2的计算要在指令译码阶段完成,并将计算结果保存在ALU的结果寄存器C中,到下一步的执行阶段依据需要把这个结果(图中用reg-C表示)再写回PC。
2.运算器与存储器器之间的信息传递
写入寄存器堆的数据可以是ALU的运算结果,也可能是从内存中读出来的数据,这二者需要通过一个二选一电路送到寄存器堆的DI数据输入端。ALU的计算结果是在执行阶段通过A op B或A op immed-1运算得到的,并首先保存在C寄存器中,到下一步的数据写回阶段才写入寄存器堆。
为了实现内存的读出或写入操作,在执行阶段通过A immed-1运算得到内存地址,并保存在C寄存器中,到下一步的内存读写阶段用C中的这个地址来选择内存中的一个存储单元。
对从内存读出数据的指令,完成读出数据到内存的数据缓存寄存器DR中。对写数据到内存的指令,把在译码步骤保存在B寄存器中的数据送到内存的数据线,完成内存的写入操作。
小结:运算器需要向内存提供地址信息和写入的数据信息,内存则将向运算器提供其读出的数据以便写入到寄存器堆中。
注意这个运算器部件中的寄存器堆和ALU将在不同的执行步骤中完成自己的操作功能,读寄存器堆在前(需要提供被读的两个寄存器的编号rs和rt),ALU计算在后(需要提供数据来源选择信号A_sel和B_sel,以及ALU的运算功能选择信号alu_func),再到下一步才会把保存在寄存器C中的计算结果写回寄存器堆(需要提供被写的寄存器编号rd,写寄存器堆的命令信号we)。三个寄存器A、B、C都要用到时钟信号Clock。
从控制器接收寄存器编号
第一步:用rs和rt从寄存器组中读出两个寄存器的内容并暂存到寄存器A和B
第二步:两个寄存器的内容经2个多路选择器电路送到ALU的输入端,ALU执行加法运算,并保存结果到寄存器C;
第三步:把寄存器C中的计算结果写入到寄存器组内由rd选择的寄存器
,