分享

【设计作品展示】基于MIPS架构的32位CPU设计之一

 guitarhua 2016-11-12

【设计作品展示】基于MIPS架构的32位CPU设计之一

2013-01-10 00:16:47
分享:

      CPU(Central Process Unit),是计算机最核心的部件,其功能相当于人的大脑,负责指令的执行,数据的处理等。本文在深入研究并分析了MIPS-I指令集的基础上,使用硬件描述语言Verilog对其进行建模,并分别使用单周期、多周期、流水线对其进行建模,最终在ModelSim上实现了成功仿真,当然,一个CPU的好坏,最终还是需要真正能够执行程序,但是由于有各种事情,总是腾不出来时间对我的设计进行优化,刚好,快要放假了,就到时候再做优化,并最终能够执行程序,而不仅仅只停留在仿真阶段。

图1所示是设计的MIPSCPU的总体结构图:

 MIPS-CPU

下面所示为单周期、流水线初始设计部分图:

单周期设计图

    

流水线设计图

      

  MIPS 历史

MIPS(Microcomputer without interlocked pipeline stages),它最早是起源于斯坦福大学的MIPS项目,这个项目的工作向人们表明了一个事实:流水线技术尽管已经众所周知,但是早期的体系结构却利用的很不充分,完全可以更好的使用。

MIPS计算机系统公司创建于1984年,最初的目的是将斯坦福大学MIPS CPU小组的工作商业化,当时在美国也有几个学术项目以全新的方式进行集成芯片设计、编译器优化和计算机体系结构的重新设计,但斯坦福的MIPS项目是其中唯一取得巨大成功的项目。商用MIPS CPU 增强了内存管理硬件,并于1985年末作为R2000面世,其后又相继推出了R3000R4000R10000等多款处理器。

在计算机领域内,体系结构用来描述编程时用到的抽象机,而并非是这种机器的具体实现。通常,CPU体系结构包括一套指令集和一些寄存器的知识。目前,MIPS指令集体系结构最好定义是由MIPS Technologies 公司发布的MIPS32MIPS64体系结构规范。MIPS32MIPS64的子集,它针对于具有32位通用寄存器的CPU。在MIPS32/64之前,已经写出了MIPS体系结构的许多版本。但这些较老的定义仅应用于高层软件使用的指令与资源操作系统所必需的CPU控制机制看成是实现相关的。这意味着可移植操作系统的工作依靠一个君子协定来保证MIPS体系结构非规范领域的稳定性。下面是MIPS体系结构的一些历史产品。

MIPS I :该指令集用于最初的32位处理器(R2000/R3000);每个存在的MIPS CPU 都会运行这些指令,所以它至今仍然是一个通用语言。

MIPS Ⅱ:从未大规模生产的MIPS R6000所定义的微小升级。它的变种广泛应用于嵌入式市场的32MIPS CPUMIPS II MIPS 32的直接先驱。

MIPS Ⅲ:由R4000引入的64位指令集。

MIPS Ⅳ:在MIPS Ⅲ的基础上增加一些有用的定义(大多数是浮点指令),这些新增指令出现在两个不同的实现中(R10000R5000)

MIPS Ⅴ:增加一些特殊的一次执行两个操作(SIMD)的浮点指令,但没有制造MIPS V-CPU。这些指令中的大多数出现在之后的MIPS64中成为"成对单精度"的可选部分。

MIPS32MIPS641998MIPS Technologies公司从SGI公司分离出后发布的标准。该标准第一次包含了称为协处理器0"CPU控制"的功能。MIPS32MIPSⅡ的超集,而包含了64位指令的MIPS64MIPS Ⅳ的超集(并将许多MIPS V指令作为一个可选扩展)。

MIPS CPU开始在嵌入式系统中得到应用时,一些旨在面向特定应用的指令开始不断涌现。这些发明的指令在MIPS32/64中也包含一些。但同时也做了一些规定,就是要采取公认的应用特定指令集扩展(Application-Specific instruction set Extension ,ASE)的形式。在MIPS32/64ASE是可选的扩展,其实现与否通过标准的配置寄存器方式进行标志。目前有许多的ASE扩展,如MIPS16eMDMXSmartMIPSMTDSP等。

上面是一些关于MIPS处理器的简单介绍,对于如何设计相信大家如我当时一般完全摸不着头脑,怎么让你设计的一大串东西能够运行呢??这是一个比较纠结的问题。具体设计方法有三种:即单周期模型、多周期模型、流水线模型。单周期最简单,就是假设指令执行都在一个周期内即可完成,该模型实现起来简单,但是,问题也凸显出来了,速度慢,效率低,因为有的指令执行非常快,而有的指令执行非常慢,那么你CPU可以接受的时钟频率就是执行最慢的指令的频率,而这是我们不能接受的;对于这个问题,人们想出来一个好办法,将指令执行时间细分成几个小的周期,比如说MIPS指令里面的访问存储器指令lw,可以将其细分成取指、译码、执行、访存、写回寄存器五个周期,这样细分之后CPU的频率当然得到了很大的提升;但是,对于极限速度的追求让人们又想出了一个更好的解决方案,利用流水线来加快多条指令的执行,这个原理可以去百度,资料很多,简单讲就是和工业上的生产线一样,理想情况下,每隔一个时钟周期就可以执行完一条指令。

 微结构概念:微结构是将寄存器、ALU、有限状态机、存储器和其他逻辑模块等多种基本单元组合在一起,以实现微处理器体系结构。同一个微处理器可以有不同的微结构,从而在性能、成本和复杂性方面取得不同的折中。

本文基于MIPS体系结构设计微处理器,分为流水线方案和非流水线方案。非流水方案采用了单周期和多周期微结构。一般而言,将微结构分为两大部分:数据通路(datapath)和控制(control)。数据通路对数据以字为单位进行操作,包含了寄存器、ALU、多路开关和存储器等,本文采用的是MIPS32体系结构,故使用32位的数据通路,控制单元从数据通路中接收当前指令,对其进行译码,产生所需的控制信号,控制数据通路中指令的执行。控制单元通常情况下产生多路开关选择、寄存器使能、存储器写入等信号来控制数据路径的操作。

 CPU中,主要的算术和逻辑运算指令都是在算术逻辑单元ALU模块中实现,例如加、减、乘、除、与、或、或非、异或等等。下面将详细介绍CPU中主要用到的功能部件,并作性能上的简单分析。

 

快速加法器

 

本文设计的加法器是在先行进位的传播和生成逻辑基础之上,进行了再次的优化设计,可以实现比先行进位加法速度更快的加法运算。先行进位实际上是将几个1位加法器组合在一起封装成块,并快速计算出该块的输出进位,但是仍然存在速度方面的限制,因为在前一个块和后一个块之间,仍然使用的是行波进位的逻辑,即前一个块的结果计算,仍然需要等待后一个块的输出进位,这样就产生了不必要的延迟,对加法器的速度产生影响。而本文设计的前缀加法器,是首先以2位为一组计算G(generate)P(propagate),之后是四位块,再之后是8位块,之后是16位块,最后是32位块,这样可以快速生成每一列的信号,然后就可以利用这些信号来求出和,即为尽可能快地计算每一列i的进位输入 ,之后使用下列等式计算总和:

 

定义列i = -1以包含 ,所以 .若从跨度为-1i-1位中生成一个进位,则在列i-1会产生进位输出,即就是 ,生成的进位要么在i-1列生成,要么在之前列中生成并传播。即产生新公式

 

下图为前缀加法器的设计原理图

其中,传播进位和生成进位的计算逻辑与先行进位相同,都是

 

 

 4-2中以用ANDOR门电路为每一列的    生成   ,之后使用黑色单元的5层去组成前缀   。一个黑色单元输入包括上部分跨度为 的块和右部分跨度为  的块,使用下列等式,组合这两部分信号为整个跨度为i:j的块计算生成和传播信号:

 

从公式4 - 54 - 64 - 7中可以看出一个跨度为  的块若产生进位则其上部分生成进位或者上部分传播右部分生成的进位,同时,若上部分和下部分都能传播进位,则一个块也能传播进位。从性能上分析,前缀加法器的延迟以位数的对数增长,相对先行进位和行波进位要好的多,但是它也存在需要更多硬件的缺点。

在计算机里,减法也可以当作加法处理,只需将减数按位取反再加1即可,同样,对无符号数的处理也与有符号数相同,只是数据解释的方式和溢出判断的方法不同。

有符号数溢出判断方法为:若被加数和加数的符号相同且结果的符号和被加数的符号相反则溢出,而无符号数溢出判断为:若最高位有进位,则有溢出。 

      不早了,先写到这儿吧!^_^

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多