64位MIPS指令处理器的流水线设计
1引言
随着集成电路设计和工艺技术的发展,嵌入式系统(SOC)已经在PDA、机顶盒、手机等信息终端中被广泛应用。他不仅减小了电路尺寸,而且具有成本低廉,可靠性高,功耗低等优点。可以说嵌入式系统是未来集成电路发展的方向。而作为嵌入式系统核心的微处理器,是SOC不可或缺的"心脏",微处理器的性能直接影响整个SOC的性能。
为了提高CPU的效率和指令执行的并行性,现代微处理器已经广泛采用流水线设计,对于一些较高性能的CPU更是采用了多发射的超流水技术等,所以,CPU流水线的设计,将成为决定其性能的关键。
2处理器体系结构
我们所设计的处理器是基于MIPS指令集的64位RISC结构,执行32位定长的MIPS指令,具有五级流水线。中央处理单元有32个通用寄存器和3个特殊功能寄存器:PC,HI,LO。其中PC是程序计数器,HI和LO用于64位乘除法运算。系统协处理器CP0的32个CP0寄存器和TLB提供内存管理和流水线中的异常处理功能。此外,处理器还提供了16k的指令Cache和8k数据Cache。
图1所示为处理器的系统结构框图,图中清楚地表明了各个模块间的控制关系(实线表示)和在流水线控制下的数据流向(空心线表示),流水线每一级之间由级间寄存器暂存对应指令的控制信号和数据。
3流水线结构
根据图1可以看出,将指令执行通道分成了5个单元,通道中流水线的每个单元之间使用级间寄存器来存放相应的控制信号和数据。对应的流水线结构分别为:取指(Ifet ch)、译码(Dec)、执行(Exec)、存储器操作(Mem)和写回寄存器(WB)。如图2所示,指令在流水线上顺序执行,但是同周期有五条指令相交迭。所以采用流水线结构大大提高了指令的并行性,CPI近似等于1。
4流水线控制的设计
由于采用了五级流水线设计,需要一个核心的流水线控制模块对这个流水线上的各个单元进行控制,以确保流水线正确高效地运行。值得注意的是,指令在流水线上的处理并不是简单地如图2所示的一个流畅序列,而是会出现很多因素破坏指令流水的平衡性,这些因素有:
(1)由于流水线上的2个执行单元同时使用同一硬件资源而产生冒险。
(2)部分指令在1个周期不能完成相应流水阶段的操作,如乘法指令在Exec级在ALU运算需要多个周期。
(3)指令运算的结果在Exec级得到,WB级才写回寄存器堆,而后续指令在结果写回前需要使用结果。
(4)Branch指令、跳转指令和ERET等指令导致流水线上程序流的改变。
(5)在流水线的执行过程中随时都可能有异常发生。
流水线控制就是解决以上问题,控制流水通道中的指令执行过程,在各种情况下能够保证程序的指令流有序、无误地执行。他主要包括以下各个单元,图3给出了流水线控制部分的总体结构。
4.1异常处理单元
异常是指令运行过程中发生的不可预测的中断,需要预先定义的异常处理程序来解决。他可能发生在流水线的Mem,Exec和Dec级,Mem级的异常优先级最高,后面依次为Exec级和D ec级。异常发生后,流水线中导致异常的指令以及后续指令都要被中止,异常处理程序调入流水线中执行。
异常处理单元收集各个异常信号并对其进行单周期监测,确保异常的及时响应,若多个异常同时发生需要判断异常的优先级,并处理处于最高优先级的异常。此时异常处理单元通过互锁单元使流水线暂停2个周期,将异常信息存入CP0寄存器,保存EPC,并由流水线冲刷单元终止流水线上的无效指令。流水线调入异常处理向量,重新开始执行指令。如图4所示为异常处理的流程,硬件处理部分由异常处理单元控制完成,软件部分为异常服务程序的执行过程。
4.2互锁处理模块
互锁的发生主要有以下几种情况,一是由于流水线中的2个处理模块同时使用同一资源产生冒险,此时等待资源的流水级以及前面的流水级都要等待;二是由于在某一流水级的操作需要多个时钟周期,整个流水线上的各个流水级等待多周期操作的完成。当互锁发生后,互锁处理模块暂停流水线直到互锁解决。如果从不同流水级同时发出暂停流水线的请求,也要判断暂停流水线请求的优先级。
互锁单元收集互锁信号,并响应最高优先级的互锁信号。在判断互锁类型后,向相应的执行单元发出Stall(流水线停止)信号,该信号必须为整数个时钟周期。
4.3优先级判别模块
对于特定的异常或互锁,都对应于流水线的某一级。在流水线指令交迭执行的过程中异常和互锁也会同时发生。优先级判别模块根据异常处理单元和互锁处理单元送来的异常与互锁的请求信号来判断是由异常处理模块来终止流水线上执行的指令还是由互锁单元将流水线暂停。
异常处于较高优先级时,产生异常的指令及其后续指令都要终止
- Linear推出14位310Msps双通道ADC系列(10-31)
- 工业级MCU的翘楚:集丰富模拟功能与片上资源于一身(09-14)