还剩44页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
本科学生毕业设计(论文)流水线仿真实现与设计GraduationDesignThesisofChongqingUniversityDesignandImplementationofPipelineSimulationUndergraduate:BaibinLiSupervisor:RenHuangMajor:NetworkEngineeringCollegeofComputerScienceChongqingUniversityJune2014毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意作者签名日期毕业论文(设计)授权使用说明本论文(设计)作者完全了解**学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅学校可以公布论文(设计)的全部或部分内容保密的论文(设计)在解密后适用本规定 作者签名指导教师签名日期日期注意事项
1.设计(论文)的内容包括1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)
2.论文字数要求理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于
1.2万字
3.附件包括任务书、开题报告、外文译文、译文原文(复印件)
4.文字、图表要求1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序1)设计(论文)2)附件按照任务书、开题报告、外文译文、译文原文(复印件)次序装订3)其它目录TOC\o1-3\h\z\u摘要IABSTRACTII1绪论
11.1课题研究背景
11.2国内外相关研究现状
11.3本文研究的主要内容
21.4论文结构22Logisim软件
32.1Logisim软件的简介
32.
1.1科学研究领域错误!未定义书签
2.
1.2商业领域错误!未定义书签
2.2Logisim元器件的使用
32.3Logisim的注意事项33指令流水线技术的总体概述
53.1指令流水线技术的起源
53.2指令流水线技术的原理
53.3指令流水线技术在商业上的运用54指令静态五级流水线的总体设计
74.1指令指令集的设计
74.2指令各个部件的设计
84.
2.1指令流水线指令控制器
84.
2.2指令流水线PC寄存器
114.
2.3指令流水线指令存储器
114.
2.4指令流水线数据寄存器堆
124.
2.5指令流水线IF/ID寄存器
144.
2.6指令流水线ID/EX寄存器
154.
2.7指令流水线EX/MEM寄存器
164.
2.8指令流水线MEM/WB寄存器
174.
2.9指令流水线ALU控制器
184.
2.10指令流水线ALU单元
194.
2.11指令流水线数据存储器
204.
2.12指令流水线数据冒险转发器
204.
2.13指令流水线数据冒险阻塞器
254.3指令流水线各个部件的数据通路连接
274.
3.1指令流水线的连接原理图
274.
3.2指令流水线的Logisim连接图275指令流水线的指令测试
295.1R型指令的执行
295.2lw和sw指令的执行
295.3分支指令的执行326本次毕业设计的总结和对导师的致谢35参考文献381绪论
1.1课题研究背景对指令流水线的研究是在于人对计算机的性能需求的日益提高随着这些年大型软件的不断开发,人对计算机的性能提出了越来越高的要求,这也就是为什么人对指令流水线的研究更加深入,研究只有一个目的,那就是在人日益增长的海量数据下,尽可能的去让计算机高速效率的处理数据这也就是为什么要研究流水线化的指令处理方式采用流水线技术后,并没有加速单条指令的执行,每条指令的操作步骤一个也不能少,只是多条指令的不同操作步骤同时执行,因而从总体上看加快了指令流速度,缩短了程序执行时间为了进一步满足普通流水线设计所不能适应的更高时钟频率的要求,高档位处理器中的流水线的深度(级数)在逐代增多当流水线深度在5~6级以上时,通常称为超流水线结构(SuperPipeline)显然,流水线级数越多,每级所花的时间越短,时钟周期就可以设计的越短,指令速度越快,指令平均执行时间也就越短流水线技术是通过增加计算机硬件来实现的它要求各功能段能互相独立地工作,这就要增加硬件,相应地也加大了控制的复杂性如果没有互相独立的操作部件,很可能会发生各种冲突例如要能预取指令,就需增加指令的硬件电路,并把取来的指令存放到指令队列缓冲器中,使微处理器能同时进行取指令和分析、执行指令的操作
1.2国内外相关研究现状指令流水线技术自从20世纪60年代第一次在高端的大型机中采用,第一次采用指令集静态流水线的计算机是IBM公司生产的IBM7030大型计算机(它又被称为Stretch计算机)在后面研制的CDC6600大型计算机也使用了指令态流水线和多功能部件技术到了20世纪80年代,流水线技术已经成为精简指令集处理器最为基础的技术了,到了这时流水线技术开始了发展,开始有了新型的流水线技术——超标量流水线超标量流水线是精简指令集系统中采用一种并行处理的技术它通过将流水线的每一步分别作出与之相对应的细化,增加流水线的级数,和增加指令的主频数,才指令在它的一个时钟周期内完成一个甚至可以达到两个浮点数的操作超标量流水线的实质就是用更多的处理空间来换取更少的处理时间,大规模的元器件使用流水线技术并且提供指令的工作主频来提高指令的处理速度超标量流水线技术它有3种独特的改进
1.它的流水线条数已经不是1条,而改进成两至三条,而且超标量流水线还有十一个独立的元器件执行单元去并行地运行
2.超标量流水线技术它采用了无序执行技术(out-of-orderprocessing)这就说明当某一条指令需要一个数据才能执行完成时,它将直接被分流出流水线以等待这条指令所需要的数据这样做的目的是,防止因为某一条指令没有执行而影响整个流水线的运行从而导致处理速度的下降
3.它将指令的执行划分为更加细致的阶段,它已经不是采用一般流水线技术的五级流水线,而是采用更多的流水线级数,比如说十四条流水线级数,它会大大提高流水线的运行效率采用超标量流水线处理器的不同元器件可以集成在同一天流水线上,这就表示执行同一种功能的元器件它可以在一条流水线上,而执行另一种功能的元器件它可以在另一条流水线上这极大的提高了流水线的运行效率,并且现代的指令都采用了动态执行技术,它包括了分支预测,数据分析,投机执行这几项技术,现代的计算机处理器都使用的是高级指令集并行技术即每一个流水线可以启动多条指令
1.3本文研究的主要内容
①了解指令流水线的基本问题
②Logisim的基本使用方法
③理解指令流水线的数据冒险,学习相关性判断,和分支冒险
④在Logisim上仿真和实现指令静态流水线
1.4论文结构本文研究了基于RISC指令集下,用Logisim软件仿真与实现静态流水线的方法本文共有七章,文章的结构安排如下第1章为绪论,这一章描述了这个研究项目所处的研究背景以及其意义,并介绍了这一研究领域国内外的研究状况,接着介绍了本文的研究目的和研究内容,最后展现论文的结构安排第2章介绍了Logisim软件的基本用法和在设计过程时将会用到元器件主要功能第3章介绍了指令流水线技术的总体技术概要,以及指令流水线技术的原理,指令流水线技术的起源和商业上的运用第4章阐述了如何具体的设计指令流水线的每一个部件并将它连接成可以完美运行的有机整体第5章描述了指令是如何具体的在指令流水线中执行,以及可能会遇到的问题第6章总结了本文所阐述的研究,和感谢导师的指导2Logisim软件
2.1Logisim的简介每一位用户都可以通过它来学习如何创建逻辑电路,方便简单它是一款基于Java的应用程序,方便学生来学习设计和模仿数字逻辑电路,可谓一款不折不扣的学习教育工具,方便你来学习电路的相关工作原理等等Logism中的主要组成部分之一就在于设计并以图示来显示指令或其他中央处理器单位当然Logism中还有其他多种组合分析模型来对你进行帮助,如转换电路,表达式,布尔型和真值表等等同时还可以重新利用小规模的电路来作为大型电路的一部分Logisim的特点有
1.它是一个开源的软件而且免费
2.它可以用Java来编程控件来组成自己设计的逻辑电路图或者是自己设计的比较复杂的指令
3.Logisim的操作比较方便,它可以勾画出你需要设计的器件的电路图,它有很方便的器件可以用来构成复杂的逻辑电路
4.而且它可以用你自己写的真值表来自动生成一个逻辑电路,非常的方便
5.它可以封装一个你自己设计好的逻辑电路图,作为一个器件去用来组成一个更为复杂的电路设计
6.它可以分层设计电路图,第一次电路图设计好后,在设计第二次电路图让它嵌套在第一次电路图上
7.Logisim还支持打印你自己设计出来的逻辑电路图
2.2Logisim元器件的使用首先在本次仿真过程中,使用Logisim中最为重要的元器件是ROM器件和RAM器件,在本次仿真过程中ROM将它作为指令存储器,将预先编译好的指令转换为16进制存储到ROM中,而RAM它也可以载人预先设计好的数据,并且还可以通过指令流水线的运行,将ALU处理过的数据和寄存器里的值存储在RAM里面其次仿真过程中还会用到一个基础并且重要的元器件,那就是寄存器,寄存器它是指令流水线存储单位的基础,计算机很多需要用到的数据都会存储到寄存器中并且在Logisim中可以使用多路选择器,数据分离器,与门,或门,反向电路,加法器,减法器,位扩展器等元器件
2.3Logisim元器件的注意事项在Logisim中最重要的问题就是解决寄存器和RAM中的时序问题因为你可能会出现一种状况,那就是逻辑设计是正确的,但是在具体的执行过程中,寄存器的值可能会在不可控的范围内变化,比如说执行一条指令并要将数据传入寄存器时,上一条指令的数据就可能同时传入即将接收数据的寄存器中,造成数据传输错误解决这个问题的关键就是将寄存器的触发从上升沿触发改成高电平触发,这样就可以让寄存器不会造成数据不可控的改变3指令流水线
3.1指令流水线技术的起源在较早的指令处理器中,人们最先设计的单周期处理器,但是单周期处理它每条指令在一个固定长度的时钟周期内完成它的性能不是特别完美,所以我们拓展到了多周期处理器而在多周期处理器中,指令的每一步将占用一个时钟周期,一个功能单元可以在一条指令的执行过程中使用多次多周期处理器的这种共享可以减少所需的硬件数,并且提高一定的性能但是多周期处理器依然有着一些缺点,比如说不能流水化的执行指令由此人们研究出了指令流水线技术在二十世纪的60年代,IBM公司生产的IBM7030大型计算机是世界上第一台采用流水线技术的计算机这是因为流水线技术可以大大的提高指令的指令执行效率
3.2指令流水线技术原理最经典的指令五级流水线技术,这五个步骤分别为
1.取指令阶段执行一次存储器读操作读出的内容(指令)保存到寄存器IR(指令寄存器)中,IR的内容不是每个时钟都更新,所以IR必须加一个“写使能”控制在取指令阶段结束时,ALU的输出为PC+4,并送到PC的输入端,但不能在每个时钟到来时就更新PC,所以PC也要有“写使能”控制
2.译码/读寄存器堆阶段经过控制逻辑延迟后,控制信号更新为新值执行一次寄存器读操作,并同时进行译码期间ALU空闲,可以考虑“投机计算”分支地址
3.ALU运算阶段ALU运算,输出结果一定要在下个时钟到达之前稳定如果是分支branch指令,该阶段需决定是否将分支地址写入PC
4.读存储器阶段由ALU运算结果作为地址访问存储器,读出数据
5.写结果到寄存器把之前的运算结果或读存储器结果写到寄存器堆中这是指令流水线最经典的原理,它非常简洁的表现出了指令最为基本的过程
3.4指令流水线的冒险
3.4指令流水线技术在商业上的运用近30年来指令流水线技术在不断的发展,从最初的指令五级流水线到英特尔公司奔腾四处理器的二十级流水线现在商业上运用的指令流水线技术它主要是挖掘指令间潜在的并行性,这种并行性被称为指令级并行(ILP)有两种方法可以增加潜在的指令级并行程度第一种是增加流水线深度一重叠更多的指令第二种是复制处理器内部部件的数量,使得每一个流水级可以启动多条指令这个技术被称为多发射因特尔公司在X86系列的处理器就已经运用了指令流水线技术,并且它又在奔腾系列的处理器使用了流水化程度更高的流水线技术,比如说MMX技术,它是将整个流水线的处理过程多增加了一步,那就是指令从代码的高速缓存中预先提取出来,然后将它传送到“预处理”阶段,在“预处理”阶段它将进行指令的译码阶段奔腾系列的处理器它都使用了比较先进的流水线技术,它采用的是动态执行结构,这种结构就是将它本身的寄存器进行重新命名并且在遇到分支指令时使用分支预测来执行指令的结构它非常完美的将乱序执行还有推测执行结合了在一起它的执行过程是,指令都从一个有序执行的流水线进入,然后通过指令的宏指令将这些指令分解成一些简单的微操作,然后再由一个专门处理这些微操作的乱序超标量处理器内核来分别处理因为乱序的超标量流水线处理器里面有几个流水线,这些流水线连接了整型,跳转,浮点和内存执行单元所以几种不同的执行单元就可以非常好的集合在一起,同时在一条流水线里完美的进行执行因特尔推出的酷睿i7处理器,它的总流水线深度为14级,分支错误预测成为为17个时钟周期它一共有48个载入缓冲区和32个存储缓冲区,6个独立功能单元可以在同一时钟周期分别开始执行准备就绪的微操作在采取这些高端指令流水线技术后,i7处理器的性能有了质的提升,它的CPI达到了一个最佳预测值4指令静态五级流水线的总体设计
4.1指令指令集的设计本次设计的指令原型机为32位,所以设计的指令系统也是32位的,所以本次设计的指令为R型指令-----取指令,指令译码,ALU运算单元,写结果到寄存器L型指令-----取指令,指令译码,ALU运算单元,读存储器阶段,写结果到寄存器S型指令------取指令,指令译码,ALU运算单元,读存储器阶段分支转移指令-----取指令,指令译码,ALU运算单元它的指令格式是参照MIPS32的指令格式,也是32位了的指令格式指令格式表表
4.1Op6Rs5Rt5Rd5Shamt5Funct6Op6Rs5Rt5Address16第一个指令格式为R型指令格式,第二个指令格式为I型指令格式各个字段的意义如下所示op:它是一条指令具体是哪一种类型指令的标志码,称为操作码rs:在R型指令中它为源寄存器字段,而在取指令和存储指令中它作为基地址与十六位的地址字段相加得到存储地址rt:在R型指令中它也为源寄存器字段,在取指令中,它是取出的数据的目的寄存器,而在存储指令中,它是要存入存储器的数据所在的寄存器rd:它是R型指令的目的字段shamt:位移量funct:它被称为功能字段,这个字段主要是通过和ALUOp控制位组合起来从而确定ALU控制位具体来说,它就是和ALUOp配合来确定逻辑处理单元具体是执行哪一个处理过程,比如说add,或者是sub指令它都会用到逻辑处理单元,它指令中的funct字段就是来控制逻辑处理单元到底是执行加还是减的步骤本次设计的指令系统都是由上述所说的指令类型来编译的,它将在指令流水线中运行,以确定设计出的流水线是否符合逻辑下面将给出具体执行的八条指令lw$10$0add$2$0$1lw$31$0sub$4$2$3beq$1$27add$3$1$2add$4$2$3sw$42$
04.2指令流水线各个部件的设计
4.
2.1指令流水线指令控制器设计指令流水线的指令控制器就要考虑它的指令系统具体是有哪几种类型的指令,下面将会列出指令流水线的具体的各个控制信号的名称以及其作用指令流水线控制信号表表
4.2信号名称清0效果置为1效果RegDst写入寄存器的目标号来自rt字段(20-16位)写入寄存器的目标号从rd字段(15-11位)RegWrite无写入寄存器的源寄存器的值置为输入的写入数据ALUSrc第二个ALU操作数来自第二个寄存器堆的输出(读数据2)第二个ALU操作数是一个符号扩展指令的低十六位PCSrcPC的值替换为PC+4PC的值置为分支目标的地址MemRead无输入地址对应的数据存储器内容置为读入数据的输出MemWrite无输入地址对应的数据存储器的内容替换为写入数据的输入MemtoRegALU提供寄存器写数据的输入值数据存储器提供寄存器写数据的输入值因为本次设计还有逻辑处理单元的控制码,所以下面将列出逻辑出来单元的控制位的具体控制码逻辑控制单元控制码表
4.3指令操作码ALUOp指令操作功能字段ALU动作ALU控制输入取字00取字XXXXXX加010存储字00存储字XXXXXX加010相等分支01相等分支XXXXXX减110R类型10加100000加010R类型10加100010减110R类型10与100100与000R类型10或100101或001ALU控制输入码表
4.4ALU控制输入000001010110功能与或加减下面给出流水线的步骤控制线路分布图图
4.1下面将详细介绍流水线的控制问题,可以在任何的一条流水线步骤中都加入与之相应的控制码因为每一条控制线路它只会和它所控制的流水线部件相对应,所以只要在流水线的五个步骤中,把控制信号分成五组就可以很好的解决指令流水线控制的问题了将控制信号分为
1.取指令读指令存储器和写PC的控制信号都置为1,因此在指令流水线的取指令阶段并没有什么一定要注意的控制部件
2.指令译码/寄存器堆读阶段与之前的一步是比较相似的,在每一个的指令时钟周期里,指令本身所做的工作都是一样,它就是译码所以根本就不用控制信号来控制它
3.指令的执行和地址的计算阶段在这个阶段里,被设置的信号有RegDst,ALUOp还有ALUSrc指令流水线将根据这些信号来选择结构寄存器,并且可以扩展十六位的地址位让它与寄存器里的值相加从而得到地址
4.存储器的访问阶段在这个步骤中将设置的控制信号有Branch,MemRead和MemWrite这几个信号在Branch信号和分支指令检测单元的输出都为零的时候,PCSrc将不会调用下一个顺序地址,否则它将调用下一个顺序的地址
5.写回阶段在这个阶段中将会设置MemtoReg还有RegWrite信号,MemtoReg信号是决定是将ALU结果还是将存储器数据传输到寄存器堆,而RegWrite信号辅助写入选定的数据下面将给出本次设计的指令流水线指令控制器在具体指令中应该如何如何设置值的具体表格流水线指令控制码表
4.5指令RegDstALUOp1ALUOp2ALUsrcBranchMemReadMemWriteRegWriteMemtoRegR型110000010lw000101011swx0010010xbeqx0101000x当设计出指令流水线控制代码,以及ALU控制代码时,就进行下一步的指令流水线控制器的设计,在本次设计中,使用的是Logisim软件中的ROM存储单元,设计构思是将设计好的ALU控制码直接存储到ROM中,然后将OP字段作为ROM存储单元的地址,即假如OP字段为000001则ROM存储单元输出的是位置在第一个的存储数据,如果OP字段是000000则ROM存储单元输出的是位置在第零位的存储数据存储数据输出后将会使用数据分离器来分了各个部分所需要的控制码如WB阶段需要两位控制码,MEM阶段需要三位控制码,EX执行阶段需要四位控制码下面将给出在Logisim上设计的具体的设计图样图
4.2其中,第零号地址不会存储任何的数据,即它全为0;第一号地址存储的是R型指令所需要的控制码,它转换为十六进制为182;第二号地址存储的是LW指令所需要的控制码,它转换为十六进制为02b;第三号地址存储的是SW指令所需要的控制码,它转换为十六进制为024;第四号地址存储的是beq指令所需要的控制码,它转换为十六进制为
0504.
2.2指令流水线PC寄存器PC寄存器是一个专门用于存储下一条指令地址的寄存器,它的主要功能就是存储下一条指令的地址但是因为设计的是流水线化的指令原型机,则必须要考虑到相等分支指令执行时,PC寄存器的值一定会跳转到指令所确定的地址,并且在发生指令流水线数据相关时PC寄存器必须要将自己锁存起来,这就要求设计PC寄存器时必须有时它暂时不接收数据的PCWrite信号,在PCWrite信号为零时它不接收任何的数据,在PCWrite信号为一时才接收数据PC寄存器有三个部分组成第一部分三十二位数据接收单元,第二部分寄存器存储单元,第三部分三十二位数据传出单元下面将给出在Logisim上设计的PC寄存器的设计图图
4.3其中寄存器的数据位设为三十二位数据域,PC使能信号为一时当第一条指令已经进入译码阶段后,下一条指令的值会立刻存储到PC寄存器中
4.
2.3指令流水线指令存储器指令流水线指令存储器是一个专门存储已经编译好的指令的存储器,它有一个八位的地址接收单元,三十二位的数据传出单元,和三十二位的ROM存储器三个部分构成它的原理是地址单元传输数据到ROM存储器中,则ROM存储器就会传出数据到数据传出单元以便下一步指令的执行下面将给出在Logisim上设计的指令存储器的设计图图
4.4本次设计的指令流水线中,指令存储器中一共存储了八条指令,但是最终只会执行七条指令,因为在执行相等分支指令时会跳过一条指令转而跳转到相等分支指令指定的地址下面将列出设计的具体指令lw$10$0add$0$1$2lw$31$0sub$2$3$4beq$1$27add$1$2$3位置在第十二号地址add$2$3$4sw$42$0这八条指令将一次在指令流水线中执行,首先会先把它存入在指令寄存器中,因为指令存储器它的数据进制是十六位的,所以会将编译好的二进制代码转换为十六进制的,它一次分别为8010000401102080300014432022,1022000742218204432020,c040002这些指令代码全部存入指令存储器中,当指令存储器的地址接收单元接收到数据然后传给指令存储器时,指令存储器就会将地址对应的数据传输到指令存储器传出单元以便进行下一步操作
4.
2.4指令流水线数据寄存器堆指令流水线寄存器它的作用是在指令指定的寄存器中存储指令的执行数据和存储逻辑计算单元的结果由于指令在执行指令的过程中会用到寄存器里的数据,所以如何正确的将数据正确的存入由指令所确定的寄存器中和将指令所确定的寄存器里的数据取出是设计指令流水线数据寄存器堆的关键下面将介绍自己设计的指令流水线数据寄存器堆的主要结构首先寄存器堆一共由五个寄存器组成,其次寄存器堆会有两个五位的读寄存器号端口,两个三十二位的读寄存器数据端口,以及一个五位的写寄存器号端口,一个三十二位的写数据端口寄存器堆由许多寄存器组成,它这些寄存器可以通过设计的寄存器号进行读写存取可以运用对于每一个寄存器的读写口进行解码,再运用触发器组成一个寄存器散列阵,这个就是构造的寄存器堆还有因为读取指令流水线寄存器时不能改变它的值,所以,在设计寄存器的属性时,一定要将寄存器的触发属性设置为高电平触发在确保指令流水线寄存器在读取时值不会改变后,就只用提供寄存器号就可以读出指令流水线寄存器里面的数据了然后在指令流水线寄存器里写数据是,就需要三个输入值,它分别是寄存器号,写入数据以及控制写操作的流水线控制信号指令流水线的寄存器堆设计主要分为两个部分,第一部分是怎样正确的读出指令流水线寄存器里的内容在这个部分中,设计的是采用一对三十二位,数据域也为三十二位的多路复用选择器,将五个寄存器连接到多路复用选择器上,通过两个五位的寄存器号端口,就可以非常准确的读出所选定的寄存器里的内容第二个部分就是如何准确的将数据存入指定的寄存器中,在这个部分将使用一个地址位为五位的解码器,这样这个解码器会有三十二个选择,将解码器与五个与门连接,然后再将指令流水线控制信号中的寄存器写信号与这个与门相连,将与门的输出结果和寄存器的时钟端相连,再将寄存器数据接收单元和寄存器的数据段相连,此结构设计的寄存器可以很好的完成指令流水线执行指令时所用到的关于数据的操作,这样一个完整的寄存器堆就可以设计完成了下面将给出在Logisim上设计的指令流水线寄存器堆设计图图
4.5在这个指令流水线寄存器堆中,最为重要的问题是防止在写入一个指定的寄存器时,另一个寄存器里的值会发生一个不受控制的改变,因为这是由于寄存器的触发属性是在上升边沿触发造成的,必须要将它的触发属性改为高电平触发才可以完美的解决这个问题
4.
2.5指令流水线IF/ID寄存器指令流水线IF/ID寄存器它的作用是在指令的译码阶段存储来自指令存储器中的指令并且将它译码并且存储来自PC寄存器的数据在设计指令流水线IF/ID寄存器的过程中最难解决的是指令流水线化的相关的处理,还有就是相当分支指令的处理首先解决指令流水线化以及其相关的处理方式是在指令流水线IF/ID寄存器中加入一个使能信号端,当使能信号为一时,指令流水线IF/ID寄存器不会接受任何的数据,当使能信号为零时指令流水线IF/ID寄存器才会接受数据第二在遇到相等分支指令时如果指令确实要跳转到其他的地址而不是下一条PC地址则必须将已经进入指令流水线的IF/ID寄存器的指令冲刷掉,这样才能保证指令执行的正确解决这两个问题所设计出的指令流水线IF/ID寄存器将会拥有四个寄存器,一个使能信号端,一个寄存器冲刷段,两个存储来自PC寄存器的数据,两个存储来自指令存储器的数据这四个寄存器都与各自的使能端和冲刷段相连,并且和时钟控制信号相连特别的指出,寄存器冲刷端只和前两个寄存器相连,而使能信号与四个寄存器都相连当寄存器冲刷端信号为一时,寄存器里面的数据将全部置为零下面将给出在Logisim上设计的指令流水线IF/ID寄存器的设计图图
4.6其中指令流水线IF/ID寄存器将指令划分为四个部分,它分别为rd字段(11——15),读寄存器1(五位),读寄存器2(五位),OP字段(六位),符号扩展位(十六位)这些字段会传送到ID/EX寄存器和流水线寄存器堆中以确保指令的正确执行
4.
2.6指令流水线ID/EX寄存器指令流水线ID/EX寄存器它的作用是在指令的ID/EX阶段传输和存储由指令流水线控制器,流水线寄存器堆,符号扩展单元,PC寄存器等流水线部件传送的数据它是整个指令流水线部件中含有寄存器最多的部件,它一共含有十一个寄存器这十一个寄存器分别的功能是
1.存储写回阶段的控制信号,这个信号只有两位二进制数据,所以将寄存器的数据域设置为两位就可以了
2.存入的是存储器访问阶段的控制信号,它的控制信号一共有三位,只要将寄存器的数据域设置为三位就可以
3.存储指令执行/地址计算阶段的控制信号,这个阶段的控制信号位是四位,所以要将寄存器的数据域设置为四位
4.存储PC地址,它是由PC寄存器传来的三十二位数据,所以存储它的寄存器数据域为三十二位
5.存储由流水线寄存器堆传送的第一个数据,该数据也为三十二位,所以寄存器数据域也为三十二位
6.存储由流水线寄存器堆传送的第二个数据,该数据也为三十二位,所以寄存器数据域也为三十二位
7.存储由IF指令译码阶段由符号扩展单元传出的数据,这个数据是三十二位数据,则将寄存器数据域设置为三十二位的数据域
8.存储在指令译码阶段指令中11—15位的数据,将寄存器的数据域设置为五位
9.存储在指令译码阶段指令中16—20位的数据,并且将寄存器的数据域设置为五位就可以了
10.存储IF/ID寄存器中指令Rs字段的内容,字段为五位,则寄存器数据域也设置为五位
11.存储IF/ID寄存器中指令Rt字段的内容,字段为五位,则寄存器数据域也设置为五位下面将给出在Logisim上设计的指令流水线ID/EX寄存器的设计图图
4.7在设计流水线ID/EX寄存器时需要注意的是,在遇到流水线相关时,流水线ID/EX寄存器将不会存储任何来自IF译码阶段的Rt字段的值,因为在设计的测试中,如果不这样做的话,会导致整个指令流水线的锁死
4.
2.7指令流水线EX/MEM寄存器指令流水线EX/MEM寄存器它的作用是存储由PC地址加法器,逻辑处理单元,ID/EX寄存器等部件传入的数据它一共由六个寄存器组成,它分别是第一寄存器存储写回阶段的控制信号,这个信号是由ID/EX寄存器传来的第二寄存器存入存储器访问阶段的控制信号,这个控制信号也是由ID/EX寄存器传入第三寄存器存储的是PC地址加法器传入的数据第四寄存器存储的是由逻辑处理单元传来的数据第五寄存器存储的是由ID/EX寄存器传来的数据第六个寄存器存储的是由多路复用选择器传来的数据下面将给出在Logisim上设计的指令流水线EX/MEM寄存器的设计图图
4.
84.
2.8指令流水线MEM/WB寄存器指令流水线MEM/WB寄存器它的作用是存储由EX/MEM寄存器,数据存储器,逻辑处理单元等部件传来的数据MEM/WB寄存器一共有四个寄存器组成第一个寄存器存储的是写回阶段的控制信号第二个寄存器存储的是由数据存储器传出的数据第三个寄存器存储的是逻辑处理单元得出的结果第四个寄存器存储的是EX/MEM寄存器传出的数据下面将给出在Logisim上设计的指令流水线MEM/WB寄存器的设计图图
4.
94.
2.9指令流水线ALU控制器指令流水线ALU控制器它的主要功能就是根据ALUOp和功能字段来给出逻辑处理单元的输入控制值指令流水线ALU控制器是由一个ROM存储器,功能字段接收器,ALUOp字段接收器组成ALU控制器这里需要考虑的是如何将功能字段和ALUOp组合起来采用的方法就是反向使用数据分离器,如果反向使用数据分离器就可以得到将几个不同的数据组合起来从而得到新的数据会根据表
4.3里的内容,将数据存入ROM存储器中首先将功能字段作为ROM存储器地址的0—5位,ALUOp字段作为ROM存储器的6—7位地址ROM存储器将会通过传输来的地址输出相应的二进制值比如说,R型指令中它的功能字段为100000,它的ALUOp为01则它传输给ROM存储器的地址为01100000下面将给出在Logisim上设计的指令流水线ALU控制器的设计图图
4.
104.
2.10指令流水线ALU单元指令流水线的逻辑处理单元注意的功能是处理寄存器堆送来的数据并将它传输入下一个流水线器件单元在设计这个部件时,所要注意的问题就是流水线ALU单元如何根据ALU控制器传输来的值来选择到底是进行哪一种逻辑处理这个问题是是通过将两个数据接收端分别与两个多路复用选择器相连,然后将ALU控制器的输出数据传到多路复用选择器的数据选择端口上,就可以实现ALU单元根据ALU控制器的传输值来选择具体的逻辑处理过程了整个指令流水线ALU单元是由两个三十二位的数据接收端,两个数据域为三十二位的多路复用选择器,一个三十二位的数据输出单元,两个或门,一个与门,一个加法器,一个减法器组成下面将给出在Logisim上设计的指令流水线ALU单元的设计图图
4.11其中两个多路选择器传输过来的数据会分别传入到与门,或门,加法器,减法器中因为多路复用选择器会通过选择端口出入的选择码来确定到底是哪个输出端口的数据传出,所以就可以很好的解决ALU单元具体的处理步骤是哪一种了再将四个逻辑单元传出的数据和一个四入口的或门相连,最后或门将数据传输至指令流水线ALU单元的数据传出单元中,以便执行指令的下一步阶段操作
4.
2.11指令流水线数据存储器指令流水线的数据存储器的主要功能就是在指令流水线的执行过程中,流水线寄存器堆可以从中提取数据,也可以将流水线寄存器里的数据存入指令流水线存储器中设计RAM存储器要最需要注意的一个问题就是它的时序问题,也就是说,什么时候指令流水线数据存储器应该是存入数据,什么什么它应该读出数据将数据传输到相应的寄存器中那么这个指令流水线数据存储器肯定需要两个信号端口,一个是数据存储器读信号端口,另一个是数据存储器写信号端口综上所述指令流水线数据存储器一共有六个单元组成,它依次是数据存储器地址接收端,数据存储器数据接收端,数据存储器读信号接收端,存储器写信号接收端,数据输出单元,以及最后的RAM存储器单元下面将给出在Logisim上设计的指令流水线数据存储器的设计图图
4.12其中MemWrite就是指令流水线数据存储器的写信号端,而MemRead就是指令流水线数据存储器的读信号端流水线数据存储器的地址接收端为五位,数据接收端和数据传出端都的数据域都为三十二位RAM存储器的数据域也为三十二位,它一共可以存储32个三十二位的数据
4.
2.12指令流水线数据冒险转发器指令流水线的数据冒险转发器这是整个指令流水线设计中最为难设计的部件,因为它的主要功能就是确保整个流水线在执行过程中,如果遇到数据冒险时可以正确的处理流水线的整体运行情况,以确保指令的正确执行所谓数据冒险即是假如有一条指令,它正在执行,但是它所需要的一些执行数据却依赖于它自己之前一条指令执行的结果,这就是数据冒险比如说这个例子,有一条add指令,但是,它的后面一条指令也是一条add指令,而这条add指令缺要用到上一条指令的计算结果add$0$1$2add$3$0$4如果没有数据冒险转发器的话,而编译的指令又不增加三条空操作的话(因为第一条add指令它要到第五步才会执行出它的结果),指令流水线指令的执行结果肯定会出错但是如果加上了指令流水线数据冒险转发器的话,它只会停顿一共时钟周期就可以正常的执行了指令流水线数据冒险转发器的作用就是当流水线处于数据冒险的情况时,流水线数据冒险转发器会在ALU生成结果的同时马上将其结果传输到相对应的逻辑处理单元中而且流水线数据冒险转发器还可以将数据存储器里面的值也传输到相对应的逻辑处理单元中接下来将阐述怎么样设计数据冒险转发器这个逻辑部件才可以做到上述所说的一切这里将给出具体的冒险判别式
(1)EX冒险if(EX/MEM.RegWriteand(EX/MEM.RegisterRd≠0)andEX/MEM.RegisterRd=ID/EX.RegisterRs)ForwardA=10If(EX/MEM.RegWriteandEX/MEM.RegisterRd≠0andEX/MEM.RegisterRd=ID/EX.RegisterRt)ForwardB=102MEM冒险if(MEM/WB.RegWriteandMEM/WB.RegisterRd≠0andEX/MEM.RegisterRd≠ID/EX.RegisterRsandMEM/WB.RegisterRd=ID/EX.RegisterRs)ForwardA=01if(MEM/WB.RegWriteandMEM/WB.RegisterRd≠0andEX/MEM.RegisterRd≠ID/EX.RegisterRtandMEM/WB.RegisterRd=ID/EX.RegisterRt)ForwardB=01下面来解释下上式中具体每一个值在指令流水线中代表的含义
1.EX/MEM.RegWrite它代表的是保存在指令流水线EX/MEM寄存器中的Regwrite信号
2.EX/MEM.RegisterRd它代表的是保存在指令流水线EX/MEM寄存器中的第六号寄存器中的数据
3.ID/EX.RegisterRs它代表的是保存在指令流水线ID/EX寄存器中的第十号寄存器中的数据
4.ID/EX.RegisterRt它代表的是保存在指令流水线ID/EX寄存器中的第十一号寄存器中的数据
5.MEM/WB.RegisterRd它代表的是保存在指令流水线MEM/WB寄存器中第四号寄存器中的数据
6.MEM/WB.RegWrite它代表的就是保存在指令流水线MEM/WB寄存器中的Regwrite信号EX/MEM.RegisterRd=ID/EX.RegisterRs其实指的就是上一条指令它执行的结果是即将要执行指令的第一源寄存器所需要的因为EX/MEM.RegisterRd代表已经执行的指令目的寄存器号,而ID/EX.RegisterRs代表的是下一条指令的第一源寄存器号,当一条指令的目的寄存器号等于下一条指令的第一源寄存器号就说明,这条指令和下一条指令发生了数据相关所以将ALU中第一个端口前的多路复用选择器的选择号置为10EX/MEM.RegisterRd=ID/EX.RegisterRt其实指的就是上一条指令的结果是即将要执行指令的第二源寄存器所需要的因为EX/MEM.RegisterRd代表已经执行的指令目的寄存器号,而ID/EX.RegisterRt代表的是下一条指令的第二源寄存器号,当一条指令的目的寄存器号等于下一条指令的第二源寄存器号就说明,这条指令和下一条指令发生了数据相关所以将ALU中第二个端口前的多路复用选择器的选择号置为10MEM/WB.RegisterRd=ID/EX.RegisterRs其实指的就是上一条指令它执行的结果会存储到数据存储器中但是它确是将要执行指令的第一源寄存器所需要的因为MEM/WB.RegisterRd代表已经执行到MEM阶段指令目的寄存器号,而ID/EX.RegisterRs代表的是下一条指令的第一源寄存器号,当一条指令的目的寄存器号等于下一条指令的第一源寄存器号就说明,这条指令和下一条指令发生了数据相关所以将ALU中第一个端口前的多路复用选择器的选择号置为01MEM/WB.RegisterRd=ID/EX.RegisterRt其实指的就是上一条指令它执行的结果会存储到数据存储器中但是它确是将要执行指令的第二源寄存器所需要的因为MEM/WB.RegisterRd代表已经执行到MEM阶段指令目的寄存器号,而ID/EX.RegisterRt代表的是下一条指令的第二源寄存器号,当一条指令的目的寄存器号等于下一条指令的第一源寄存器号就说明,这条指令和下一条指令发生了数据相关所以将ALU中第二个端口前的多路复用选择器的选择号置为01下面将介绍如何用Logisim来设计这个指令流水线数据冒险转发器首先设计的是MEM冒险阶段ForwardA输出的逻辑图由于它的条件是if(MEM/WB.RegWriteandMEM/WB.RegisterRd≠0andEX/MEM.RegisterRd≠ID/EX.RegisterRsandMEM/WB.RegisterRd=ID/EX.RegisterRs)则的设计方法是将M.RegWrite信号和一个一直置为1的信号进行与运算,将结果连接入反向使用的第一四路数据分离器上再将M.RegRd寄存器号与一个一直置为零的信号用比较器进行比较,而比较器的结果是从大于和等于端口输出,这两个输入的结果将会和一个或门相运算,其运算结果也将连入反向使用的第一四路数据分离器上将EX.RegRd和ID.RegRs两个数据送入比较器中运算,其运算结果也是从大于和等于端口输出,这两个输出结果也会和一个或门相运算,运算的结果将输入反向使用的第一四路数据分离器中继续将M.RegRd接收端和ID.RegRs接收端的数据与比较器相运算,其运算结果是从比较器的相等端口输出,其输出结果也输入反向使用的第一四路数据分离器上其实这个反向使用的第一四路数据分离器的作用就是将前面里提到的四个数据合为一起组成第一ROMForwardA单元的地址在指令执行时,第一ROMForwardA单元会根据第一四路数据分离器传输的地址来输出它所存储的数据下面将给出第一部分在Logisim上面设计的逻辑部件图图
4.13数据冒险转发器第一部分第二部分的逻辑设计的构想是这样的,将第一与门和第一或门的输出结果传送到反向使用的第二四路数据分离器中再将EX.RegRd接收端和ID.RegRt接收端两个数据传入第四比较器想做运算,比较的结果从大于和小于端口输出,而这两个输出结果被传送到第三或门,第三或门的运算结果最后直接传至反向使用的第二四路数据分离器上继续将M.RegRd接收端数据和ID.RegRt接收数据传入到第五比较器中,其比较结果直接传入反向使用的第二四路数据分离器中这样反向使用的第二四路数据分离器就会使用传输过来的四个数据组合起来,组合后的数据将成为第二ROMForwardB单元的地址下面将给出在Logisim上第二部分的逻辑设计图图
4.14数据冒险转发器第二部分下面将介绍第三部分的逻辑设计构想首先将一直置为一的数据和EX.RegWrite信号接收端的数据传输到第二与门进行与运算,运算结果传入反向使用的第一三路数据分离器中然后让EX.RegRd信号接收端的数据和一直置为零信号端的数据都传入第六比较器中,运算的结果从大于和小于端输出,输出的结果将传入第四或门,或门进行运算后将传入反向使用的第一三路数据分离器中继续将EX.RegRd信号接收端的数据和ID.RegRs信号接收端的数据传入第七比较器中,其比较结果直接传入反向使用的第一三路数据分离器中这样一来,反向使用的三路数据分离器就可以将传入的三个数据组合为地址,这个地址将传输至第三ROMForwardA单元,该单元会根据传输的地址来输出相应的数据下面在Logisim上的设计元件图将给出图
4.15数据冒险转发器第三部分最后一个分部的设计构想是这样的,将第五或门的输出数据和第四或门的数据都分别传送到反向使用的第二三路数据分离器中然后将EX.RegRd接收端的数据和ID.RegRt接收端的数据都传送至第八比较器中,比较结果从相等端输入至反向使用的第二三路数据分离器中这样第二三路分离器就可以将传送来的三个数据组合为第四ForwardB单元的地址了有了这个地址,第四ForwardB单元将会输出相应的数据这里会给出最后一部分的Logisim设计图图
4.16数据冒险转发器第四部分下面将给出个数据冒险转发器的设计整体设计图图
4.17数据冒险转发器设计图其中在ForwardA数据传输端和ForwardB数据传输端这两个端口前面都分别加两个与门的目的是确保数据传输的正确性因为两个ROMForwardA单元和两个ROMForwardB单元它传输的值其中一定只能有一个传入ForwardA和ForwardB端口中
4.
2.13指令流水线数据冒险阻塞器指令流水线的数据冒险阻塞器它的作用是在指令流水线执行过程中发生了数据冒险中的阻塞时,它可以很及时的暂停流水线的流动,以确保流水线中所以指令的正确执行导致指令流水线中发生阻塞的原因就是当一条指令准备要读取某个寄存器时,但是,它是它的前一条指令是取出指令,更重要的是取出指令它要写进数据的寄存器是现在正在执行指令所需要读取的寄存器,这时就发生了指令流水线数据冒险下面将给出指令流水线数据冒险阻塞器的逻辑公式设计IfID/EX.MEMReadandID/EX.RegisterRt=IF/ID.RegisterRsorID/EX.RegisterRt=IF/ID.RegisterRt下面来解释下,上述式子每一个值代表的信号来源
1.ID/EX.MEMRead它指的是流水线ID/EX寄存器中保存的MemRead控制信号
2.ID/EX.RegisterRt它指的是流水线ID/EX寄存器中保存的Rt寄存器号,其实它代表的是指令的第二源寄存器号
3.IF/ID.RegisterRs它就是是在流水线IF/ID寄存器中保存的Rs寄存器号,它其实代表的是指令的第一源寄存器号
4.IF/ID.RegisterRt它就是在流水线IF/ID寄存器中Rt保存的寄存器号,它其实代表的是指令的第二源寄存器号ID/EX.MEMRead它不为零时,这时代表指令流水线正在进行取指令阶段,而ID/EX.RegisterRt=IF/ID.RegisterRsorID/EX.RegisterRt=IF/ID.RegisterRt这个代表的是,下一条指令所访问的寄存器和前一条指令所需要写入的寄存器是同一个寄存器所以根据上面的式子就可以在Logisim上设计出指令流水线数据冒险阻塞器了具体的设计步骤如下首先将一个一直置为1数据和ID/EX.MEMRead传输到第一与门进行运算,其运算结果送到第二与门然后将ID/EX.RegisterRt信号和IF/ID.RegisterRs信号都传输至第一比较器中,比较结果从相等端口输出至或门中再将ID/EX.RegisterRt信号和IF/ID.RegisterRt信号送人第二比较器中,比较结果也从相等端口输出,并且也输出至或门中在或门进行运算后数据传输至第二与门中最后第二与门进行运算后,其结果全部传输到三个输出端口中,这三个输出端口的名字分别是PCWrite,IFWrite,控制码清零下面将给出在Logisim上设计的指令流水线数据冒险阻塞器图
4.18数据冒险阻塞器设计
4.3指令流水线各个部件的数据通路连接
4.
3.1指令流水线的连接原理图指令流水线的连接原理图是参考的是在大三上学期所学习的计算机组成原理课本和大三下学期所学计算机体系结构所用课本综合设计的下面将附上本次设计的指令流水线数据通路图图
4.19指令流水线数据通路图
4.
3.2指令流水线的Logisim连接图根据上面所示的指令流水线数据通路图,在Logisim上设计了如下的数据通路连接图图
4.20最终设计图5指令流水线指令测试
5.1R型指令的执行在指令流水线中执行R型指令,这种指令最主要操作是于三个寄存器的读取和写入R型指令结构为R型指令结构表
5.1Op6Rs5Rt5Rd5Shamt5Funct6指令预存在指令存储器中,然后当PC寄存器传送地址到指令存储器中时,指令存储器将指令送入IF/ID寄存器中在IF/ID寄存器中,指令会进入译码阶段,译码后将数据传输到ID/EX寄存器中R型指令是逻辑计算指令,所以寄存器里面的数据将会传输至ALU处理单元进行运算运算的结果传入EX/MEM寄存器,同时,Rd字段也会传入EX/MEM寄存器中计算的结果和Rd最后送人MEM/WB寄存器中,进行最后一步的执行,将计算结果存入Rd字段所选定的寄存器中下面将给出的指令和在Logisim上的最后执行结果图add$2$0$1图
5.1寄存器运行结果
5.2lw和sw型指令的执行指令流水线中lw型指令,它主要的操作就是将数据存储器里的内容存入所指定的寄存器中Lw和sw型指令的结构为lw和sw指令结构表
5.2Op6Rs5Rt5Address16整个lw型指令在译码阶段和其他几种指令是一样的,但是在EX过程中rs字段所选定的寄存器里的数据会和0—15字段在ALU处理单元中相加,所加的结果为lw型指令的取数据的地址然后将取得的数据送入Rt字段所选择的寄存器中下面将给出lw$10$0指令的执行结果图
5.2数据存储器在这里可以看到RAM存储器中,地址为0上的数据为然后执行取指令图
5.32号寄存器存入结果1号寄存器内所存的数据为2,说明的指令执行正确了下面执行一条sw型的指令,如sw$42$0图
5.4寄存器运行结果可以看到4号寄存器里的内容为3,它将存入存储器在地址为02的位置上下面将给出截图图
5.5数据存储器运行结果可以看到MemWrite的信号为1存储器02地址单元的存储数据为3,说明指令正确的执行了
5.3分支指令的执行指令流水线中分支指令是一个比较容易出错的指令,因为流水线化的执行当一条指令译码结束后会立刻进行下一条指令的译码,而分支跳转指令是在比较寄存器中的值后才会判断是否跳转到目标地址分支指令的结构为分支指令结构表
5.3Op6Rs5Rt5Address16下面将给出一条分支跳转指令和其应该跳转的指令beq$1$27add$3$1$2add$4$2$3sw$42$0这个分支指令的执行是先比较,$1和$2寄存器里面的值,如果相等的话,就将相对地址数据7与当前PC值相加,从而得到指令的跳转地址图
5.6寄存器运行结果可以看到图
5.6中1号寄存器和2号寄存器的值都是2,所以分支指令肯定会发生跳转下面将截图出指令的执行结果图
5.7寄存器运行结果在图
5.7中可以看到,2号寄存器里的数据为23号寄存器里的数据为1,4号寄存器里的数据为3,说明指令正确的执行出结果下面将给出本次设计的全部指令,以及它所最后所运行的结果截图lw$10$0add$2$0$1lw$31$0sub$4$2$3beq$1$27add$3$1$2add$4$2$3sw$42$0图
5.8寄存器最终结果图
5.9数据存储器最终结果6本次毕业设计的总结和对导师的致谢在本次毕业设计中,花了1个月时间仔细的研究了指令流水线在执行指令过程中每一个步骤的具体操作其中在设计指令流水线数据冒险转发器上曾经陷入了迷茫,但是在导师的亲切指导下,又得到了灵感这次指令流水线的设计极大的锻炼了对于计算机系统结构的认识,了解到了现在计算机指令流水线发展的瓶颈和趋势这次毕业设计中黄老师一直非常关心着的设计进展,每个星期都定时的让去他的办公室互相交流设计的完成情况,黄老师真的一位对学生负责,学术严谨,道德高尚的老师参考文献
[1]FundamentalsofComputerOrganizationandDesignSivaramaP.DandamudiSchoolofComputerScienceCarletonUniversitySeptember
222002.
[2]MIPS32®ArchitectureForProgrammersVolumeI:IntroductiontotheMIPS32®ArchitectureDocumentNumber:MD00082Revision
2.50July
12005.
[3]MIPS32®ArchitectureForProgrammersVolumeII:TheMIPS32®InstructionSetDocumentNumber:MD00086Revision
2.50July
12005.
[4]MIPS32®ArchitectureForProgrammersVolumeIII:TheMIPS32®PrivilegedResourceArchitectureDocumentNumber:MD00090Revision
2.50July
12005.
[5]计算机体系结构量化研究方法(第五版)[美]Johnl.HennessyDavidA.Patterson著贾洪峰,译北京人民邮电出版社,
2013.
1.
[6]计算机组成与设计硬件/软件接口(第四版)[美]Johnl.HennessyDavidA.Patterson著康继昌樊晓桠安建峰等,译北京机械工业出版社,
2012.
1.
1.
[7]计算机组成与设计硬件/软件接口(第二版)[美]Johnl.HennessyDavidA.Patterson著郑纬民等,译北京清华大学出版社,
2003.
12.
1.
[8]计算机组成与设计硬件/软件接口(第三版)[美]Johnl.HennessyDavidA.Patterson著郑纬民等,译北京机械工业出版社,
2007.
4.
1.
[9]数字电路与逻辑设计范文兵,李浩亮,李敏著,北京清华大学出版社,
2014.
1.
1.
[10]数字电路与逻辑设计邹虹,贺利芳著,北京人民邮电出版社,
2010.
9.。