您好,欢迎来到锐游网。
搜索
您的当前位置:首页中文翻译

中文翻译

来源:锐游网
沈阳工程学院毕业设计(论文)

32位MIPS中央处理器的综合设计

摘要

本设计实现一个基于MIPS32指令架构的5级流水线CPU。设计的重点是通过缩减指令执行的等待时间,从而可以利用高速的部件使CPU的运行速度至少达到100Mhz。CPU最终设计速度可以超过200Mhz,芯片面积大约在900,000平方纳米的合理范围内。

1 绪论

本文设计的目的实现并仿真通过一个五级流水线的MIPS32中央处理器的基本轮廓。之所以采用五级的水线架构,是因为这是一种划分CPU工作过程的主流观点。本文将介绍CPU设计的基本背景,并将CPU划分为几个重要的功能单元模块,并对每个模块进行设计论证。通过仿真和综合,得出的结果可以说明设计是否成功。

2 背景

设计一个基于MIPS-32架构的中央处理器,并对处理器进行测试、综合。本设计的处理器具有以下的特性:

1) 具有5级流水线

2) 具有冒险检测和校正功能

3) 具有数据前推功能从而减少指令的延迟周期 为了实现CPU的仿真,设计一些程序和数据文件用于读取将CPU指令寄存器的数据。CPU设计有一些寄存器作为指令和数据的存储。同样本设计的CPU也具备现实中CPU所具备的功能性和函数性,CPU的主要设计重点实现控制单元和数据通路的最优化。

处理器的设计是采用传统的五级流水线设计,这五级流水线别是为取指段、译码段、执行段、存储器访问段、回写段。取指令段的作用是从程序存储器正确的地址中读出将要执行的指令,程序计数器加1并指向下一条顺序执行的指令或者下一条分支指令的地址。指令译码部分的功能是在控制单元的作用下将指令译成对应的机器码,另外数据相关检测模块将在译码段起作用,用于检测从寄存器单元中取出的数据是否有冲突。执行段的功能是将指令中的数值送到算术逻辑单元中进行执行相关的运算和操作。执行段在必要时也会计算分支指令转跳的对应地址。另外数据前推单元会在执行段中进行相关的操作:将本来要从算术逻辑单元或从存储器单元中输出数据的操作,前推到中取出数据送到算术逻辑单元之前执行。存储器访问段负责从系统存储器中存取数值,同时也负责根据指令的要求向

-1-

沈阳工程学院毕业设计(论文)

处理器写入数据和将处理器数据向外输出。为了避免额外并发的数据冲突,指令的读写必须设计在一个时钟周期内完成。最后的一部分是回写段的设计。回写段作用是将计算后的数值写回对应的寄存器组中。回写段应在前半个时钟周期内将数据写入寄存器组中,以避免可能会发生的结构性和数据性的竞争冒险。

本设计的CPU包含一个数据相关检测模块,它的作用是决定流水线是否增加一个流水线等待以防止数据冲突。数据相关检测之后,可以进行数据前推。数据前推是在数据被装入存储器之后就立即要在执行段使用或者是发生程序分支转移的情况下发生的。数据相关检测模块将会阻止程序计数器加1指向下一个值,清空取指令段寄存器的数据,并使数据前推在流水线过程中只执行空操作。据相关检测模块的结构和其在CPU的作用可由如图1所示。

数据前推模块具备消除大多数的时钟延迟的功能。如果没有数据前推模块,不管什么时候若要立即使用在运算之后得到的数值,必然要增加一个时钟延迟;并且任何时候从存储器中取出数据也会流水线引入两个时钟的延迟。这些情况如图2所示。数据前推模块可以监测算术逻辑单元和系统内存的数据输出,从而判断输出的数值是否应该反馈回算术逻辑单元以进行下一步的运算。假如刚通过运算得出来的数据需要被使用,数据前推模块会把数据在写入寄存器组之前,通过数据通路输入到算术逻辑单元中进行适当的处理。数据前推模块对CPU流水的影响如图4所示。

3 设计的实现

通过将5段流水线的各个子模块连接起来就可以得到整个这CPU的顶层设计电路图,本设计的CPU提供了外部访问的模拟测试平台,可以通过向指令存储器装入指令和监测寄存器组的数据变化来进行测试验证。由于流水线的5个模块是各自独立的,每个模块对必须对各自输出数据负责进行缓冲,因此没有必要为CPU设计一些将5个模块粘在一起的逻辑单元,要将流水线的5个模块正确地连接在一起是很简单的。作者设计的CPU和流水线的5个独立性模块如表1所示。本文设计的CPU由5个部分组成:取指段、译码段、执行段、存储器访问段、回写段。

在CPU设计中,取指令段将完成多种职责,它必须能正确地将程序计数进行更新操作,不管是在正常的顺序操作还是分支指令操作。指令取指段另一项功能是从存储器中读取指令,并把当前读取的指令传送到流水线的下一个阶段,或者当出现程序分支指令时时钟延迟等待,以避免发生错误的操作。取指段由三部分构成:指令寄存器,程序计数器、指令地址多路器。指令寄存器可以从外部装载数据,这些数据将会在下一阶段要执行相关的操作。

取指令段模块将负责维持程序计数器运行,而程序计数器是由32位的寄存器构成的,对指令地址和更新线路起作用。更新线路是用来判断指令地址是否要更新,它的设计是很有必要的,因为当发生一些数据相关时,必须在流水线中加入等待的时钟,以确保指令将会在下一个时钟正常运行而不致发生紊乱。

-2-

沈阳工程学院毕业设计(论文)

指令存储器单元的设计是模仿一个小容量的缓存,因为要实现取指令在一个时钟周期内完成。指令存储器容量为1KB,指令长度是为32位。在实时系统中,这样容量的指令存储器需要调整指令的宽度或者增加容量。指令存储器的功能是在一个时钟周期内完成指令代码值的读写处理。

指令取指段最后一部分的设计是指令存储器地址加法器的设计。 这一模块纯粹是组合逻辑的设计,以完成对地址加4扩展,使之能被指令存储器读出。读出的结果由数据相关检测单元决定是否被PC进行加1操作。

指令译码段是流水线的中对取指段取出并存放在寄存器单元中的指令机器进行译码的阶段。译码段负责对指令机器码按指令格式进行划分(基于R型和I型),指令译码段由控制单元,数据相关检测单元,符号扩展单元 ,和寄存器单元组成。指令译码段将各个单元连接在一起,它把指令分成不同的部分并送到相应的部件中。寄存器RS和RT值将送到寄存器,立即数部分送到符号扩展单元中,算术逻辑操作数和功能码将送到控制单元中。各个单元进行数据通信并对时钟脉冲进行修正和相关数据的储存为流水线下一阶段作好准备。

指令执行段负责取出数据和实际执行指定的指令操作。执行段由ALU单元,分支确定单元,数据前推单元。指令执行段的各个单元组合一起使算术逻辑单元可以正确地处理数据,数据前推单元并根据输入信号,如果有分支程序则通知译码段进行处理。

算术逻辑单元负责根据指令类型执行实际的计算。不管这些数值是0还是非法的,算术逻辑单元根据32位的输入数值和控制信号进行计算,并输出32位的数值。这些操作的由输入控制信号根据大量的时序状态的组合来完成。

存储器访问段负责将算术逻辑单元的输出值传送到的存储器相应中,并根据相关指令类型判断是否存储起来。存储器访问段由数据数据存储器和用作回写段写数据操作的寄存器组成。同时前推单元也回写相关信息到回写段寄存器中。在本段中,可以根据通过算术逻辑单元的计算结果将本段寄存器数值和运算的结果送回数据前推单元。

回写段的作用中将最后的计算结果写回到对应的寄存器中。回写段有输入控制线用于告诉相关部件进否进行数据的回写,是否将算术逻辑单元或数据存储器的输出数据回写。总之,回写段将通过控制线选择一个输出将数值传送到本段的寄存器组。

4 结果

在设计仿真时,可以设置一些指令代码并送到CPU和输出寄存器监测单元0到5。测试的指令主要有寄存器立即数的加法运算,减法运算(包括有符号和无符号),乘法(包括有符号和无符号),读写存储器操作,跳转到程序执行初始地址和重复执行同一指令的强制转移指令。设置进行不同的加法运算指令是重要的,因为加法运算会用到CPU的不同部件。用到的部件包括数据前推单元,乘法寄存器和不同的功能的算术逻辑单元。乘法运算指令的测试也同样重要。因为乘法运算指令的执行会用,还会用到算术逻辑单元中完成读/写和存储64位运算结果的MFHI寄存器和MFLO寄存器。跳转指令的测试是对于验证分支检

-3-

沈阳工程学院毕业设计(论文)

测单元是最重要的。验证可以数据相关检测单元和取指令段的正确性,通过跳转到新地址继续在一个时钟周期内完成新指令的执行。相关的仿真结果如图5,6,7所示。

-4-

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ryyc.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务