基于MIPS的流水线处理器设计.docx
《基于MIPS的流水线处理器设计.docx》由会员分享,可在线阅读,更多相关《基于MIPS的流水线处理器设计.docx(60页珍藏版)》请在冰点文库上搜索。
基于MIPS的流水线处理器设计
摘要
CPU是计算机系统的核心部件,在各类信息终端中得到了广泛的应用。
处理器的设计及制造技术也是计算机技术的核心之一。
而MIPS是世界上很流行的一种RISC处理器。
MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessorwithoutinterlockedpipedstages),其机制是尽量利用软件办法避免流水线中的数据相关问题。
本文围绕着指令执行过程中需经历的五个阶段,详细描述了处理器中各阶段的逻辑设计及其相关功能模块的设计。
这五个阶段包括:
取指令阶段IF,指令译码阶段ID,指令执行阶段EXE,存储器读写阶段MEM,寄存器写回阶段WB。
相关模块包括:
程序存储器imem,控制单元controller,寄存器堆regfile,算术逻辑单元alu,数据存储器dmem。
在完成了CPU的整体逻辑设计后,通过Modelsim仿真软件在所设计的CPU上运行了测试程序,测试输出波形表明了处理器逻辑设计的正确性。
关键词:
MIPS;处理器;流水线
Abstract
TheCentralProcessingUnit(CPU)isthekeypartofacomputer,whichhasbeenwidelyusedinvariousinformationterminals.Also,thedesignandmanufacturingtechnologyoftheprocessorisoneofthecoresofthecomputertechnology.And,asaRISCprocessor,MIPSisverypopularintheworld.MIPSmeans“microprocessorwithoutinterlockedpipedstages”,themechanismofitistoavoidthedata-relatedproblemsinthepipelineasmuchaspossiblebysoftware.
Aroundthefivestagesoftheinstructionexecution,thearticledescribesthelogicdesignsoftheprocessorandit’srelatedfunctionalmodulesindetail.Thefivestagesinclude:
theinstructionfetchstageIF,theinstructiondecodestageID,theinstructionexecutionstageEXE,thememoryread/writestageMEM,andtheregisterwritebackstageWB.Therelatedmodulesinclude:
theinstructionmemoryimem,thecontrolunitcontroller,theregisterfileregfile,thearithmeticlogicunitalu,andthedatamemorydmem.Uponthecompletionofthewholelogicdesigns,runningthetestprogramsbytheModelsim,thecorrectnessofthelogicdesignsisprovedbytheoutputwaveform.
Keywords:
MIPS,CPU,Pipeline
第1章MIPS体系结构概述
1.1流水线技术
在任一条指令的执行过程中,各个功能部件都会随着指令执行的进程而呈现出时忙时闲的现象。
要加快计算机的工作速度,就应使各个功能部件并行工作,即以各自可能的高速度同时、不停地工作,使得各部件的操作在时间上重叠进行,实现流水式作业。
从原理上说,计算机的流水线(pipeline)工作方式就是将一个计算任务细分成若干个子任务,每个子任务都由专门的功能部件进行处理,一个计算任务的各个子任务由流水线上各个功能部件轮流进行处理(即各子任务在流水线的各个功能阶段并发执行),最终完成工作。
这样,不必等到上一个计算任务完成,就可以开始下一个计算任务的执行。
流水线的硬件基本结构如图1.1所示。
流水线由一系列串联的功能部件(Si)组成,各个功能部件之间设有高速缓冲寄存器(L),以暂时保存上一功能部件对子任务处理的结果,同时又能够接受新的处理任务。
在一个统一的时钟(C)控制下,计算任务从功能部件的一个功能段流向下一个功能段。
在流水线中,所有功能段同时对不同的数据进行不同的处理,各个处理步骤并行地操作。
图1.1流水线的硬件基本结构
当任务连续不断地输入流水线时,在流水线的输出端便连续不断地输出执行结果,流水线达到不间断流水的稳定状态,从而实现了子任务级的并行。
流水线技术本质上是将一个重复的时序过程分解成若干个子过程,而每一个子过程都可有效地在其专用功能段上与其他子过程同时执行。
采用流水线技术通过硬件实现并行操作后,就某一条指令而言,其执行速度并没有加快,但就程序执行过程的整体而言,程序执行速度大大加快。
流水线技术适合于大量的重复性的处理。
1.2RISC技术
按照指令系统分类,计算机大致可以分为两类:
复杂指令系统计算机(ComplexInstructionSetComputer,CISC)和精简指令系统计算机(ReducedInstructionSetComputer,RISC)。
CISC是CPU的传统设计模式,其指令系统的特点是指令数目多而复杂,每条指令的长度不尽相等;而RISC则是CPU的一种新型设计模式,其指令系统的主要特点是指令条数少且简单,指令长度固定。
1.RISC的产生
1975年,IBM的设计师JohnCocke研究了当时的IBM370CISC系统,发现其中仅占总指令数20%的简单指令却在程序调用中占据了80%,而占指令数80%的复杂指令却只有20%的机会被调用到。
由此,他提出了RISC的概念。
第一台RISC计算机于1981年在美国加州大学伯克利分校问世。
20世纪80年代末开始,各家公司的RISCCPU如雨后春笋般出现,占据了大量的市场。
到了20世纪90年代,x86的CPU(如Pentium)也开始使用先进的RISC技术。
2.RISC的特点
RISC的主要特点是指令长度固定,指令格式和寻址方式种类少,大多数是简单指令且都能在一个时钟周期内完成,易于设计超标量与流水线,寄存器数量多,大量操作在寄存器之间进行。
RISC体系结构的基本思想是:
针对CISC指令系统指令种类太多、指令格式不规范、寻址方式太多的缺点,通过减少指令种类、规范指令格式、简化寻址方式,方便处理器内部的并行处理,提高VLSI器件的使用效率,从而大幅度地提高处理器的性能。
RISC的目标决不是简单的缩减指令系统,而是使处理器的结构更简单,更合理,具有更高的性能和执行效率,同时降低处理器的开发成本。
由于RISC指令系统仅包含最常用的简单指令,因此,RISC技术可以通过硬件优化设计,把时钟频率提得很高,从而实现整个系统的高性能。
同时,RISC技术在CPU芯片上设置大量寄存器,用来把常用的数据保存在这些寄存器中,大大减少对存储器的访问,用高速的寄存器访问取代低速的存储器访问,从而提高系统整体性能。
RISC的三个要素是:
(1)一个有限的简单的指令集
(2)CPU配备大量的通用寄存器,(3)强调对指令流水线的优化。
RISC的典型特征包括:
(1)指令种类少,指令格式规范:
RISC指令集通常只使用一种或少数几种格式,指令长度单一(一般4个字节),并且在字边界上对齐,字段位置(特别是操作码的位置)固定。
(2)寻址方式简化:
几乎所有指令都使用寄存器寻址方式,绝不出现存储器间接寻址方式,寻址方式总数一般不超过5个。
其他更为复杂的寻址方式,如间接寻址等,则由软件利用简单的寻址方式来合成。
(3)大量利用寄存器间操作:
RISC强调通用寄存器资源的优化使用,指令集中大多数操作都是寄存器到寄存器的操作,只有取数指令、存数指令访问存储器,指令中最多出现RS型指令,绝不出现SS型指令。
因此,每条指令中访问的主存地址不会超过1个,访问主存的操作不会与算术操作混在一起。
(4)简化处理器结构:
使用RISC指令集,可以大大简化处理器中的控制器和其他功能单元的设计,不必使用大量专用寄存器,特别是允许以硬连线方式来实现指令操作,以期更快的执行速度,而不必像CISC处理器那样使用微程序来实现指令操作。
因此,RISC处理器不必像CISC处理器那样设置微程序控制存储器,从而能够快速地直接执行指令。
(5)便于使用VLSI技术:
随着LSI和VLSI技术的发展,整个处理器(甚至多个处理器)都可以放在一片芯片上。
RISC体系结构为单芯片处理器的设计带来很多好处,有利于提高性能,简化VLSI芯片的设计和实现。
基于VLSI技术,制造RISC处理器的工作量要比CISC处理器小得多,成本也低得多。
(6)加强处理器的并行能力:
RISC指令集非常适合于采用流水线、超流水线和超标量技术,从而实现指令级并行操作,提高处理器的性能。
目前常用的处理器的内部并行操作技术,基本上都是基于RISC体系结构而逐步发展和走向成熟的。
(7)RlSC技术的复杂性在于它的优化编译程序,因此软件系统开发时间比CISC机器要长。
1.3MIPS简介
MIPS是世界上很流行的一种RISC处理器。
MIPS的意思“无内部互锁流水级的微处理器”(Microprocessorwithoutinterlockedpipedstages),其机制是尽量利用软件办法避免流水线中的数据相关问题。
它最早是在80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。
MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。
这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。
MIPS技术公司是美国著名的芯片设计公司,它采用精简指令系统计算结构(RISC)来设计芯片。
和英特尔采用的复杂指令系统计算结构(CISC)相比,RISC具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。
MIPS是出现最早的商业RISC架构芯片之一,新的架构集成了所有原来MIPS指令集,并增加了许多更强大的功能。
MIPS的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系MIPSI、MIPSII、MIPSIII、MIPSIV到MIPSV,嵌入式指令体系MIPS16、MIPS32到MIPS64的发展已经十分成熟。
在设计理念上MIPS强调软硬件协同提高性能,同时简化硬件设计。
1.4MIPS指令集
处理器的指令集体系结构(ISA)由指令集和一系列相应的寄存器约定构成。
基于相同ISA编写的程序,都能够在对应ISA的处理器上运行。
MIPS指令从诞生之日起至今,已经从32位发展到64位。
为了确保程序的向下兼容性,MIPS指令的每一代产品都是在原有指令集的基础上直接扩展新的指令而不舍弃任何指令,即使是64位的指令集的MIPS处理器仍然可以执行32位指令。
本节介绍MIPS指令及其特点,使得我们理解MIPS体系结构,进而完成对MIPS处理器的设计。
1.MIPS指令集总体特点
MIPS指令集具有以下特点:
(1)简单的LOAD/STORE结构。
所有的计算类型的指令均从寄存器堆中读取数据并把结果写入寄存器堆中。
只有LOAD和STORE指令访问存储器。
(2)易于流水线CPU的设计。
MIPS32TM指令集的指令格式非常规整,所有的指令均为32位,而且指令操作码在固定的位置上。
(3)易于编译器的开发。
MIPS指令的寻址方式非常简单,每条指令的操作也非常简单。
2.MIPS指令集的寄存器设置
MIPS32TM有32个通用寄存器,编号从0到31,其中寄存器0的内容总是0,这些通用寄存器组成寄存器堆(registerfile)。
MIPS32TM还定义了32个浮点寄存器。
另外还有一些通用寄存器,PC(programcounter)就是其中的一个,CPU使用它从存储器中取指令。
3.MIPS指令集支持的数据类型
MIPS32TM支持的数据类型有整数和浮点数。
整数包括8位字节、16位半字、32位字和64位双字。
浮点数包括32位单精度和64位双精度。
4.MIPS指令集的指令格式
MIPS32TM的指令格式只有3种,如图1.2所示。
R(register)类型的指令从寄存器堆中读取两个源操作数,计算结果写回寄存器堆。
I(immediate)类型的指令使用一个16位的立即数作为源操作数。
J(jump)类型的指令使用一个26位立即数作为跳转的目标地址(targetaddress)。
图1.2MIPS32TM指令格式
指令格式中的op(opcode)是指令操作码。
rs(registersource)是源操作数的寄存器号。
rd(registerdestination)是目的寄存器号。
rt(registertarget)即可作为源寄存器号,又可作为目的寄存器号,由具体的指令决定。
func(function)可被认为是扩展的操作码。
sa(shiftamount)由移位指令使用,定义移位位数。
immediate是16位立即数,使用之前由指令进行0扩展或符号扩展。
26位target由jump指令使用,用于产生跳转的目标地址。
5.MIPS指令集的指令分类
CPU的指令类型根据其操作的不同,可以分为下面七类。
(1)计算类指令(Computational)
计算类指令用于执行算术操作,乘/除,逻辑操作和对寄存器进行移位操作。
这些指令有两种类型:
寄存器类型和立即数类型。
寄存器类型的指令使用两个源寄存器的值作为源操作数,立即数类型使用一个寄存器和立即数作为源操作数。
根据操作的不同,这些指令分为下面4种:
ALU立即数指令
操作数指令
移位指令
乘/除法指令
(2)Load/Store指令
Load和Store指令都为立即数(I-type)类型,用来在存储器和通用寄存器之间的储存和装载数据。
值得一提的是MIPS指令集只有该类指令访问内存,而其他指令都在寄存器之间进行,所以指令的执行速度较高。
该类指令只有基址寄存器的值加上扩展的16位有符号立即数一种寻址模式,数据的存取方式可以是字节(byte)、字(word)和双字(Doubleword)。
指令格式:
(3)跳转/分支指令(jump&branch)
跳转和分支指令改变程序流。
所有的跳转和分支指令都会产生的一个延迟槽(delayslot)。
紧跟着跳转/分支指令后的指令(delayslot中的指令)也被执行,然后将跳转目标的第一条指令从存储器中取出并执行,这使得指令的流水线执行获得更高效率。
Jump指令
Branch指令
(4)寄存器传送指令
寄存器传送指令用来在系统的通用寄存器(GPR)、乘除法专用寄存器(HI、LO)之间传送数据,这些指令分为有条件传送和无条件传送两种类型。
(5)专用指令
专用指令用来产生软件中断,当执行这类指令的时候,CPU产生异常并转入中断处理程序。
这些指令有系统调用(Syscall),暂停(Break)和Trap指令等,主要用于软件的异常处理。
(6)协处理器指令
协处理器指令对协处理器进行操作。
协处理器的Load和Store指令是立即数类型,每个协处理器指令的格式依协处理器不同而不同。
(7)系统控制协处理器(CP0)指令
系统控制协处理器(CP0)指令执行对CP0寄存器的操作来控制处理器的存储器并执行异常处理。
(6)MIPS指令集的寻址方式
MIPS的寻址方式有以下几种(见图1.3):
寄存器寻址——操作数在寄存器堆中。
立即数寻址——操作数是一个常数,包含在指令中。
基址偏移量寻址——操作数在存储器中,存储器地址由一个寄存器的内容与指令中的常数相加得到。
PC相对寻址——转移指令计算转移地址时使用。
PC的相对值是指令中的一个常数。
伪直接寻址——跳转指令形成转移地址时使用。
指令中的26位目标地址值与PC的高4位拼接,形成30位的存储器“字地址”。
图1.3MIPS32TM指令寻址方式
1.5本章小结
本章简单介绍了流水线技术、RISC技术,同时也对MIPS及其指令集进行了较为详细的介绍。
在下一章中,将具体讨论流水线CPU的实现。
第2章MIPS处理器的实现
本章将介绍顶层结构的连接方式以及各个重点模块的功能。
通过本章的阐述,可以对本设计有一个全局性的理解。
2.1MIPSCPU顶层结构
首先附上MIPSCPU顶层结构图。
图2.1MIPSCPU顶层结构图
图2.1中,程序存储器用来存储程序指令,根据pcF地址取出相应指令;控制单元CU通过对指令解码来确定各个控制信号的值;寄存器为一个拥有32个通用寄存器的寄存器堆;SignExtend可将16位立即数扩展为32位;ALU为算术逻辑运算单元,包括加、减、与、或、比较等基本运算;数据存储器的地址线为5位,对应32个RAM。
此CPU顶层是一个流水线结构,共分IF,ID,EXE,MEM,WB五级。
流水线流水示意图
流水线流水级划分图
下面以级为单元分别予以介绍:
2.2IF级
图2.2顶层结构图的IF级
此级主要完成计算下一条指令地址(+4)及取指操作。
加4操作由加法器完成。
取指操作由程序存储器imem完成。
主要模块说明如表2.1所示。
表2.1指令存储器
器件名称
imem
图示
图2.3
功能描述
实现地址到指令的转换(取指令)
端口描述
input
address——指令地址
output
q——指令输出
端口映射
imemins_imem(
.address(pcF[13:
2]),
.q(q)
);
2.3ID级
图2.4顶层结构图的ID级
此级主要完成指令的译码,源操作数的读取及立即数扩展。
指令译码由控制单元controller完成。
寄存器源操作数读取由regfile完成。
立即数扩展由SignExtend完成。
主要模块说明如表2.2、表2.3所示。
表2.2控制单元
器件名称
controller
图示
图2.5
功能描述
实现指令到控制信号的转换(解码)
端口描述
input
clk——时钟信号
op——指令操作码
funct——扩展的指令操作码
output
regwrite——寄存器写信号
memtoreg——表示写回的数据采用alu的aluout还是dmem的mem_douta
memwrite——存储器写信号
branch——表示是否为有条件跳转信号
branch——表示是否为有条件跳转信号
alucontrol——标识此指令需要做哪种运算
alusrc——alu的b操作数来源于立即数还是rt
regdst——表示regfile写回时采用的地址是rt还是rd
LWSW——表示是否为Load/Store型指令
端口映射
controllerins_controller(
.clk(clk),
.op(instrD[31:
26]),
.funct(instrD[5:
0]),
.regwrite(regwrite),
.memtoreg(memtoreg),
.memwrite(memwrite),
.branch(branch),
.jump(jump),
.alucontrol(alucontrol),
.alusrc(alusrc),
.regdst(regdst),
.LWSW(LWSW)
);
表2.3寄存器
器件名称
regfile
图示
图2.6
功能描述
寄存器堆,实现寄存器数值的存取
端口描述
Input
clk——时钟信号
rst_n——复位,低电平有效
we3——寄存器堆写使能
ra1——rs地址输入端口
ra2——rt地址输入端口
wa3——写回寄存器地址输入端口(可能是rd或rt)
wd3——写回寄存器的数据口
output
rd1——第一操作数输出端口
rd2——第二操作数输出端口
端口映射
regfileins_regfile(
.clk(clk),
.rst_n(rst_n),
.we3(regwriteW),
.ra1(rsD),
.ra2(rtD),
.wd3(resultW),
.wa3(writeregW),
.rd1(srcaDb),
.rd2(srcbDb)
);
2.4EXE级
本级主要由ALU完成算术逻辑运算。
主要模块说明如表2.4所示。
图2.7顶层结构图EXE级
表2.4逻辑运算单元
器件名称
alu
图示
图2.8
功能描述
实现各种运算
端口描述
input
a——第一操作数
b——第二操作数
alucontrol——运算功能码
output
aluresult——结果输出
zero——符号位输出
端口映射
aluins_alu(
.a(srcaE),
.b(srcbE),
.alucontrol(alucontrolE),
.aluresult(aluoutE),
.zero(zero)
);
2.5MEM级
图2.9顶层结构图的MEM级
本级主要完成存储器dmem的读写,并提供了写回寄存器的最终数据。
主要模块说明如表2.5所示。
表2.5数据存储器
器件名称
dmem
图示
图2.10
功能描述
数据存储器,实现数据存取
端口描述
input
clk——时钟信号
A4——存储器地址输入
WD——写数据输入
WE——写使能
output
RD4——数据输出端口
端口映射
dmemins_dmem(
.clk(clk),
.A4(A4),
.WD(writedataM_2),
.WE(memwriteM),
.RD4(mem_douta)
);
2.6WB级
本级主要完成寄存器结果的写回。
图2.11顶层结构图的WB级
2.7外部数据输入中断
本设计还对CPU扩展了外部输入中断。
当外部数据输入使能we_ext_dev_d1为0时(低电平有效),地址线pcF写回给pc,外部数据data_from_ext_dev_d1替代instrF赋值给instrD,以实现当有外部数据输入时的中断操作。
外部数据输入中断结构如图2.12。
图2.12外部数据输入中断结构图
2.8本章小结
本章首先介绍了MIPS