1、摘 要CPU是计算机系统的核心部件,在各类信息终端中得到了广泛的应用。处理器的设计及制造技术也是计算机技术的核心之一。而MIPS是世界上很流行的一种RISC处理器。MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。本文围绕着指令执行过程中需经历的五个阶段,详细描述了处理器中各阶段的逻辑设计及其相关功能模块的设计。这五个阶段包括:取指令阶段IF,指令译码阶段ID,指令执行阶段EXE,存储器读写阶段MEM,寄存器写回阶段WB。相关模块包括:程序存储器i
2、mem,控制单元controller,寄存器堆regfile,算术逻辑单元alu,数据存储器dmem。在完成了CPU的整体逻辑设计后,通过Modelsim仿真软件在所设计的CPU上运行了测试程序,测试输出波形表明了处理器逻辑设计的正确性。关键词:MIPS;处理器;流水线IVAbstractThe Central Processing Unit (CPU) is the key part of a computer, which has been widely used in various information terminals.Also, the design and manufactu
3、ring technology of the processor is one of the cores of the computer technology. And, as a RISC processor, MIPS is very popular in the world. MIPS means “microprocessor without interlocked piped stages”, the mechanism of it is to avoid the data-related problems in the pipeline as much as possible by
4、 software. Around the five stages of the instruction execution, the article describes the logic designs of the processor and its related functional modules in detail. The five stages include: the instruction fetch stage IF, the instruction decode stage ID, the instruction execution stage EXE, the me
5、mory read/write stage MEM, and the register write back stage WB. The related modules include: the instruction memory imem, the control unit controller, the register file regfile, the arithmetic logic unit alu, and the data memory dmem. Upon the completion of the whole logic designs, running the test
6、 programs by the Modelsim, the correctness of the logic designs is proved by the output waveform. Keywords: MIPS, CPU, Pipeline目 录摘 要IABSTRACTII目 录III第1章 MIPS体系结构概述11.1 流水线技术11.2 RISC技术21.3 MIPS简介41.4 MIPS指令集51.5 本章小结10第2章 MIPS处理器的实现112.1 MIPS CPU顶层结构112.2 IF级132.3 ID级142.4 EXE级162.5 MEM级172.6 WB级19
7、2.7 外部数据输入中断192.8 本章小结20第3章 流水线CPU的仿真213.1 流水线CPU的指令仿真213.2 本章小结37第4章 总结和展望38参考文献39致 谢40附录1 英文文献41附录2 中文译文48附录3 主要模块代码54山东科技大学本科毕业设计(论文)第1章 MIPS体系结构概述1.1 流水线技术在任一条指令的执行过程中,各个功能部件都会随着指令执行的进程而呈现出时忙时闲的现象。要加快计算机的工作速度,就应使各个功能部件并行工作,即以各自可能的高速度同时、不停地工作,使得各部件的操作在时间上重叠进行,实现流水式作业。从原理上说,计算机的流水线(pipeline)工作方式就是
8、将一个计算任务细分成若干个子任务,每个子任务都由专门的功能部件进行处理,一个计算任务的各个子任务由流水线上各个功能部件轮流进行处理(即各子任务在流水线的各个功能阶段并发执行),最终完成工作。这样,不必等到上一个计算任务完成,就可以开始下一个计算任务的执行。流水线的硬件基本结构如图1.1所示。流水线由一系列串联的功能部件(Si)组成,各个功能部件之间设有高速缓冲寄存器(L),以暂时保存上一功能部件对子任务处理的结果,同时又能够接受新的处理任务。在一个统一的时钟(C)控制下,计算任务从功能部件的一个功能段流向下一个功能段。在流水线中,所有功能段同时对不同的数据进行不同的处理,各个处理步骤并行地操作
9、图1.1 流水线的硬件基本结构当任务连续不断地输入流水线时,在流水线的输出端便连续不断地输出执行结果,流水线达到不间断流水的稳定状态,从而实现了子任务级的并行。流水线技术本质上是将一个重复的时序过程分解成若干个子过程,而每一个子过程都可有效地在其专用功能段上与其他子过程同时执行。采用流水线技术通过硬件实现并行操作后,就某一条指令而言,其执行速度并没有加快,但就程序执行过程的整体而言,程序执行速度大大加快。流水线技术适合于大量的重复性的处理。1.2 RISC技术按照指令系统分类,计算机大致可以分为两类:复杂指令系统计算机(Complex Instruction Set Computer,CIS
10、C)和精简指令系统计算机(Reduced Instruction Set Computer,RISC)。CISC是CPU的传统设计模式,其指令系统的特点是指令数目多而复杂,每条指令的长度不尽相等;而RISC则是CPU的一种新型设计模式,其指令系统的主要特点是指令条数少且简单,指令长度固定。1RISC的产生1975年,IBM的设计师John Cocke研究了当时的IBM 370 CISC系统,发现其中仅占总指令数20%的简单指令却在程序调用中占据了80%,而占指令数80%的复杂指令却只有20%的机会被调用到。由此,他提出了RISC的概念。第一台RISC计算机于1981年在美国加州大学伯克利分校问
11、世。20世纪80年代末开始,各家公司的RISC CPU如雨后春笋般出现,占据了大量的市场。到了20世纪90年代,x86的CPU(如Pentium)也开始使用先进的RISC技术。2RISC的特点RISC的主要特点是指令长度固定,指令格式和寻址方式种类少,大多数是简单指令且都能在一个时钟周期内完成,易于设计超标量与流水线,寄存器数量多,大量操作在寄存器之间进行。RISC体系结构的基本思想是:针对CISC指令系统指令种类太多、指令格式不规范、寻址方式太多的缺点,通过减少指令种类、规范指令格式、简化寻址方式,方便处理器内部的并行处理,提高VLSI器件的使用效率,从而大幅度地提高处理器的性能。RISC的
12、目标决不是简单的缩减指令系统,而是使处理器的结构更简单,更合理,具有更高的性能和执行效率,同时降低处理器的开发成本。由于RISC指令系统仅包含最常用的简单指令,因此,RISC技术可以通过硬件优化设计,把时钟频率提得很高,从而实现整个系统的高性能。同时,RISC技术在CPU芯片上设置大量寄存器,用来把常用的数据保存在这些寄存器中,大大减少对存储器的访问,用高速的寄存器访问取代低速的存储器访问,从而提高系统整体性能。RISC的三个要素是:(1)一个有限的简单的指令集(2)CPU配备大量的通用寄存器,(3)强调对指令流水线的优化。RISC的典型特征包括:(1)指令种类少,指令格式规范:RISC指令集
13、通常只使用一种或少数几种格式,指令长度单一(一般4个字节),并且在字边界上对齐,字段位置(特别是操作码的位置)固定。(2)寻址方式简化:几乎所有指令都使用寄存器寻址方式,绝不出现存储器间接寻址方式,寻址方式总数一般不超过5个。其他更为复杂的寻址方式,如间接寻址等,则由软件利用简单的寻址方式来合成。(3)大量利用寄存器间操作:RISC强调通用寄存器资源的优化使用,指令集中大多数操作都是寄存器到寄存器的操作,只有取数指令、存数指令访问存储器,指令中最多出现RS型指令,绝不出现SS型指令。因此,每条指令中访问的主存地址不会超过1个,访问主存的操作不会与算术操作混在一起。(4)简化处理器结构:使用RI
14、SC指令集,可以大大简化处理器中的控制器和其他功能单元的设计,不必使用大量专用寄存器,特别是允许以硬连线方式来实现指令操作,以期更快的执行速度,而不必像CISC处理器那样使用微程序来实现指令操作。因此,RISC处理器不必像CISC处理器那样设置微程序控制存储器,从而能够快速地直接执行指令。(5)便于使用VLSI技术:随着LSI和VLSI技术的发展,整个处理器(甚至多个处理器)都可以放在一片芯片上。RISC体系结构为单芯片处理器的设计带来很多好处,有利于提高性能,简化VLSI芯片的设计和实现。基于VLSI技术,制造RISC处理器的工作量要比CISC处理器小得多,成本也低得多。(6)加强处理器的并
15、行能力:RISC指令集非常适合于采用流水线、超流水线和超标量技术,从而实现指令级并行操作,提高处理器的性能。目前常用的处理器的内部并行操作技术,基本上都是基于RISC体系结构而逐步发展和走向成熟的。(7)RlSC技术的复杂性在于它的优化编译程序,因此软件系统开发时间比CISC机器要长。1.3 MIPS简介MIPS是世界上很流行的一种RISC处理器。MIPS的意思“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。它最早是在80年代初期由斯坦福(Stanford)大学
16、Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。MIPS技术公司是美国著名的芯片设计公司,它采用精简指令系统计算结构(RISC)来设计芯片。和英特尔采用的复杂指令系统计算结构(CISC)相比,RISC具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。MIPS是出现最早的商业RISC架构芯片之一,新的架构集成了所有原来MIPS指令集,并增加了许多更强大的功能。MIPS的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系MIPS
17、 I、MIPS II、MIPS III、MIPS IV到MIPS V,嵌入式指令体系MIPS16、MIPS32到MIPS64的发展已经十分成熟。在设计理念上MIPS强调软硬件协同提高性能,同时简化硬件设计。1.4 MIPS指令集处理器的指令集体系结构(ISA)由指令集和一系列相应的寄存器约定构成。基于相同ISA编写的程序,都能够在对应ISA的处理器上运行。MIPS指令从诞生之日起至今,已经从32位发展到64位。为了确保程序的向下兼容性,MIPS指令的每一代产品都是在原有指令集的基础上直接扩展新的指令而不舍弃任何指令,即使是64位的指令集的MIPS处理器仍然可以执行32位指令。本节介绍MIPS指
18、令及其特点,使得我们理解MIPS体系结构,进而完成对MIPS处理器的设计。1MIPS指令集总体特点MIPS指令集具有以下特点:(1)简单的LOAD/STORE结构。所有的计算类型的指令均从寄存器堆中读取数据并把结果写入寄存器堆中。只有LOAD和STORE指令访问存储器。(2)易于流水线CPU的设计。MIPS32TM指令集的指令格式非常规整,所有的指令均为32位,而且指令操作码在固定的位置上。(3)易于编译器的开发。MIPS指令的寻址方式非常简单,每条指令的操作也非常简单。2MIPS指令集的寄存器设置MIPS32TM有32个通用寄存器,编号从0到31,其中寄存器0的内容总是0,这些通用寄存器组成
19、寄存器堆(register file)。MIPS32TM还定义了32个浮点寄存器。另外还有一些通用寄存器,PC(program counter)就是其中的一个,CPU使用它从存储器中取指令。3MIPS指令集支持的数据类型MIPS32TM支持的数据类型有整数和浮点数。整数包括8位字节、16位半字、32位字和64位双字。浮点数包括32位单精度和64位双精度。4MIPS指令集的指令格式MIPS32TM的指令格式只有3种,如图1.2所示。R(register)类型的指令从寄存器堆中读取两个源操作数,计算结果写回寄存器堆。I(immediate)类型的指令使用一个16位的立即数作为源操作数。J(jump
20、类型的指令使用一个26位立即数作为跳转的目标地址(target address)。图1.2 MIPS32TM指令格式指令格式中的op(opcode)是指令操作码。rs(register source)是源操作数的寄存器号。rd(register destination)是目的寄存器号。rt(register target)即可作为源寄存器号,又可作为目的寄存器号,由具体的指令决定。func(function)可被认为是扩展的操作码。sa(shift amount)由移位指令使用,定义移位位数。immediate是16位立即数,使用之前由指令进行0扩展或符号扩展。26位target由jump指
21、令使用,用于产生跳转的目标地址。5MIPS指令集的指令分类CPU的指令类型根据其操作的不同,可以分为下面七类。(1)计算类指令(Computational)计算类指令用于执行算术操作,乘/除,逻辑操作和对寄存器进行移位操作。这些指令有两种类型:寄存器类型和立即数类型。寄存器类型的指令使用两个源寄存器的值作为源操作数,立即数类型使用一个寄存器和立即数作为源操作数。根据操作的不同,这些指令分为下面4种: ALU立即数指令 操作数指令 移位指令 乘/除法指令(2)Load/Store指令Load和Store指令都为立即数(I-type)类型,用来在存储器和通用寄存器之间的储存和装载数据。值得一提的是
22、MIPS指令集只有该类指令访问内存,而其他指令都在寄存器之间进行,所以指令的执行速度较高。该类指令只有基址寄存器的值加上扩展的16位有符号立即数一种寻址模式,数据的存取方式可以是字节(byte)、字(word)和双字(Double word)。指令格式:(3)跳转/分支指令(jump & branch)跳转和分支指令改变程序流。所有的跳转和分支指令都会产生的一个延迟槽(delay slot)。紧跟着跳转/分支指令后的指令(delay slot中的指令)也被执行,然后将跳转目标的第一条指令从存储器中取出并执行,这使得指令的流水线执行获得更高效率。Jump指令Branch指令(4)寄存器传送指令寄
23、存器传送指令用来在系统的通用寄存器(GPR)、乘除法专用寄存器(HI、LO)之间传送数据,这些指令分为有条件传送和无条件传送两种类型。(5)专用指令专用指令用来产生软件中断,当执行这类指令的时候,CPU产生异常并转入中断处理程序。这些指令有系统调用(Syscall),暂停(Break)和Trap指令等,主要用于软件的异常处理。(6)协处理器指令协处理器指令对协处理器进行操作。协处理器的Load和Store指令是立即数类型,每个协处理器指令的格式依协处理器不同而不同。(7)系统控制协处理器(CP0)指令系统控制协处理器(CP0)指令执行对CP0寄存器的操作来控制处理器的存储器并执行异常处理。(6
24、MIPS指令集的寻址方式MIPS的寻址方式有以下几种(见图1.3):寄存器寻址操作数在寄存器堆中。立即数寻址操作数是一个常数,包含在指令中。基址偏移量寻址操作数在存储器中,存储器地址由一个寄存器的内容与指令中的常数相加得到。PC相对寻址转移指令计算转移地址时使用。PC的相对值是指令中的一个常数。伪直接寻址跳转指令形成转移地址时使用。指令中的26位目标地址值与PC的高4位拼接,形成30位的存储器“字地址”。图1.3 MIPS32TM指令寻址方式1.5 本章小结本章简单介绍了流水线技术、RISC技术,同时也对MIPS及其指令集进行了较为详细的介绍。在下一章中,将具体讨论流水线CPU的实现。74第
25、2章 MIPS处理器的实现本章将介绍顶层结构的连接方式以及各个重点模块的功能。通过本章的阐述,可以对本设计有一个全局性的理解。2.1 MIPS CPU顶层结构首先附上MIPS CPU顶层结构图。图2.1 MIPS CPU顶层结构图图2.1中,程序存储器用来存储程序指令,根据pcF地址取出相应指令;控制单元CU通过对指令解码来确定各个控制信号的值;寄存器为一个拥有32个通用寄存器的寄存器堆;Sign Extend可将16位立即数扩展为32位;ALU为算术逻辑运算单元,包括加、减、与、或、比较等基本运算;数据存储器的地址线为5位,对应32个RAM。此CPU顶层是一个流水线结构,共分IF,ID,EX
26、E,MEM,WB五级。流水线流水示意图流水线流水级划分图下面以级为单元分别予以介绍:2.2 IF级图2.2 顶层结构图的IF级此级主要完成计算下一条指令地址(+4)及取指操作。加4操作由加法器完成。取指操作由程序存储器imem完成。主要模块说明如表2.1所示。表2.1 指令存储器器件名称imem图示图2.3功能描述实现地址到指令的转换(取指令)端口描述input address指令地址output q指令输出端口映射imemins_imem(.address(pcF13:2),.q(q);2.3 ID级图2.4 顶层结构图的ID级此级主要完成指令的译码,源操作数的读取及立即数扩展。指令译码由控
27、制单元controller完成。寄存器源操作数读取由regfile完成。立即数扩展由Sign Extend完成。主要模块说明如表2.2、表2.3所示。表2.2 控制单元器件名称controller图示图2.5功能描述实现指令到控制信号的转换(解码)端口描述input clk时钟信号op指令操作码funct扩展的指令操作码output regwrite寄存器写信号memtoreg表示写回的数据采用alu的aluout还是dmem的mem_doutamemwrite存储器写信号branch表示是否为有条件跳转信号branch表示是否为有条件跳转信号alucontrol标识此指令需要做哪种运算alu
28、srcalu的b操作数来源于立即数还是rtregdst表示regfile写回时采用的地址是rt还是rdLWSW表示是否为Load/Store型指令端口映射controllerins_controller(.clk(clk),.op(instrD31:26),. funct(instrD5:0),. regwrite(regwrite),. memtoreg(memtoreg),. memwrite(memwrite),. branch(branch),. jump(jump),. alucontrol(alucontrol),. alusrc(alusrc),. regdst(regdst),
29、 LWSW(LWSW);表2.3 寄存器器件名称regfile图示图2.6功能描述寄存器堆,实现寄存器数值的存取端口描述Inputclk时钟信号rst_n复位,低电平有效we3寄存器堆写使能ra1rs地址输入端口ra2rt地址输入端口wa3写回寄存器地址输入端口(可能是rd或rt)wd3写回寄存器的数据口outputrd1第一操作数输出端口rd2第二操作数输出端口端口映射regfileins_regfile(.clk(clk),.rst_n(rst_n),.we3(regwriteW),.ra1(rsD),.ra2(rtD),.wd3(resultW),.wa3(writeregW),.rd
30、1(srcaDb),.rd2(srcbDb);2.4 EXE级本级主要由ALU完成算术逻辑运算。主要模块说明如表2.4所示。图2.7 顶层结构图EXE级表2.4 逻辑运算单元器件名称alu图示图2.8功能描述实现各种运算端口描述inputa第一操作数b第二操作数alucontrol运算功能码outputaluresult结果输出zero符号位输出端口映射aluins_alu( .a(srcaE),.b(srcbE),.alucontrol(alucontrolE),.aluresult(aluoutE), .zero(zero));2.5 MEM级图2.9 顶层结构图的MEM级本级主要完成存储
31、器dmem的读写,并提供了写回寄存器的最终数据。主要模块说明如表2.5所示。表2.5 数据存储器器件名称dmem图示图2.10功能描述数据存储器,实现数据存取端口描述inputclk时钟信号A4存储器地址输入WD写数据输入WE写使能outputRD4数据输出端口端口映射dmemins_dmem(.clk(clk),.A4(A4),.WD(writedataM_2),.WE(memwriteM),.RD4(mem_douta);2.6 WB级本级主要完成寄存器结果的写回。图2.11 顶层结构图的WB级2.7 外部数据输入中断本设计还对CPU扩展了外部输入中断。当外部数据输入使能we_ext_de
32、v_d1为0时(低电平有效),地址线pcF写回给pc,外部数据data_from_ext_dev_d1替代instrF赋值给instrD,以实现当有外部数据输入时的中断操作。外部数据输入中断结构如图2.12。图2.12 外部数据输入中断结构图2.8 本章小结本章首先介绍了MIPS CPU的顶层结构及一些主要模块的作用,并对流水级进行了划分。这些模块包括:程序存储器imem,控制单元controller,寄存器regfile,立即数扩展模块Sign Extend,算术逻辑运算单元ALU,数据存储器dmem。然后分别对各个流水级进行了功能介绍,给出了各个流水级的结构图及流水级内主要模块的说明。最后
33、又对扩展的外部输入中断进行了简单的介绍,并给出了外部输入中断结构图。总之,通过本章的介绍,相信您已经对此设计有了比较全面的认识。在下一章中,将主要阐述系统仿真与功能验证。第3章 流水线CPU的仿真3.1 流水线CPU的指令仿真为了测试本设计CPU的工作情况,本章将对每条指令进行测试并打印出波形图以便于验证。为了验证方便,本章将测试所用到的寄存器$0 $1 $2 $3 $4及数据存储器$0 $1 $4的波形图一同打印出来,从而可以通过监视寄存器、存储器的值判断程序执行正确与否。首先将对全部指令进行仿真。为了更为清晰明了,随后会对各类指令进行单独仿真,包括:算术逻辑运算指令,store/load存
34、取指令和跳转指令。为了调试方便,我们将设计中的比较重要的若干网络的连线引出到端口,以便于观察运行情况。这些线网包括:l 时钟信号线clkl 复位信号线rst_nl 条件跳转控制线branchl 无条件跳转控制线jumpl IF级PC值pcFl 外部输入使能信号线we_ext_dev_d1l 外部输入指令数据线data_from_ext_dev_d1l ID级程序指令机器码instrDl ID级Register Rs地址输入端口ra1l ID级Register Rt地址输入端口ra2l ID级Register写使能we3l ID级Register写回的地址输入端口wa3l ID级Register
35、写回的数据口wd3l ID级Register第一操作数输出端口rd1l ID级Register第二操作数输出端口rd2l EXE级ALU的A操作数srcaEl EXE级ALU的B操作数srcbEl EXE级ALU的运算结果aluoutEl MEM级DataMemory地址输入A4l MEM级DataMemory数据输出端口RD4l MEM级DataMemory写使能WEl MEM级DataMemory写数据输入WDl 寄存器$0,$1,$2,$3,$4l 数据存储器$0,$1,$4观察以上线网的数值可以对CPU的运行情况有一个大致的了解。下面开始对指令进行测试。测试包括:加法(ADD),减法(
36、SUB),与(AND),或(OR),比较(SLT),立即数加法(ADDI),取整字(LW),按字存储(SW),无条件跳转(J),相等即跳转(BEQ)。测试程序见表3.1。表3.1 指令测试程序指令机器代码nopaddi $1,$0,&H1234/r$1 = H1234addi $2,$0,&H0F0F/r$2 = H0F0Fnopnopnopadd$3,$1,$2 /r$3 = H2143sub$3,$1,$2 /r$3 = H0325and$3,$1,$2 /r$3 = H0204or$3,$1,$2 /r$3 = H1F3Fslt$3,$1,$2 /r$3 = 0/rd=(rsrt)?1:
37、0;sw$2,$1,0/dram1 = r$2 = H0F0Flw$3,$4,0/r$3 = dram4 = H3456/注:dram4初始化为H3456j02/跳过后两条执行第三条指令add$3,$1,$2 /jumpsub$3,$1,$2 /jumpand$3,$1,$2 /r$3 = H0204or$3,$1,$2 /r$3 = H1F3Fslt$3,$1,$2 /r$3 = 0/rd=(rsrt)?1:0;sw$2,$1,0/dram1 = r$2 = H0F0Flw$3,$4,0/r$3 = dram4 = H3456beq$1,$1,03/rs=rt则跳过后三条执行第四条指令add
38、3,$1,$2 /jumpsub$3,$1,$2 /jumpand$3,$1,$2 /jumpor$3,$1,$2 /r$3 = H1F3Fslt$3,$1,$2 /r$3 = 0/rd=(rsrt)?1:0;sw$2,$1,0/dram1 = r$2 = H0F0Flw$3,$4,0/r$3 = dram4 = H3456000000002061123420620F0F000000000000000000000000002218200022182200221824002218250022182AAC2200008C83000008000002002218200022182200221824
39、002218250022182AAC2200008C83000010210003002218200022182200221824002218250022182AAC2200008C830000此外,本设计另加了外部输入中断,所需观察的线网已在本章开篇列出,包括we_ext_dev_d1、data_from_ext_dev_d1、寄存器$4、数据存储器$0。测试内容为:当we_ext_dev_d1为0时(低电平有效)中断,执行data_from_ext_dev_d1中的指令;当we_ext_dev_d1为1时退出中断,继续执行之前的指令。中断可对寄存器进行操作也可对存储器进行,具体测试内容为对寄
40、存器$4赋值H1579,然后将寄存器$4的值存入数据存储器$0,已写在testbench文件中。仿真波形全局图如图3.1,另附仿真波形详情图,如图3.2、图3.3、图3.4。将寄存器、存储器上的值与指令的注释值进行对比,可知指令执行正确。图3.1 仿真波形全局图图3.2 仿真波形详情图1图3.3 仿真波形详情图2图3.4 仿真波形详情图3下面将对各类指令进行单独仿真,包括:算术逻辑运算指令,store/load存取指令和跳转指令。首先,算术逻辑运算指令。包括:加法(ADD),减法(SUB),与(AND),或(OR),比较(SLT),立即数加法(ADDI)。测试程序见表3.2。表3.2算术逻辑运
41、算指令测试程序指令机器代码nopaddi $1,$0,&H1234/r$1 = H1234addi $2,$0,&H0F0F/r$2 = H0F0Fnopnopnopadd$3,$1,$2 /r$3 = H2143sub$3,$1,$2 /r$3 = H0325and$3,$1,$2 /r$3 = H0204or$3,$1,$2 /r$3 = H1F3Fslt$3,$1,$2 /r$3 = 0/rd=(rsrt)?1:0;000000002061123420620F0F000000000000000000000000002218200022182200221824002218250022182
42、A算术逻辑运算仿真波形如图3.5。将寄存器上的值与指令的注释值进行对比,可知指令执行正确。图3.5 算术逻辑运算仿真波形图其次,Store/Load存取指令。包括:取整字(LW),按字存储(SW)。测试程序见表3.3。表3.3 Store/Load存取指令测试程序指令机器代码nopaddi $2,$0,&H0F0F/r$2 = H0F0Fnopnopnopsw$2,$1,0/dram1 = r$2 = H0F0Flw$3,$4,0/r$3 = dram4 = H3456/注:dram4初始化为H34560000000020620F0F000000000000000000000000AC2200
43、008C830000Store/Load存取仿真波形如图3.6。将寄存器、存储器上的值与指令的注释值进行对比,可知指令执行正确。图3.6 Store/Load存取仿真波形图再次,跳转指令。包括:无条件跳转(J),相等即跳转(BEQ)。测试程序见表3.4。表3.4 跳转指令测试程序指令机器代码nopaddi $1,$0,&H1234/r$1 = H1234addi $2,$0,&H0F0F/r$2 = H0F0Fnopnopnopj02/跳过后两条执行第三条指令add$3,$1,$2 /jumpsub$3,$1,$2 /jumpand$3,$1,$2 /r$3 = H0204or$3,$1,$2
44、 /r$3 = H1F3Fslt$3,$1,$2 /r$3 = 0/rd=(rsrt)?1:0;beq$1,$1,03/rs=rt则跳过后三条执行第四条指令add$3,$1,$2 /jumpsub$3,$1,$2 /jumpand$3,$1,$2 /jumpor$3,$1,$2 /r$3 = H1F3Fslt$3,$1,$2 /r$3 = 0/rd=(rsrt)?1:0;000000002061123420620F0F00000000000000000000000008000002002218200022182200221824002218250022182A10210003002218200022182200221824002218250022182A跳转仿真波形如图3.7。将寄存器$3上的值与指令的注释值进行对比,可知指令执行