第5章静态流水线的设计、分析与验证〖1〗5.1静态流水线的基本原理ASC多功能流水线通过不同功能段的合理组合,实现浮点加法和定乘两项运算任务,如图5.1所示。
图5.1ASC多功能流水线
静态流水线要求在同一时间内,多功能流水线中的各段只能按同一种功能的连接方式工作。只有当输入的是一串相同的运算任务时,流水的效率才能得到充分发挥,如图5.2所示。
图5.2多功能静态流水线时空图
例如,采用静态流水线实现加减法和乘法运算,流水线的输出可以直接返回输入端或暂存于相应的流水寄存器中,如图5.3所示,计算:∏4i=1(Ai+Bi)图5.3加减法和乘法运算组合流水线
计算过程:
(1) 先计算A1+B1、A2+B2、A3+B3和A4+B4。
(2) 再计算(A1+B1)×(A2+B2)和(A3+B3)×(A4+B4)。
(3) 最后求总的乘积结果。
加减法和乘法运算静态流水线时空图如图5.4所示。
图5.4加减法和乘法运算静态流水线时空图
5.2实 验 介 绍
通过本次实验,了解静态流水线的实现原理,并学习如何实现一个静态流水线模型,本次实验将验证给出的数学模型,并设计算法程序完成实验。
需验证的数学模型如下。int a[m],b[m],c[m];
a[i]=a[i-1]+2;
b[i]=b[i-1]+i;
m=60;a[0]=1;b[0]=0;
if(0<=i<=19)
c[i]=a[i];
if(20<=i<=39)
c[i]=b[i];
if(40<=i<=59)
c[i]=a[i]+b[i];5.3实 验 设 计
静态流水线指在同一时间内,多功能流水线中的各段只能按同一种功能的连接方式工作的流水线。当流水线要切换到另一种功能时,必须等前面的任务都流出流水线之后,才能改变连接。
(1) 首先将流水线分为多段,考虑每一段的基本功能和部件,得到一个基本可以工作的流水线。将每条指令分为5个阶段执行,分别为取指(IF)、译码(ID)、执行(EXE)、存储器访问(MEM)、寄存器写回(WB)。各指令将自己需要用到的数据和控制信号通过流水线寄存器一级接着一级往下传,每个阶段执行相应的操作(若指令不需要执行当前阶段的操作,则只将数据和控制信号传给下一级即可),以此实现流水线方式执行。
(2) 考虑可能出现的相关和冲突,思考解决方案。静态流水线实验中,对于数据相关的冲突,一律采用暂停流水线的解决方法;对于控制相关的冲突,采用提前分支判断与延迟槽的解决方法。
指令集: add;addu;sub;sub;subu;and;or;xor;nor;slt;sltu;sll;srl;sra;sllv;srlv;srav;jr;addi;addiu;andi;ori;xori;lw;sw;beq;bne;slti;sltiu;lui;j;jal;mult;mfhi;mflo。
按照数据通路连接方式对指令进行分类,见表5.1。表5.1指令集和对应的类编号
指令集类编号add;addu;sub;subu;and;or;xor;nor;slt;sltu;sll;srl;sra;sllv;srlv;srav;addi;addiu;andi;ori;xori;slti;sltiu0000jr0001lw0010sw0011beq;bne0100lui0101j0110jal0111mult1000mfhi1001mflo10105.3.1静态流水线的总体结构
多功能静态流水线的总体结构包括执行部件与段间的流水寄存器(或称流水锁存器),由执行部件与段间的流水寄存器形成相应的数据通路,如图5.5所示。5.3.2总体架构部件的解释说明1. PC寄存器模块PC寄存器如图5.6所示。
图5.6PC寄存器
1) 接口定义module Reg(
input clk, //1位输入,寄存器时钟信号,上升沿时为PC寄存器赋值
input rst, //1位输入,重置信号,高电平时将PC寄存器清零
input wena, //1位输入,写信号
input [31:0] data_in, //32位输入,输入数据将被存入寄存器内部
output reg [31:0] data_out //32位输出,工作时始终输出PC寄存器内部存储的值
);2) Verilog代码描述module Reg(
input clk, //1位输入,寄存器时钟信号,上升沿时为PC寄存器赋值
input rst, //1位输入,重置信号,高电平时将PC寄存器清零
input wena, //1位输入,写信号
input [31:0] data_in, //32位输入,输入数据将被存入寄存器内部
output reg [31:0] data_out //32位输出,工作时始终输出PC寄存器内部存储的值
);
always @(posedge clk,posedge rst)
if(rst)
data_out<=0;
else if(wena)
data_out<=data_in;
endmodule2. PipeIF模块
IF级部件包含指令存储器、累加器和多路选择器,如图5.7所示。