首页 > 编程知识 正文

多周期cpu和流水线,mips架构五级流水线cpu

时间:2023-05-04 18:31:13 阅读:120173 作者:2731

1引言

随着集成电路的设计和技术的发展,嵌入式系统(SOC )已经广泛应用于PDA、机顶盒、手机等信息终端。 他不仅减小了电路尺寸,而且具有成本低廉、可靠性高、功耗低等优点。 可以说嵌入式系统是未来集成电路发展的方向。 作为嵌入式系统核心的微处理器是SOC不可缺少的“心脏”,微处理器的性能直接影响整个SOC的性能。

为了提高CPU的效率和指令执行的并行性,现代微处理器广泛采用流水线设计,部分高性能CPU采用多镜头超流水技术等。 因此,CPU流水线的设计是决定其性能的关键。

2处理器体系结构

我们设计的处理器基于MIPS指令集的64位RISC结构,执行32位固定长度的MIPS指令,具有五级流水线。 中央处理单元有32个通用寄存器和3个特殊功能寄存器。 是PC、PI、LO。 这里,PC是程序计数器,HI和LO用于64位的乘除。 系统协处理器CP0的32个CP0寄存器和TLB提供内存管理和流水线中的异常处理功能。 此外,处理器提供16k指令Cache和8k数据Cache。

图1是示出处理器的系统结构的框图,其清楚地示出了各模块之间的控制关系(用实线示出)以及在流水线控制下的数据流,在流水线控制下,相应的指令的控制信号和数据临时保持在级间寄存器中。

3管线结构

根据图1,可以看出,命令执行信道被分成五个单元,并且在信道中的流水线的每个单元之间,利用级间寄存器存储相应的控制信号和数据。 相应的管线结构为指(Ifet ch )、解码(Dec )、执行(Exec )、存储器操作(Mem )、回写寄存器(WB )。 如图2所示,指令在流水线上依次执行,但在同一周期有5个指令交叉。 因此,采用流水线结构大大提高了指令的并行性,CPI几乎等于1。

4管线控制的设计

由于采用了5级管线设计,核心管线控制模块必须控制该管线上的各个单元,才能准确有效地运行管线。 值得注意的是,在指令流水线上的处理并不是简单地如图2所示的平稳序列,而是以下许多因素破坏了指令流程的平衡。

)1)流水线上的两个执行单元同时使用同一硬件资源,因此存在风险。

)2)部分命令无法在一个周期内完成相应流水阶段的操作。 例如,乘法指令在Exec电平下用ALU进行运算需要多个周期。

)3)指令运算的结果在Exec级得到,WB级被写回寄存器文件,但后续指令需要在结果被写回之前使用结果。

)4) Branch指令、跳转指令、ERET等指令使流水线上的程序流发生变化。

)5)管线运行过程中随时可能发生异常。

流水线控制是解决以上问题,控制流水线上指令的执行过程,保证程序指令在各种情况下有序、无误地执行。 他主要包括以下各单元,图3表示流水线控制部分的整体结构。

4.1异常处理单元

异常是指令执行过程中出现的不可预测的中断,必须用预定义的异常处理程序解决。 他可能发生在管道的Mem、Exec和Dec级,Mem级异常优先级最高,依次为Exec级和Dec级。 发生异常后,导致管线异常的所有指令和后续指令都将中止,异常处理程序将转入管线执行。

异常处理单元收集各个异常信号,并对其进行单周期监测,确保异常的即时响应,在多个异常同时发生的情况下,判断异常的优先顺序,处理优先顺序最高的异常。 此时,异常处理单元通过联锁单元使流水线暂停2个周期,将异常信息存储在CP0寄存器中,保存EPC,通过流水线冲洗单元结束流水线上的无效指令。 管线被捕获到异常处理向量中,指令重新开始执行。 图4显示了异常处理的流程,其中硬件处理单元在异常处理单元的控制下完成,软件单元是异常服务程序的执行过程。

4.2联锁处理模块

联锁的发生主要有以下几种情况。 一是管道中的两个处理模块同时使用同一资源进行冒险,此时等待资源的流水水平和前面的流水水平都必须等待。 二是某流水段操作需要多个时钟周期,整个管线各流水段等待多周期操作完成。 发生联锁时,联锁处理模块将暂停管线,直到联锁解决。 如果同时从不同管线级发出管线暂停请求,则还必须确定管线暂停请求的优先级。

联锁单元收集联锁信号,并对优先级最高的联锁信号作出响应。 判断联锁的种类后,向对应的执行单元发出Stall (管线停止)信号。 此信号必须是整数时钟周期。

4.3优先级判别模块

对于特定的异常或联锁,对应于管线的某一水平。 流水线指令重叠执行期间,异常和联锁也同时发生。 优先级判别模块根据从异常处理部和联锁处理部发送的异常和联锁的请求信号,判断异常处理模块是结束在流水线上执行的指令,还是联锁部暂时停止流水线。

如果异常处于高优先级,发生异常的指令和后续指令将中止管线上的操作,因此未发生的联锁将被清除。 在互锁处于高优先级的情况下,异常信号在流水线上没有高优先级的互锁信号时保持直到流水线响应异常。

4.4管线清洗

流水线运行中,程序运行不确定

性,会出现异常或者是跳转、子程序或异常处理程序返回的情况,导致顺序执行的指令发生变化。但是,由于采取了流水线设计,在指令顺序发生变化时需要舍弃已经进入流水线的部分指令,从其他指令地址重新装载指令。

流水线为了冲刷相应的指令,对指令缓存,Dec,Exec和Mem级的控制信号加入了多路选择器,通过流水线冲刷单元发出的选择信号来选通控制信号,正常情况下选通控制信号来完成对各级操作的控制,如果要冲刷某一级流水线上的指令(如Exec级),则相应的flushExe c信号选择“0”来执行空操作,被冲刷的流水级可以看作执行了一条NOP指令。

4.5 数据旁路

通过对流水线结构的分析发现,对于一条执行结果要写回寄存器的指令,在Exec级计算出的数据要在WB级才写回寄存器堆,后面的指令如果需要该结果,就需要等待直到数据写回才继续流水线执行。如图2中的第一条sub指令将$1和$3相减的结果保存到$2寄存器,结果在C3周期得到,C5周期写回寄存器,而后续的and和or指令分别在C4、C5使用$2的值就会产生错误的结果。而add和sw在C6和C7使用$2寄存器的值就会得到希望的结果。为了保证指令在流水线上正确高效地执行,我们在流水线控制中增加了数据旁路,在数据写回寄存器堆前将得出的结果从流水级间的暂存寄存器中调到Exec级使用。判断是否从旁路中选择的条件为:

图5是增加了数据旁路结构的流水线通道示意图。表示了图2中指令流在C4周期流水线的状态。

4.6 数据冒险监测

数据旁路避免了流水线通过Stall来解决数据冒险的问题,提高了指令的执行效率。但是当load指令后面的一条指令试图读取寄存器与load指令要写的寄存器相同时,load的数据在Me m级从存储器读入,而Exec的指令必须要Stall一个周期才能通过数据旁路从Mem/WB寄存器得到数据。如:

当load指令进入Exec级,and指令进入Dec级,此时判断到load指令装载的目的寄存器与and指令的源寄存器相同,就会出现数据冒险,此时HDUStall信号使and指令等待一周期,loa d指令在Mem级得到数据后通过数据旁路机制解决数据冒险。

数据冒险监测单元也对于CP0寄存器的冒险进行了检测并控制流水线采取相应的避免机制。

5 指令调试

作为对整个流水线的控制,必须在流水通道内运行各种指令流,分析流水线的控制信号能否对这些指令流在流水线上的执行进行精确控制。对整个处理器进行了虚拟仿真和FPGA验证,在仿真平台和FPGA验证板上运行了各种可能的指令流,分析了流水线控制信号的变化,确保了这个处理器的中心控制模块对指令流水线的正确控制,并达到了较高的运行效率。图6是采用虚拟仿真平台对发生itlb_miss exception的仿真波形。

五级流水线控制单元大大提高了处理器的执行效率,达到了64位处理器的高性能设计,处理器的速度达到了120 MHz,有较强的DSP数据处理能力,并且可以运行WinCE,Linux等嵌入式操作系统。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。