已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆大学本科学生毕业设计(论文) 摘要重庆大学本科学生毕业设计(论文) 流水线仿真实现与研究学 生:李白斌学 号:20105410指导教师:黄仁专 业:网络工程重庆大学计算机学院二O一四年六月 Graduation Design (Thesis) of Chongqing University Research and Implementation of Pipeline SimulationUndergraduate: Baibin LiSupervisor: Ren HuangMajor: Network Engineering College of Computer ScienceChongqing UniversityJune 2014 重庆大学本科学生毕业设计(论文) 摘要 摘 要近年来,计算机处理器的发展已经取得了巨大的进步,人们对于计算机处理器的研究也越来越深入。人们也想知道处理器是如何运行的,指令流水线又是什么。人们同样想知道在指令流水线中最需要注意的是什么。流水线中的数据是如何传输的。我们应该以后如何改进流水线,以提高流水线的性能。本文先介绍了流水线的最基本的原理,然后又介绍了流水线在商业上的运用,并且用Logisim软件设计了一个流水线原型。本文在中间部分会介绍本次设计的指令类型和指令格式。本文的后半部分还介绍了流水线各个部件的设计。通过介绍流水线每一个部件的设计,来一步步的阐述整个流水线的运行特点。并且本文还会介绍存储器,寄存器,指令控制器等部件的设计,给出流水线的数据通路图,和在Logisim上设计的实际数据通路图。本文在后半部分给出每种类型的指令所执行的结果。而且指令的执行结果都可以从数据寄存器里看出。本文在最后总结了这次流水线的设计与仿真。关键词:指令流水线,Logisim软件,指令格式,寄存器 重庆大学本科学生毕业设计(论文) ABSTRACTABSTRACT In recent years, the development of computer processor has made great progress, the people also more and more in-depth research on computer processor.People want to know how the processor is running, and what is the instruction pipeline.People also want to know what is in the instruction pipeline most in need of attention.The pipeline data is how to transfer. How should we improve the assembly line,to improve the pipeline performance. This paper first introduces the basic principle of pipeline, and then introduces the use of pipeline in business, and designed a pipeline with Logisim software prototype.In this paper, in the middle section will introduce the design of instructions type and format.Second part of this article are introduced the design of pipeline the parts.Through the introduction of the design of pipeline every part, step by step, to explain the whole pipeline operation characteristics.And this paper also introduces the memory, register, instruction control unit and other parts of design, pipeline data path diagram is given, and the design of the actual data path diagram in Logisim.In this paper, the back half of the given results of each type of instruction. And the instruction execution results can see from the data register.In this paper, in the final summed up the pipeline design and simulation.Key words: Command line, Logisim Software, Instruction Format,RegisterI 重庆大学本科学生毕业设计(论文) 目录 目 录摘 要IABSTRACTII1 绪论11.1 课题研究背景11.2 国内外相关研究现状11.3 本文研究的主要内容21.4 论文结构22 Logisim软件32.1 Logisim的简介32.2 Logisim元器件的使用32.3 Logisim元器件的注意事项43 流水线总体概述53.1 指令流水线技术的起源53.2 指令流水线技术原理53.4 指令流水线的冒险53.4 指令流水线技术在商业上的运用64 流水线的总体设计84.1 指令集的设计84.2 指令流水线各个部件的设计94.2.2 流水线指令存储器104.2.3 流水线数据寄存器堆114.2.4 流水线IF/ID寄存器124.2.5 流水线ID/EX寄存器134.2.6 流水线EX/MEM寄存器154.2.7 流水线MEM/WB寄存器164.2.8 流水线ALU控制器174.2.9 流水线ALU单元184.2.10 流水线数据存储器194.2.11 流水线数据冒险转发器204.2.12 流水线数据冒险阻塞器254.2.13 流水线控制器274.3 流水线各个部件数据通路连接304.3.1 流水线的连接原理图304.3.2 流水线的Logisim连接图305 流水线测试325.1 R型指令的执行325.2 lw和sw型指令的执行325.3 分支指令的执行356 总结与展望38参考文献40III 重庆大学本科学生毕业设计(论文) 绪论 1 绪论1.1 课题研究背景 对指令流水线的研究是在于人对计算机的性能需求的日益提高。随着这些年大型软件的不断开发,人对计算机的性能提出了越来越高的要求,这也就是为什么人对指令流水线的研究更加深入,研究只有一个目的,那就是在人们日益增长的海量数据下,尽可能的去让计算机高速效率的处理数据。这也就是为什么要研究流水线化的指令处理方式。采用流水线技术后,并没有加速单条指令的执行,每条指令的操作步骤一个也不能少,只是多条指令的不同操作步骤同时执行,因而从总体上看加快了指令流速度,缩短了程序执行时间。为了进一步满足普通流水线设计所不能适应的更高时钟频率的要求,高档位处理器中的流水线的深度(级数)在逐代增多。当流水线深度在56级以上时,通常称为超流水线结构(Super Pipeline)。显然,流水线级数越多,每级所花的时间越短,时钟周期就可以设计的越短,指令速度越快,指令平均执行时间也就越短。流水线技术是通过增加计算机硬件来实现的。它要求各功能段能互相独立地工作,这就要增加硬件,相应地也加大了控制的复杂性。如果没有互相独立的操作部件,很可能会发生各种冲突。例如要能预取指令,就需增加指令的硬件电路,并把取来的指令存放到指令队列缓冲器中,使微处理器能同时进行取指令和分析、执行指令的操作。1.2 国内外相关研究现状指令流水线技术自从20世纪60年代第一次在高端的大型机中采用,第一次采用指令集静态流水线的计算机是IBM公司生产的IBM7030大型计算机(它又被称为Stretch计算机)。在后面研制的CDC6600大型计算机也使用了指令态流水线和多功能部件技术。到了20世纪80年代,流水线技术已经成为精简指令集处理器最为基础的技术了,到了这时流水线技术开始了发展,开始有了新型的流水线技术超标量流水线。超标量流水线是精简指令集系统中采用一种并行处理的技术。它通过将流水线的每一步分别作出与之相对应的细化,增加流水线的级数,和增加指令的主频数,才指令在它的一个时钟周期内完成一个甚至可以达到两个浮点数的操作。超标量流水线的实质就是用更多的处理空间来换取更少的处理时间,大规模的元器件使用流水线技术并且提供指令的工作主频来提高指令的处理速度。超标量流水线技术它有3种独特的改进: 它的流水线条数已经不是1条,而改进成两至三条,而且超标量流水线还有十一个独立的元器件执行单元去并行地运行。 超标量流水线技术它采用了无序执行技术(out-of-order processing)。这就说明当某一条指令需要一个数据才能执行完成时,它将直接被分流出流水线以等待这条指令所需要的数据。这样做的目的是,防止因为某一条指令没有执行而影响整个流水线的运行从而导致处理速度的下降。 它将指令的执行划分为更加细致的阶段,它已经不是采用一般流水线技术的五级流水线,而是采用更多的流水线级数,比如说十四条流水线级数,它会大大提高流水线的运行效率。采用超标量流水线处理器的不同元器件可以集成在同一条流水线上,这就表示执行同一种功能的元器件它可以在一条流水线上,而执行另一种功能的元器件它可以在另一条流水线上。这极大的提高了流水线的运行效率,并且现代的指令都采用了动态执行技术,它包括了分支预测,数据分析,投机执行这几项技术,现代的计算机处理器都使用的是高级指令集并行技术即每一个流水线可以启动多条指令。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的特点有:它是一个开源的软件而且免费。它可以用Java来编程控件来组成自己设计的逻辑电路图或者是自己设计的比较复杂的指令。Logisim的操作比较方便,它可以勾画出你需要设计的器件的电路图,它有很方便的器件可以用来构成复杂的逻辑电路。而且它可以用你自己写的真值表来自动生成一个逻辑电路,非常的方便。它可以封装一个你自己设计好的逻辑电路图,作为一个器件去用来组成一个更为复杂的电路设计。它可以分层设计电路图,第一次电路图设计好后,在设计第二次电路图让它嵌套在第一次电路图上。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 指令流水线技术原理 最经典的指令五级流水线技术,这五个步骤分别为:取指令阶段 执行一次存储器读操作读出的内容(指令)保存到寄存器IR(指令寄存器)中,IR的内容不是每个时钟都更新,所以IR必须加一个“写使能”控制。在取指令阶段结束时,ALU的输出为PC+4,并送到PC的输入端,但不能在每个时钟到来时就更新PC,所以PC也要有“写使能”控制。译码/读寄存器堆阶段经过控制逻辑延迟后,控制信号更新为新值。执行一次寄存器读操作,并同时进行译码。期间ALU空闲,可以考虑“投机计算”分支地址。指令执行或地址计算阶段ALU运算,输出结果一定要在下个时钟到达之前稳定。如果是分支branch指令,该阶段需决定是否将分支地址写入PC。存储器访问由ALU运算结果作为地址访问存储器,读出数据。写回 把之前的运算结果或读存储器结果写到寄存器堆中。 这是指令流水线最经典的原理,它非常简洁的表现出了指令最为基本的过程。3.3 指令流水线的冒险 在流水化的执行过程中,存在这样一个情况,在下一个时钟周期中下一条指令不能执行。这种情况称为流水线冒险。指令流水线一共会有三种流水线冒险。它们是: 结构冒险。即硬件不支持多条指令在同一个时钟周期执行。假如流水线结构只有一个存储器而不是两个存储器,那么在某一个时钟周期,第一条指令在访存存储器的同时,可能其他指令也会使用同一个存储器。这就造成了结构冒险。解决的方法是在流水线中添加存储器。 控制冒险。它指的是决定一条指令是否执行的条件,它正好在前一条指令执行的结果中。这比如是beq指令,它是最有可能发生控制冒险的。我们有两种解决方法,一种是阻塞,其结果就像在流水线中插入空操作一样。但是这种方法使性能下降太多,而我们采用另一种方法。第二种方法叫预测。简单的预测方法是总预测分支会失败,当预测成功是,流水线不会停顿,只有当预测失败时流水线才会停顿。 数据冒险。即一条指令依赖于仍然在流水线当中执行的前一条指令的结果。例如:add $s0,$t0,$t1 sub $t2,$s0,$t3 以上指令其中,减法指令需要加法指令的计算结果才能继续执行,这就是数据冒险。其解决方法是在流水线中加一个转发器,即在add指令执行过程中在ALU单元处理过后其结果直接传到sub指令执行过程中需要的部件上。3.4 指令流水线技术在商业上的运用 英特尔公司奔腾四处理器的二十级流水线。现在商业上运用的指令流水线技术它主要是挖掘指令间潜在的并行性,这种并行性被称为指令级并行(ILP)。有两种方法可以增加潜在的指令级并行程度。第一种是增加流水线深度一重叠更多的指令。第二种是复制处理器内部部件的数量,使得每一个流水级可以启动多条指令。这个技术被称为多发射。因特尔公司在X86系列的处理器就已经运用了指令流水线技术,并且它又在奔腾系列的处理器使用了流水化程度更高的流水线技术,比如说MMX技术,它是将整个流水线的处理过程多增加了一步,那就是指令从代码的高速缓存中预先提取出来,然后将它传送到“预处理”阶段,在“预处理”阶段它将进行指令的译码阶段。奔腾系列的处理器它都使用了比较先进的流水线技术,它采用的是动态执行结构,这种结构就是将它本身的寄存器进行重新命名并且在遇到分支指令时使用分支预测来执行指令的结构。它非常完美的将乱序执行还有推测执行结合了在一起。它的执行过程是,指令都从一个有序执行的流水线进入,然后通过指令的宏指令将这些指令分解成一些简单的微操作,然后再由一个专门处理这些微操作的乱序超标量处理器内核来分别处理。因为乱序的超标量流水线处理器里面有几个流水线,这些流水线连接了整型,跳转,浮点和内存执行单元。所以几种不同的执行单元就可以非常好的集合在一起,同时在一条流水线里完美的进行执行。因特尔推出的酷睿i7处理器,它的总流水线深度为14级,分支错误预测成为为17个时钟周期。它一共有48个载入缓冲区和32个存储缓冲区,6个独立功能单元可以在同一时钟周期分别开始执行准备就绪的微操作。在采取这些高端指令流水线技术后,i7处理器的性能有了质的提升,它的CPI达到了一个最佳预测值。7 重庆大学本科学生毕业设计(论文) 流水线的总体设计 4 流水线的总体设计 4.1 指令集的设计 本次设计的指令原型机为32位,所以设计的指令系统也是32位的,所以本次设计指令和指令的执行过程为: R型指令-取指令,指令译码,EX执行阶段,写结果到寄存器。 L型指令-取指令,指令译码,地址计算,存储器访问,写结果到寄存器。 S型指令-取指令,指令译码,地址计算,存储器访问。分支转移指令-取指令,指令译码,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:它是一条指令具体是哪一种类型指令的标志码,称为操作码。它编码在指令的第2632位上。 rs:在R型指令中它为源寄存器字段,而在取指令和存储指令中它作为基地址与十六位的地址字段相加得到存储地址。它编码在指令的第2521位上。 rt:在R型指令中它也为源寄存器字段,在取指令中,它是取出的数据的目的寄存器,而在存储指令中,它是要存入存储器的数据所在的寄存器。它编码在指令的2016位上。 rd:它是R型指令的目的字段。它编码在指令的第1511位上。 shamt:位移量。它编码在指令的第106位上。 funct:它被称为功能字段,这个字段主要是通过和ALUOp控制位组合起来从而确定ALU控制位。具体来说,它就是和ALUOp配合来确定逻辑处理单元具体是执行哪一个处理过程,比如说add,或者是sub指令它都会用到逻辑处理单元,它指令中的funct字段就是来控制逻辑处理单元到底是执行加还是减的步骤。本次设计的指令系统都是由上述所说的指令类型来编译的,它将在指令流水线中运行,以确定设计出的流水线是否符合逻辑。它编码在指令的第50位上。 Address:它被称为地址字段,其作用是在执行分支指令时与当前PC值相加得到下一条指令的跳转地址。它编码在指令的第150位上。下面将给出具体执行的八条指令: 指令编码表 表4.2 指令字地址 助记符 机器码 00 lw $1, 0($0) 8010000 01 add $2, $0,$1 4011020 02 lw $3, 1($0) 8030001 03 sub $4, $2, $3 4432022 04 beq $1, $2, 710220007 05 add $3, $1,$2 4221820 11 add $4,$2,$34432020 12 sw $4, 2($0) c0400024.2 指令流水线各个部件的设计4.2.1 流水线PC寄存器 PC寄存器是一个专门用于存储下一条指令地址的寄存器,它的主要功能就是存储下一条指令的地址。但是因为设计的是流水线化的指令原型机,则必须要考虑到相等分支指令执行时,PC寄存器的值一定会跳转到指令所确定的地址,并且在发生指令流水线数据相关时PC寄存器必须要将自己锁存起来,这就要求设计PC寄存器时必须有时它暂时不接收数据的PCWrite信号,在PCWrite信号为零时它不接收任何的数据,在PCWrite信号为一时才接收数据。PC寄存器有三个部分组成:第一部分32位数据接收单元,第二部分寄存器存储单元,第三部分32位数据传出单元。下面将给出在Logisim上设计的PC寄存器的设计图: 图4.1 PC寄存器设计图其中寄存器的数据位设为32位数据域,PC使能信号为一时当第一条指令已经进入译码阶段后,下一条指令的值会立刻存储到PC寄存器中。4.2.2 流水线指令存储器 指令流水线指令存储器是一个专门存储已经编译好的指令的存储器,它有一个八位的地址接收单元,32位的数据传出单元,和32位的ROM存储器三个部分构成。它的原理是地址单元传输数据到ROM存储器中,则ROM存储器就会传出数据到数据传出单元以便下一步指令的执行。下面将给出在Logisim上设计的指令存储器的设计图: 图4.2 指令存储器设计图 本次设计的指令流水线中,指令存储器中一共有八条指令,但是最终只会执行七条指令,因为在执行相等分支指令时会跳过一条指令转而跳转到相等分支指令指定的地址。 下面将列出设计的具体指令: 指令编码表 表4.3 指令字地址 助记符 机器码 00 lw $1, 0($0) 8010000 01 add $2, $0,$1 4011020 02 lw $3, 1($0) 8030001 03 sub $4, $2, $3 4432022 04 beq $1, $2, 710220007 05 add $3, $1,$2 4221820 11 add $4,$2,$34432020 12 sw $4, 2($0) c040002 这些指令代码全部存入指令存储器中,存储器会根据传来的地址来输出相应的指令。4.2.3 流水线数据寄存器堆 流水线寄存器堆的作用是读出指令所指定的寄存器中的数据或者是将数据存入指令所指定的寄存器内。由于指令在执行指令的过程中会用到寄存器里的数据,所以如何正确的将数据正确的存入由指令所确定的寄存器中和将指令所确定的寄存器里的数据取出是设计指令流水线数据寄存器堆的关键。 下面将介绍自己设计的指令流水线数据寄存器堆的主要结构: 首先寄存器堆一共由五个寄存器组成,其次寄存器堆会有两个五位的读寄存器号端口,两个32位的读寄存器数据端口,以及一个五位的写寄存器号端口,一个32位的写数据端口。寄存器堆由许多寄存器组成,它这些寄存器可以通过设计的寄存器号进行读写存取。可以运用对于每一个寄存器的读写口进行解码,再运用触发器组成一个寄存器散列阵,这个就是构造的寄存器堆。还有因为读取指令流水线寄存器时不能改变它的值,所以,在设计寄存器的属性时,一定要将寄存器的触发属性设置为高电平触发。在确保指令流水线寄存器在读取时值不会改变后,就只用提供寄存器号就可以读出指令流水线寄存器里面的数据了。然后在指令流水线寄存器里写数据是,就需要三个输入值,它分别是寄存器号,写入数据以及控制写操作的流水线控制信号。指令流水线的寄存器堆设计主要分为两个部分,第一部分是根据指令的rs或者rt字段来正确的读出流水线寄存器堆的数据。在这个部分中,设计的是采用一对32位,数据域也为32位的多路复用选择器,将五个寄存器连接到多路复用选择器上,通过两个五位的寄存器号端口,就可以非常准确的读出所选定的寄存器里的内容。第二个部分就是如何准确的将数据存入指定的寄存器中,在这个部分将使用一个地址位为五位的解码器,这样这个解码器会有32个选择,将解码器与五个与门连接,然后再将指令流水线控制信号中的寄存器写信号与这个与门相连,将与门的输出结果和寄存器的时钟端相连,再将寄存器数据接收单元和寄存器的数据段相连,这样的设计的寄存器可以很好的完成指令流水线执行指令时所用到的关于数据的操作,这样一个完整的寄存器堆就可以设计完成了。下面将给出在Logisim上设计的指令流水线寄存器堆设计图: 图4.3 数据寄存器堆设计图 在这个指令流水线寄存器堆中,最为重要的问题是防止在写入一个指定的寄存器时,另一个寄存器里的值会发生一个不受控制的改变,因为这是由于寄存器的触发属性是在上升边沿触发造成的,必须要将它的触发属性改为高电平触发才可以完美的解决这个问题。4.2.4 流水线IF/ID寄存器 指令流水线IF/ID寄存器它的作用是在指令的译码阶段存储来自指令存储器中的指令并且将它译码并且存储来自PC寄存器的数据。在设计指令流水线IF/ID寄存器的过程中最难解决的是指令流水线化的相关的处理,还有就是相当分支指令的处理。首先解决指令流水线化以及其相关的处理方式是在指令流水线IF/ID寄存器中加入一个使能信号端,当使能信号为一时,指令流水线IF/ID寄存器不会接受任何的数据,当使能信号为零时指令流水线IF/ID寄存器才会接受数据。第二在遇到相等分支指令时如果指令确实要跳转到其他的地址而不是下一条PC地址则必须将已经进入指令流水线的IF/ID寄存器的指令冲刷掉,这样才能保证指令执行的正确。解决这两个问题所设计出的指令流水线IF/ID寄存器将会拥有四个寄存器,一个使能信号端,一个寄存器冲刷段,两个存储来自PC寄存器的数据,两个存储来自指令存储器的数据。这四个寄存器都与各自的使能端和冲刷段相连,并且和时钟控制信号相连。特别的指出,寄存器冲刷端只和前两个寄存器相连,而使能信号与四个寄存器都相连。当寄存器冲刷端信号为一时,寄存器里面的数据将全部置为零。下面将给出在Logisim上设计的指令流水线IF/ID寄存器的设计图: 图4.4 IF/ID寄存器设计图 IF/ID寄存器将指令划分为四个字段,它分别为rd字段(1115),读寄存器1(五位),读寄存器2(五位),OP字段(六位),符号扩展位(十六位)。这些字段会传送到ID/EX寄存器和流水线寄存器堆中以确保指令的正确执行。4.2.5 流水线ID/EX寄存器 指令流水线ID/EX寄存器它的作用是在指令的ID/EX阶段传输和存储由指令流水线控制器,流水线寄存器堆,符号扩展单元,PC寄存器等流水线部件传送的数据。它是整个指令流水线部件中含有寄存器最多的部件,它一共含有十一个寄存器。这十一个寄存器分别的功能是: 存储写回阶段的控制信号,这个信号只有两位二进制数据,所以将寄存器的数据域设置为两位就可以了。 存入的是存储器访问阶段的控制信号,它的控制信号一共有三位,只要将寄存器的数据域设置为三位就可以。 存储指令执行/地址计算阶段的控制信号,这个阶段的控制信号位是四位,所以要将寄存器的数据域设置为四位。 存储PC地址,它是由PC寄存器传来的32位数据,所以存储它的寄存器数据域为32位。 存储由流水线寄存器堆传送的第一个数据,该数据也为32位,所以寄存器数据域也为32位。 存储由流水线寄存器堆传送的第二个数据,该数据也为32位,所以寄存器数据域也为32位。 存储由IF指令译码阶段由符号扩展单元传出的数据,这个数据是32位数据,则将寄存器数据域设置为32位的数据域。 存储在指令译码阶段指令中1115位的数据,将寄存器的数据域设置为五位。 存储在指令译码阶段指令中1620位的数据,并且将寄存器的数据域设置为五位就可以了。 存储IF/ID寄存器中指令Rs字段的内容,字段为五位,则寄存器数据域也设置为五位。 存储IF/ID寄存器中指令Rt字段的内容,字段为五位,则寄存器数据域也设置为五位。下面将给出在Logisim上设计的指令流水线ID/EX寄存器的设计图: 图4.5 ID/EX寄存器设计图 在设计流水线ID/EX寄存器时需要注意的是,在遇到流水线相关时,流水线ID/EX寄存器将不会存储任何来自IF译码阶段的Rt字段的值,因为在设计的测试中,如果不这样做的话,会导致整个指令流水线的锁死。4.2.6 流水线EX/MEM寄存器 指令流水线EX/MEM寄存器它的作用是存储由PC地址加法器,逻辑处理单元,ID/EX寄存器等部件传入的数据。它一共由六个寄存器组成,它分别是第一寄存器存储写回阶段的控制信号,这个信号是由ID/EX寄存器传来的。第二寄存器存入存储器访问阶段的控制信号,这个控制信号也是由ID/EX寄存器传入。第三寄存器存储的是PC地址加法器传入的数据。第四寄存器存储的是由逻辑处理单元传来的数据。第五寄存器存储的是由ID/EX寄存器传来的数据。第六个寄存器存储的是由多路复用选择器传来的数据。下面将给出在Logisim上设计的指令流水线EX/MEM寄存器的设计图: 图4.6 EX/MEM寄存器设计图4.2.7 流水线MEM/WB寄存器 指令流水线MEM/WB寄存器它的作用是存储由EX/MEM寄存器,数据存储器,逻辑处理单元等部件传来的数据。MEM/WB寄存器一共有四个寄存器组成。第一个寄存器存储的是写回阶段的控制信号。第二个寄存器存储的是由数据存储器传出的数据。第三个寄存器存储的是逻辑处理单元得出的结果。第四个寄存器存储的是EX/MEM寄存器传出的数据。下面将给出在Logisim上设计的指令流水线MEM/WB寄存器的设计图: 图4.7 MEM/WB寄存器设计图4.2.8 流水线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.8 ALU控制器设计图4.2.9 流水线ALU单元 指令流水线的逻辑处理单元注意的功能是处理寄存器堆送来的数据并将它传输入下一个流水线器件单元。在设计这个部件时,所要注意的问题就是流水线ALU单元如何根据ALU控制器传输来的值来选择到底是进行哪一种逻辑处理。这个问题是是通过将两个数据接收端分别与两个多路复用选择器相连,然后将ALU控制器的输出数据传到多路复用选择器的数据选择端口上,就可以实现ALU单元根据ALU控制器的传输值来选择具体的逻辑处理过程了。整个指令流水线ALU单元是由两个32位的数据接收端,两个数据域为32位的多路复用选择器,一个32位的数据输出单元,两个或门,一个与门,一个加法器,一个减法器组成。下面将给出在Logisim上设计的指令流水线ALU单元的设计图: 图4.9 ALU 处理单元设计图其中两个多路选择器传输过来的数据会分别传入到与门,或门,加法器,减法器中。因为多路复用选择器会通过选择端口出入的选择码来确定到底是哪个输出端口的数据传出,所以就可以很好的解决ALU单元具体的处理步骤是哪一种了。再将四个逻辑单元传出的数据和一个四入口的或门相连,最后或门将数据传输至指令流水线ALU单元的数据传出单元中,以便执行指令的下一步阶段操作。4.2.10 流水线数据存储器指令流水线的数据存储器的主要功能就是在指令流水线的执行过程中,流水线寄存器堆可以从中提取数据,也可以将流水线寄存器里的数据存入指令流水线存储器中。设计RAM存储器要最需要注意的一个问题就是它的时序问题,也就是说,什么时候指令流水线数据存储器应该是存入数据,什么什么它应该读出数据将数据传输到相应的寄存器中。那么这个指令流水线数据存储器肯定需要两个信号端口,一个是数据存储器读信号端口,另一个是数据存储器写信号端口。综上所述指令流水线数据存储器一共有六个单元组成,它依次是:数据存储器地址接收端,数据存储器数据接收端,数据存储器读信号接收端,存储器写信号接收端,数据输出单元,以及最后的RAM存储器单元。下面将给出在Logisim上设计的指令流水线数据存储器的设计图: 图4.10 数据存储器设计图其中MemWrite就是指令流水线数据存储器的写信号端,而MemRead就是指令流水线数据存储器的读信号端。流水线数据存储器的地址接收端为五位,数据接收端和数据传出端都的数据域都为32位。RAM存储器的数据域也为32位,它一共可以存储32个32位的数据。4.2.11 流水线数据冒险转发器指令流水线的数据冒险转发器这是整个指令流水线设计中最为难设计的部件,因为它的主要功能就是确保整个流水线在执行过程中,如果遇到数据冒险时可以正确的处理流水线的整体运行情况,以确保指令的正确执行。所谓数据冒险即是假如有一条指令,它正在执行,但是它所需要的一些执行数据却依赖于它自己之前一条指令执行的结果,这就是数据冒险。比如说这个例子,有一条add指令,但是,它的后面一条指令也是一条add指令,而这条add指令缺要用到上一条指令的计算结果:add $0,$1,$2add $3,$0,$4如果没有数据冒险转发器的话,而编译的指令又不增加三条空操作的话(因为第一条add指令它要到第五步才会执行出它的结果),指令流水线指令的执行结果肯定会出错。但是如果加上了指令流水线数据冒险转发器的话,它只会停顿一共时钟周期就可以正常的执行了。指令流水线数据冒险转发器的作用就是当流水线处于数据冒险的情况时,流水线数据冒险转发器会在ALU生成结果的同时马上将其结果传输到相对应的逻辑处理单元中。而且流水线数据冒险转发器还可以将数据存储器里面的值也传输到相对应的逻辑处理单元中。接下来将阐述怎么样设计数据冒险转发器这个逻辑部件才可以做到上述所说的一切。这里将给出具体的冒险判别式: 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 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)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年企业人力资源管理师之四级人力资源管理师考试题库300道【含答案】
- 税务政治思想能力考试题及答案
- 浑南社区笔试试题及答案
- 2026年抖音考试题库及答案(名师系列)
- 2026年一级注册建筑师之建筑结构考试题库300道及答案(名师系列)
- 2026年投资项目管理师之宏观经济政策考试题库300道及答案【真题汇编】
- 2026年中级银行从业资格之中级公司信贷考试题库300道及参考答案(b卷)
- 2026年大学生计算机考试题库200道附参考答案(a卷)
- 2025年高三化学高考核心考点模拟试题
- 2026年质量员继续教育题库500道及完整答案【考点梳理】
- 老年人呕吐护理
- 2022年6月大学英语四级考试真题及答案(第1套)
- 胸腔热灌注护理的护理
- 2024年上海松江商业发展集团有限公司招聘笔试参考题库含答案解析
- 小学数学教育行业分析
- 建设工程造价咨询成果文件质量标准(word)
- 合同签订流程
- GB/T 21008-2023地下矿用架空索道安全要求
- 公司管理股东管理制度
- 《莎士比亚戏剧》教学课件
- 公司印章外带使用申请表
评论
0/150
提交评论