流水线仿真实现与设计毕业论文.doc_第1页
流水线仿真实现与设计毕业论文.doc_第2页
流水线仿真实现与设计毕业论文.doc_第3页
流水线仿真实现与设计毕业论文.doc_第4页
流水线仿真实现与设计毕业论文.doc_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

重庆大学本科学生毕业设计(论文) 摘要重庆大学本科学生毕业设计(论文) 流水线仿真实现与设计学 生:李白斌学 号:20105410指导教师:黄仁专 业:网络工程重庆大学计算机学院二o一四年六月 graduation design (thesis) of chongqing university design and implementation of pipeline simulationundergraduate: baibin lisupervisor: ren huangmajor: network engineering college of computer sciencechongqing universityjune 2014 重庆大学本科学生毕业设计(论文) 摘要 摘 要 重庆大学本科学生毕业设计(论文) abstractabstracti 重庆大学本科学生毕业设计(论文) 目录 目 录摘 要iabstractii1绪论11.1 课题研究背景11.2 国内外相关研究现状11.3 本文研究的主要内容21.4 论文结构22logisim软件32.1 logisim软件的简介32.1.1科学研究领域32.1.2商业领域32.2 logisim元器件的使用3 2.3 logisim的注意事项33 指令流水线技术的总体概述53.1 指令流水线技术的起源5 3.2 指令流水线技术的原理53.3 指令流水线技术在商业上的运用5 4 指令静态五级流水线的总体设计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 指令流水线数据冒险转发器20 4.2.13 指令流水线数据冒险阻塞器25 4.3 指令流水线各个部件的数据通路连接274.3.1 指令流水线的连接原理图274.3.2 指令流水线的logisim连接图275 指令流水线的指令测试295.1 r型指令的执行295.2 lw和sw指令的执行295.3分支指令的执行326 本次毕业设计的总结和对导师的致谢35参考文献36iii 重庆大学本科学生毕业设计(论文) 绪论 1 绪论1.1 课题研究背景 对指令流水线的研究是在于人对计算机的性能需求的日益提高。随着这些年大型软件的不断开发,人对计算机的性能提出了越来越高的要求,这也就是为什么人对指令流水线的研究更加深入,研究只有一个目的,那就是在人日益增长的海量数据下,尽可能的去让计算机高速效率的处理数据。这也就是为什么要研究流水线化的指令处理方式。采用流水线技术后,并没有加速单条指令的执行,每条指令的操作步骤一个也不能少,只是多条指令的不同操作步骤同时执行,因而从总体上看加快了指令流速度,缩短了程序执行时间。为了进一步满足普通流水线设计所不能适应的更高时钟频率的要求,高档位处理器中的流水线的深度(级数)在逐代增多。当流水线深度在56级以上时,通常称为超流水线结构(super pipeline)。显然,流水线级数越多,每级所花的时间越短,时钟周期就可以设计的越短,指令速度越快,指令平均执行时间也就越短。流水线技术是通过增加计算机硬件来实现的。它要求各功能段能互相独立地工作,这就要增加硬件,相应地也加大了控制的复杂性。如果没有互相独立的操作部件,很可能会发生各种冲突。例如要能预取指令,就需增加指令的硬件电路,并把取来的指令存放到指令队列缓冲器中,使微处理器能同时进行取指令和分析、执行指令的操作。1.2 国内外相关研究现状指令流水线技术自从20世纪60年代第一次在高端的大型机中采用,第一次采用指令集静态流水线的计算机是ibm公司生产的ibm7030大型计算机(它又被称为stretch计算机)。在后面研制的cdc6600大型计算机也使用了指令态流水线和多功能部件技术。到了20世纪80年代,流水线技术已经成为精简指令集处理器最为基础的技术了,到了这时流水线技术开始了发展,开始有了新型的流水线技术超标量流水线。超标量流水线是精简指令集系统中采用一种并行处理的技术。它通过将流水线的每一步分别作出与之相对应的细化,增加流水线的级数,和增加指令的主频数,才指令在它的一个时钟周期内完成一个甚至可以达到两个浮点数的操作。超标量流水线的实质就是用更多的处理空间来换取更少的处理时间,大规模的元器件使用流水线技术并且提供指令的工作主频来提高指令的处理速度。超标量流水线技术它有3种独特的改进:1. 它的流水线条数已经不是1条,而改进成两至三条,而且超标量流水线还有十一个独立的元器件执行单元去并行地运行。 2.超标量流水线技术它采用了无序执行技术(out-of-order processing)。这就说明当某一条指令需要一个数据才能执行完成时,它将直接被分流出流水线以等待这条指令所需要的数据。这样做的目的是,防止因为某一条指令没有执行而影响整个流水线的运行从而导致处理速度的下降。 3.它将指令的执行划分为更加细致的阶段,它已经不是采用一般流水线技术的五级流水线,而是采用更多的流水线级数,比如说十四条流水线级数,它会大大提高流水线的运行效率。采用超标量流水线处理器的不同元器件可以集成在同一天流水线上,这就表示执行同一种功能的元器件它可以在一条流水线上,而执行另一种功能的元器件它可以在另一条流水线上。这极大的提高了流水线的运行效率,并且现代的指令都采用了动态执行技术,它包括了分支预测,数据分析,投机执行这几项技术,现代的计算机处理器都使用的是高级指令集并行技术即每一个流水线可以启动多条指令。1.3 本文研究的主要内容 了解指令流水线的基本问题 logisim的基本使用方法 理解指令流水线的数据冒险,学习相关性判断,和分支冒险 在logisim上仿真和实现指令静态流水线1.4 论文结构本文研究了基于risc指令集下,用logisim软件仿真与实现静态流水线的方法。本文共有七章,文章的结构安排如下:第1章 为绪论,这一章描述了这个研究项目所处的研究背景以及其意义,并介绍了这一研究领域国内外的研究状况,接着介绍了本文的研究目的和研究内容,最后展现论文的结构安排。第2章 介绍了logisim软件的基本用法和在设计过程时将会用到元器件主要功能。第3章 介绍了指令流水线技术的总体技术概要,以及指令流水线技术的原理,指令流水线技术的起源和商业上的运用。第4章 阐述了如何具体的设计指令流水线的每一个部件并将它连接成可以完美运行的有机整体。第5章 描述了指令是如何具体的在指令流水线中执行,以及可能会遇到的问题。第6章 总结了本文所阐述的研究,和感谢导师的指导。4 重庆大学本科学生毕业设计(论文) logisim软件的使用与注意事项 2 logisim软件2.1 logisim的简介每一位用户都可以通过它来学习如何创建逻辑电路,方便简单。它是一款基于java的应用程序,方便学生来学习设计和模仿数字逻辑电路,可谓一款不折不扣的学习教育工具,方便你来学习电路的相关工作原理等等。logism中的主要组成部分之一就在于设计并以图示来显示指令或其他中央处理器单位。当然logism中还有其他多种组合分析模型来对你进行帮助,如转换电路,表达式,布尔型和真值表等等。同时还可以重新利用小规模的电路来作为大型电路的一部分。 logisim的特点有:1. 它是一个开源的软件而且免费。2. 它可以用java来编程控件来组成自己设计的逻辑电路图或者是自己设计的比较复杂的指令。3. logisim的操作比较方便,它可以勾画出你需要设计的器件的电路图,它有很方便的器件可以用来构成复杂的逻辑电路。4. 而且它可以用你自己写的真值表来自动生成一个逻辑电路,非常的方便。5. 它可以封装一个你自己设计好的逻辑电路图,作为一个器件去用来组成一个更为复杂的电路设计。6. 它可以分层设计电路图,第一次电路图设计好后,在设计第二次电路图让它嵌套在第一次电路图上。7. logisim还支持打印你自己设计出来的逻辑电路图。2.2 logisim元器件的使用首先在本次仿真过程中,使用logisim中最为重要的元器件是rom器件和ram器件,在本次仿真过程中rom将它作为指令存储器,将预先编译好的指令转换为16进制存储到rom中,而ram它也可以载人预先设计好的数据,并且还可以通过指令流水线的运行,将alu处理过的数据和寄存器里的值存储在ram里面。其次仿真过程中还会用到一个基础并且重要的元器件,那就是寄存器,寄存器它是指令流水线存储单位的基础,计算机很多需要用到的数据都会存储到寄存器中。并且在logisim中可以使用多路选择器,数据分离器,与门,或门,反向电路,加法器,减法器,位扩展器等元器件。2.3 logisim元器件的注意事项 在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达到了一个最佳预测值。6 重庆大学本科学生毕业设计(论文) 指令静态五级流水线的总体设计 4 指令静态五级流水线的总体设计 4.1 指令指令集的设计 本次设计的指令原型机为32位,所以设计的指令系统也是32位的,所以本次设计的指令为: r型指令-取指令,指令译码,alu运算单元,写结果到寄存器。 l型指令-取指令,指令译码,alu运算单元,读存储器阶段,写结果到寄存器。 s型指令-取指令,指令译码,alu运算单元,读存储器阶段。分支转移指令-取指令,指令译码,alu运算单元。 它的指令格式是参照mips 32的指令格式,也是32位了的指令格式。 指令格式表 表4.1op(6)rs(5)rt(5)rd(5)shamt(5)funct(6)op(6)rs(5)rt(5)address(16) 第一个指令格式为r型指令格式,第二个指令格式为i型指令格式。 各个字段的意义如下所示: op:它是一条指令具体是哪一种类型指令的标志码,称为操作码。 rs:在r型指令中它为源寄存器字段,而在取指令和存储指令中它作为基地址与十六位的地址字段相加得到存储地址。 rt:在r型指令中它也为源寄存器字段,在取指令中,它是取出的数据的目的寄存器,而在存储指令中,它是要存入存储器的数据所在的寄存器。 rd:它是r型指令的目的字段。 shamt:位移量。 funct:它被称为功能字段,这个字段主要是通过和aluop控制位组合起来从而确定alu控制位。具体来说,它就是和aluop配合来确定逻辑处理单元具体是执行哪一个处理过程,比如说add,或者是sub指令它都会用到逻辑处理单元,它指令中的funct字段就是来控制逻辑处理单元到底是执行加还是减的步骤。本次设计的指令系统都是由上述所说的指令类型来编译的,它将在指令流水线中运行,以确定设计出的流水线是否符合逻辑。下面将给出具体执行的八条指令: lw $1, 0($0) add $2, $0, $1 lw $3, 1($0) sub $4, $2, $3 beq $1, $2, 7 add $3,$1, $2 add $4,$2, $3 sw $4,2($0)4.2 指令流水线各个部件的设计4.2.1 指令流水线指令控制器 设计指令流水线的指令控制器就要考虑它的指令系统具体是有哪几种类型的指令,下面将会列出指令流水线的具体的各个控制信号的名称以及其作用: 指令流水线控制信号表 表4.2 信号名称 清0效果 置为1效果 regdst 写入寄存器的目标号来自rt字段(20-16位) 写入寄存器的目标号从rd字段(15-11位) regwrite 无 写入寄存器的源寄存器的值置为输入的写入数据 alusrc 第二个alu操作数来自第二个寄存器堆的输出(读数据2) 第二个alu操作数是一个符号扩展指令的低十六位 pcsrc pc的值替换为pc+4pc的值置为分支目标的地址 memread 无 输入地址对应的数据存储器内容置为读入数据的输出 memwrite 无 输入地址对应的数据存储器的内容替换为写入数据的输入 memtoreg alu提供寄存器写数据的输入值 数据存储器提供寄存器写数据的输入值 因为本次设计还有逻辑处理单元的控制码,所以下面将列出逻辑出来单元的控制位的具体控制码: 逻辑控制单元控制码 表4.3 指令操作码 aluop 指令操作 功能字段 alu动作 alu控制输入 取字 00 取字 xxxxxx 加 010 存储字 00 存储字 xxxxxx 加 010 相等分支 01 相等分支 xxxxxx 减 110 r类型 10 加 100000 加 010 r类型 10 加 100010 减 110 r类型 10 与 100100 与 000 r类型 10 或 100101 或 001 alu控制输入码 表4.4alu控制输入 000 001 010 110 功能 与 或 加 减 下面给出流水线的步骤控制线路分布图: 图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指令所需要的控制码,它转换为十六进制为:050。4.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 $1 ,0($0) add $0, $1, $2 lw $3, 1($0) sub $2, $3, $4 beq $1, $2, 7 add $1, $2, $3 位置在第十二号地址:add $2,$3,$4 sw $4, 2($0) 这八条指令将一次在指令流水线中执行,首先会先把它存入在指令寄存器中,因为指令存储器它的数据进制是十六位的,所以会将编译好的二进制代码转换为十六进制的,它一次分别为: 8010000,4011020,8030001,4432022,10220007,4221820,4432020,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字段(1115),读寄存器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.存储在指令译码阶段指令中1115位的数据,将寄存器的数据域设置为五位。9.存储在指令译码阶段指令中1620位的数据,并且将寄存器的数据域设置为五位就可以了。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存储器地址的05位,aluop字段作为rom存储器的67位地址。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.regwrite and (ex/mem.registerrd 0)and (ex/mem.registerrd=id/ex.registerrs))forwarda=10 if(ex/mem.regwrite and (ex/mem.registerrd0) and (ex/mem.registerrd=id/ex.registerrt))forwardb=10(2) mem冒险 if(mem/wb.regwrite and (mem/wb.registerrd0)and (ex/mem.registerrdid/ex.registerrs)and (mem/wb.registerrd=id/ex.registerrs))forwarda=01if(mem/wb.regwrite and (mem/wb.registerrd0)and (ex/mem.registerrdid/ex.registerrt)and (mem/wb.registerrd=id/ex.registerrt))forwardb=01 下面来解释下上式中具体每一个值在指令流水线中代表的含义。 1.ex/mem.regwrite它代表的是保存在指令流水线ex

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论