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给出了流水线控制部分的总体结构。
随着集成电路设计和工艺技术的发展,嵌入式系统(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给出了流水线控制部分的总体结构。