CN112182999A - 一种基于mips32指令系统的三级流水线cpu设计方法 - Google Patents
一种基于mips32指令系统的三级流水线cpu设计方法 Download PDFInfo
- Publication number
- CN112182999A CN112182999A CN202010958681.8A CN202010958681A CN112182999A CN 112182999 A CN112182999 A CN 112182999A CN 202010958681 A CN202010958681 A CN 202010958681A CN 112182999 A CN112182999 A CN 112182999A
- Authority
- CN
- China
- Prior art keywords
- instruction
- gpr
- register
- exception
- pipeline
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 23
- 238000013461 design Methods 0.000 title claims abstract description 14
- 230000008569 process Effects 0.000 claims abstract description 14
- 230000006870 function Effects 0.000 claims description 75
- 238000012545 processing Methods 0.000 claims description 36
- 238000012546 transfer Methods 0.000 claims description 11
- 238000004364 calculation method Methods 0.000 claims description 5
- 101100328957 Caenorhabditis elegans clk-1 gene Proteins 0.000 claims description 3
- 101100179596 Caenorhabditis elegans ins-3 gene Proteins 0.000 claims description 3
- 101150089655 Ins2 gene Proteins 0.000 claims description 3
- 101100072652 Xenopus laevis ins-b gene Proteins 0.000 claims description 3
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 claims description 2
- 238000001514 detection method Methods 0.000 description 28
- 238000010586 diagram Methods 0.000 description 5
- 230000009191 jumping Effects 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 108010091769 Shiga Toxin 1 Proteins 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 230000001343 mnemonic effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- AGOYDEPGAOXOCK-KCBOHYOISA-N clarithromycin Chemical compound O([C@@H]1[C@@H](C)C(=O)O[C@@H]([C@@]([C@H](O)[C@@H](C)C(=O)[C@H](C)C[C@](C)([C@H](O[C@H]2[C@@H]([C@H](C[C@@H](C)O2)N(C)C)O)[C@H]1C)OC)(C)O)CC)[C@H]1C[C@@](C)(OC)[C@@H](O)[C@H](C)O1 AGOYDEPGAOXOCK-KCBOHYOISA-N 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2115/00—Details relating to the type of the circuit
- G06F2115/10—Processors
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Advance Control (AREA)
Abstract
本发明涉及一种基于MIPS32指令系统的三级流水线CPU设计方法,其中在三级流水线实现的过程中,提出了一个新颖的逻辑结构使得三级流水线正常工作与运行,其通过取值、移码与执行三个阶段,并使用插入其中的流水线寄存器控制与记录每一级产生的新的信息,相比于五级流水线来说,其逻辑结构更为简单,使得其具有更快的时钟频率。同时,由于只需要对极少的指令冒险和数据冒险,所以旁路设计逻辑简单,可以一定程度上提升指令的处理器的时钟频率和运行速度。
Description
技术领域
本发明属于集成电路设计领域,具体涉及一种基于MIPS32指令系统的三级流水线CPU设计方法。
背景技术
目前在寄存器传输级的CPU设计领域的主流为五级流水线CPU由于其结构为取值,移码,执行,存储器写入和写回PC寄存器五个部分,由于指令中存在复杂的数据冒险和结构冒险,导致CPU在指令运行时需要采用复杂的逻辑关系和电路设计解决,并且由于程序指令的复杂运行过程,导致CPU中为处理冒险所耗费较多资源,由于逻辑增加,使得时钟频率不可避免的降低,一定程度上影响了CPU的运算的速度。
同时,由于具有较复杂的逻辑结构,而FPGA上的资源有限限制了CPU逻辑的结构不能太复杂,这一点在部分具有较少资源芯片时显得尤为重要,所以在设计中如果采取较为复杂的逻辑,很可能造成芯片的资源不足,无法成功进行综合。
本发明所设计的三级流水线CPU能使用较少的CPU资源使CPU的各条指令得以正常运行,并且由于逻辑数量减少,一定程度上提升了CPU的时钟频率。
发明内容
要解决的技术问题
针对目前发明中存在的问题,本发明通过设计一个基于MIPS32指令系统的三级流水线CPU设计,主要解决以下几个方面问题:
减少由于五级流水线CPU的逻辑复杂性产生的更多的资源消耗。由于FPGA上电路的资源有限,三级流水线因为其特有的逻辑特点,在电路中消耗的资源会大大减少,可以在CPU资源有限的情况下拥有更好的兼容性。
提升CPU的时钟频率,从而提升CPU的运行速度。由于三级流水线的结构简单,每一级所使用的逻辑会减少,可以在同步时序逻辑电路中,提升CPU在的时钟频率,从而使得CPU在处理每一个逻辑时的速度提升。
技术方案
一种基于MIPS32指令系统的三级流水线CPU设计方法,其特征在于:三级流水线由两个流水线寄存器和在其三个流水级中插入的模块构成;三级流水线CPU的运行过程由取指令、译码和执行三级组成;其流水情况为:
CLK | 1 | 2 | 3 | 4 | 5 |
INS1 | IF | DECODE | EXE | ||
INS2 | IF | DECODE | EXE | ||
INS3 | IF | DECODE | EXE |
其中:
IF——取指令;DECODE——译码;EXE——执行;CLK——时钟节拍数;INS——指令
所述的取指令过程:首先由多路选择器模块MUX1选择适合的PC值,将其PC值发送给对应的PC模块,PC模块再将对应的地址转送给指令存储器,进行取地址操作,除此之外,再将地址存入下一级流水线寄存器中;当指令存储器收到指令对应的地址时,进行取指令操作,将这一拍取出的指令存入下一级流水线寄存器中;
所述的译码过程:指令被送译码器中,根据所拥有的指令不同生成不同的控制信号,这些控制信号将帮助执行指令时保证指令正常运行,构成了指令的控制通路,将这些信号存入下一级流水线寄存器中;同时,指令信号被分段传输入寄存器文件中,这些信号是寄存器的索引,通过索引读出数据,将数据存入下一级流水线寄存器中;同时,还有部分信号和数据是直接在指令中包含的,通过前一级的流水线寄存器将其取出,然后导入下一级流水线寄存器中;
所述的执行过程:流水线寄存器发出所有的数据信号和控制信号,他们将完成指令最终的操作,并将结果传回PC模块中;在直接跳转单元中,指令完成的是跳转地址的计算与选择操作,将最终地址传回多路选择器MUX1后,通过控制信号选择接下来的地址传入PC中;在算数逻辑运算单元模块ALU中,完成的是算数计算指令和逻辑运算指令,根据信号,将结果写回寄存器文件中;指令运行时可能发生异常,当异常发生时,异常处理模块将会改写指令的控制信号,使指令按照异常发生的控制信号进行运作,ALU或流水线寄存器将遇到的异常提交到协处理器单元CP0中,然后CPU会将这些进行处理;在Branch模块中,判断指令是否为分支跳转指令,视情况将不同的指令地址送入;流水线最后的多路选择器MUX2将选择何种数据写入寄存器文件;而多路选择器MUX3作用是判断是写入哪个寄存器文件中的寄存器。
有益效果
本发明提出的一种基于MIPS32指令系统的三级流水线CPU设计方法,其中在三级流水线实现的过程中,提出了一个新颖的逻辑结构使得三级流水线正常工作与运行,其主要通过取值、移码与执行三个阶段,并使用插入其中的流水线寄存器控制与记录每一级产生的新的信息,相比于五级流水线来说,其逻辑结构更为简单,使得其具有更快的时钟频率。同时,由于只需要对极少的指令冒险和数据冒险,所以旁路设计逻辑简单,可以一定程度上提升指令的处理器的时钟频率和运行速度。
在流水线的运行过程中,逻辑较为简单,在综合时利用的板上资源减少,这对于在很多时候条件限制时却要使得CPU完成多种功能时尤为重要。设计一个逻辑简单但可以完成几乎全部功能的CPU,可以大大减缓CPU芯片上的空间。
附图说明:
图1五级流水线结构示意图;图2三级流水线总体结构图;图3(a)指令存储器;(b)数据存储器;(c)寄存器文件;图4译码器和控制单元图;图5(a)算数逻辑单元(ALU)及控制单元;(b)直接跳转单元;(c)IF/ID;图6(a)ID/EX;(b)MUX1;(c)MUX2;图7(a)MUX3;(b)Branch模块;图8异常处理单元;图9三级流水线总体结构图的部分图。
具体实施方式
指令存储器如图3(a),功能为通过输入的指令地址,读取出对应的指令。指令存储器中存储的为所有指令,只需要输入其地址既可以读出。数据存储器如图3(b),功能为实现片内外数据的读取和存储。实现存取值(load和store)。寄存器文件如图3(c)所示。寄存器文件定义了32个寄存器,用于片内存储和数据交换,是片内实现各种指令的重要模块。译码器和控制单元如图4所示。译码器主要用于指令的译码操作,将指令送入译码器,并将其翻译成对应的信号,存入ID/EX流水线寄存器中。译码信号表:
算数逻辑单元(ALU)及控制单元如图5(a)所示,此模块是CPU核心的运算单元,可以使CPU完成算数运算和逻辑运算操作。控制单元将需要的信号发送给ALU,ALU通过对应的控制信号进行相应计算。以下是控制信号与指令对应图:
直接跳转单元如图5(b)所示,主要功能为计算直接跳转的地址,并将地址发送到PC,进行CPU的直接跳转指令的运行。IF/ID流水线寄存器如图5(c)所示,主要功能为存储指令的指令码,存储本条指令的地址,以及存储是否本条指令发生错误的信号。ID/EX流水线寄存器如图6(a)所示,主要功能为存储译码时产生的信号,寄存器文件中读取的数据,以及直接从指令中产生的数据和信号。以下是存储的信息:
多路选择器MUX1如图6(b)所示,主要功能为选择出下一条指令需要的地址,并将其传送到PC中。多路选择器MUX2如图6(c)所示,主要功能为选择哪一个数据将最终被写入寄存器文件。多路选择器MUX3如图7(a)所示,主要功能为选择哪一个寄存器将被写入,输出一个寄存器索引。Branch模块如图7(b)所示,主要功能为判断是否能够发生分支跳转指令,将信号传给多路选择器MUX1用于选择是否发生跳转。
冒险:数据冒险
如果一条指令需要某数据而该数据正在被之前的指令操作,那这条指令就无法执行,就导致了数据冒险。
CLK | 1 | 2 | 3 | 4 | 5 |
INS1 | IF | DECODE | EXE | ||
INS2 | IF | DECODE | EXE | ||
INS3 | IF | DECODE | EXE |
处理方法:数据前递Forwarding
通过比较:Rw寄存器是否与将读取的Ra,Rb相同,从而确定是否含有数据冒险,如果有相同,使用多路选择器进行选择,把值forward到指令寄存器里。
控制冒险
如果现在要执行哪条指令,是由之前指令的运行结果决定,而现在那条之前指令的结果还没产生,就导致了控制冒险。
本次设计存储器由于在第三级判断是否产生分支跳转,所以如果分支跳转发生,前两条指令都需要置零。
异常处理
异常处理主要通过CP0协处理器实现。
异常处理的优先级
例外 | 类型 |
中断 | 异步 |
地址错例—取指 | 同步 |
保留指令例外 | 同步 |
整型溢出例外、陷阱例外、系统调用例外 | 同步 |
地址错例外—数据访问 | 同步 |
例外入口向量位置
在MUX1模块中,设置了跳转到此条地址的信号,是的当异常提交时,例外即改变PC到对应的地址。所有例外(含中断)的例外入口地址统一为0xBFC0.0380系统控制寄存器
Reg | Sel. | 寄存器名称 | 功能定义 |
8 | 0 | BadV Addr | 记录最新地址相关例外的出错地址 |
12 | 0 | Status | 处理器状态与控制寄存器 |
13 | 0 | Cause | 存放上一次例外原因 |
14 | 0 | EPC | 存放上一次发生例外指令的PC |
BadVAddr寄存器(CP0 Register 8,Select 0)
BadVAddr寄存器是一个只读寄存器,用于记录最近一次导致发生地址错例外的虚地址
域名称 | 位 | 功能描述 | 读/写 | 复位值 |
BadVAddr | 31.0 | 出错的虚地址 | R | 无 |
Status寄存器(CP0 Register 12,Select 0)
Status寄存器是一个可读写寄存器,包含有处理器操作模式、中断使能以及处理器状态诊断信息。
Cause寄存器(CP0 Register 13,Select 0)
Cause寄存器主要用于描述最近一次例外的原因。除此之外还对软件中断进行了控制。
除了IP1..IP0域外,Cause寄存器的其它域对于软件均只读。
ExcCode | 助记符 | 描述 |
0x00 | Int | 中断 |
0x04 | AdEL | 地址错例外(读数据或取指令) |
0x05 | AdES | 地址错例外(写数据) |
0x08 | Sys | 系统调用例外 |
0x09 | Bp | 断点例外 |
0x0a | RI | 保留指令例外 |
0x0c | Ov | 算术溢出例外 |
EPC寄存器(CP0 Register 14,Select 0)
EPC寄存器是一个32位可读写寄存器,其包含例外处理完成后继续开始执行的指令的PC。
在响应同步(精确)例外时,处理器向EPC寄存器中写入:
直接触发例外的指令的PC。
当直接触发例外的指令位于分支延迟槽时,记录该指令前一条分支或跳转指令的PC,同时Cause.BD置为1。
在响应异步(非精确)例外时,处理器向EPC寄存器中写入例外处理完成后继续执行的指令的PC。
当Status寄存器的EXL位为1时,发生例外时不更新EPC寄存器。
域名称 | 位 | 功能描述 | 读/写 | 复位值 |
EPC | 31..0 | 例外程序计数器 | R/W | 无 |
异常处理单元
如图8,异常提交时,要出于最后一集,但由于是三级流水线,本发明的设计过程中,异常在位于第三级的异常处理单元处理。
因为是三级流水结构,所以在进行控制时,需要把控制各模块的信号,和异常信号对比,最终得到一个最终的控制信号控制各个模块。
通过溢出和地址错误,判断是否写入寄存器或存储器,修改信号。
注意:CAUSE保存每次错误类型,EPA保存错误返回地址,对PC的修改将直接由信号完成,故不需要放在此模块里面。
补充资料:
1.MIPS32指令系统介绍
其中MIPS32指令系统就是一种机器语言的集合。可以分为以下各类:空操作、寄存器/寄存器传输、常数加载、算数/逻辑指令、整数乘除法和求余数、整数乘加、加载和存储、跳转和子程序调用分支、浮点等功能。
本发明使用的指令系统包含所有非浮点MIPS I指令和MIPS32中的ERET指令,少量的CP0寄存器以支持中断和系统调用指令。
指令分类:
在MIPS32指令系统中,指令被分为三种不同类型。三种类型的指令分别为I-Type,J-Type,R-Type。
其中,R-type指令构成比较复杂包含复杂的结构,其结构主要为:
I-Type指令主要为含有立即数类型的指令,其结构主要为:
J-type主要是分支跳转指令,其结构主要为:
指令功能分析
每一条指令都对应着特定的功能,需要对每一条指令进行分析。
算术运算指令
(1)ADD rd,rs,rt GPR[rd]←GPR[rs]+GPR[rt]
功能描述:GPR(通用寄存器)rt中的32位字值与GPR rs中的32位值相加以产生32位结果。结果有以下两种情况。
·如果加法运算导致32位2的补码算术溢出,则不会修改目标寄存器,并且会发生整数溢出异常。
·如果加法没有溢出,则将32位结果放入GPR rd。
冒险:该指令可能会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(2)ADDI rt,rs,immediate GPR[rt]←GPR[rs]+sign_extend(imm)
功能描述:将16位有符号立即数有符号扩展至32位再加到GPR rs中的32位值中以产生32位结果。有以下两种结果。
·如果加法运算导致32位2的补码算术溢出,则不会修改目标寄存器,并且会发生整数溢出异常。
·如果加法没有溢出,则将32位结果放入GPR rt中。
冒险:该指令可能会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(3)ADDU rd,rs,rt GPR[rd]←GPR[rs]+GPR[rt]
功能描述:将GPR rt中的32位字值与GPR rs中的32位值相加,并将32位算术结果放入GPR rd中。
在任何情况下都不会发生Integer Overflow异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(4)ADDIU rt,rs,immeidate GPR[rt]←GPR[rs]+sign_extend(imm)
功能描述:将16位有符号立即数有符号扩展至32位再加到GPR rs中的32位值中,并将32位算术结果放入GPR rt中。
在任何情况下都不会发生Integer Overflow异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(5)SUB rd.rs,rt GPR[rd]←GPR[rs]-GPR[rt]
功能描述:从GPR rs中的32位值中减去GPR rt中的32位字值,以产生32位结果。可能出现以下两种结果。
·如果减法导致32位2的补码算术溢出,则目标寄存器不会被修改,并且会发生整数溢出异常。
·如果没有溢出,则将32位结果放入GPR rd。
冒险:该指令可能会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(6)SUBU rd,rs,rt GPR[rd]←GPR[rs]-GPR[rt]
功能描述:从GPR rs中的32位值中减去GPR rt中的32位字值,然后将32位算术结果放入GPR rd中。
在任何情况下都不会发生整数溢出异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(7)SLT rd,rs,rt GPR[rd]←(GPR[rs]<GPR[rt])
功能描述:将GPR rs和GPR rt的内容作为有符号整数进行比较,并在GPR rd中记录比较的布尔结果。如果GPR rs小于GPR rt,则结果为1(真);否则为0(否)。算术比较不会导致Integer Overflow异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(8)SLTI rt,rs,immediate GPR[rt]←(GPR[rs]<sign_extend(imm))
功能描述:将GPR rs的内容和16位有符号立即数做有符号扩展至32位数作为有符号整数进行比较,并在GPR rt中记录比较的布尔结果。如果GPR rs小于立即数,则结果为1(true);否则,结果为true。否则为0(否)。
算术比较不会导致Integer Overflow异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(9)SLTIU rt,rs,immediate GPR[rt]←(GPR[rs]<sign_extend(imm))
功能描述:比较GPR rs和16位有符号立即数做有符号扩展至32位数作为无符号整数的内容,并在GPR rt中记录比较的布尔结果。如果GPR rs小于立即数,则结果为1(true);否则,结果为true。否则为0(否)。
算术比较不会导致Integer Overflow异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(10)SLTU rd,rs,rt GPR[rd]←(GPR[rs]<GPR[rt])
功能描述:将GPR rs和GPR rt的内容作为无符号整数进行比较,并在GPR rd中记录比较的布尔结果。如果GPR rs小于GPR rt,则结果为1(真);否则为0(否)。算术比较不会导致Integer Overflow异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(11)DIV rs,rt(HI,LO)←GPR[rs]/GPR[rt]
功能描述:GPR rs中的32位字值除以GPR rt中的32位值,将两个操作数都视为有符号值。32位商放入特殊寄存器LO中,而32位余数放入特殊寄存器HI中。
在任何情况下都不会发生算术异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
注:HI和LO属于特殊寄存器,读取需要特殊指令(MFLO,MFHI)
注:在任何情况下都不会发生算术异常。如果检测到零除或溢出条件并采取了某些措施,则通常在除法指令之后是附加指令,以检查零除数和/或溢出。如果除法是异步的,则零除法检查可以与除法并行执行。除零或溢出所采取的措施是程序本身的一项约定,或更常见的是系统软件中的一项约定。一种可能是将BREAK异常与代码字段值一起使用,以将问题通知系统软件。
例如,环境中的C编程语言期望被零除以终止程序或执行程序指定的信号处理程序。C不会期望溢出导致任何异常情况。如果C编译器使用除法指令,它还会发出代码以测试零除数,并执行BREAK指令以通知操作系统是否检测到零。
默认情况下,大多数使用MIPS架构的编译器会发出其他指令,以检查使用该指令时是否被零除和溢出情况。在许多编译器中,可以使用汇编助记符“DIV r0,rs,rt”来防止发出这些其他测试指令。在某些处理器中,整数除法运算可能异步进行,并允许其他CPU指令在完成之前执行。在结果写入之前,尝试读取LO或HI会互锁,直到结果准备好为止。异步执行不影响程序结果,但是可以通过安排除法来提高性能,从而使其他指令可以并行执行。
(12)DIVU rs,rt(HI,LO)←GPR[rs]/GPR[rt]
功能描述:GPR rs中的32位字值除以GPR rt中的32位值,将两个操作数都视为无符号值。32位商放入特殊寄存器LO中,而32位余数放入特殊寄存器HI中。
在任何情况下都不会发生算术异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(13)MULT rs,rt(HI,LO)←GPR[rs]×GPR[rt]
功能描述:将GPR rt中的32位字值与GPR rs中的32位值相乘,将两个操作数都视为有符号值,以产生64位结果。结果的低阶32位字被放置到特殊寄存器LO中,而高阶32位字被放置到特殊寄存器HI中。
在任何情况下都不会发生算术异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(14)MULTU rs,rt(HI,LO)←GPR[rs]×GPR[rt]
功能描述:将GPR rt中的32位字值与GPR rs中的32位值相乘,将两个操作数都视为无符号值,以产生64位结果。结果的低阶32位字被放入特殊寄存器LO,高阶32位字被放入特殊寄存器HI。
在任何情况下都不会发生算术异常。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
逻辑运算指令
(15)AND rd,rs,rt GPR[rd]←GPR[rs]&GPR[rt]
功能描述:GPR rs的内容与GPR rt的内容通过按位逻辑AND(与)运算,将结果放入GPR rd。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(16)ANDI rt,rs,immediate GPR[rt]←GPR[rs]&Zero_extend(imm)
功能描述:16位立即数向左扩展零,并与GPR rs的内容进行按位逻辑与运算,将结果放入GPR rt。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(17)LUI rt,immediate GPR[rt]←immediate||0 16
功能描述:16位立即数向左移16位,并在低16位补0并连接起来。将32位结果放入GPR rt中。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(18)NOR rd,rs,rt GPR[rd]←GPR[rs]nor GPR[rt]
功能描述:GPR rs中的值与GPR rt中的值按位逻辑或非,结果写入GPR rd中。无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(19)OR rd,rs,rt GPR[rd]←GPR[rs]or GPR[rt]
功能描述:GPR rs的内容与GPR rt的内容通过按位逻辑或运算,然后将结果放入GPR rd。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(20)ORI rt,rs,immediate GPR[rt]←GPR[rs]or Zero_extend(imm)
功能描述:GPR rs中的值与零扩展至32位的立即数imm按位逻辑或,结果写入GPRrt中。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(21)XOR rd,rs,rt GPR[rd]←GPR[rs]xor GPR[rt]
功能描述:GPR rs中的值与GPR rt中的值按位逻辑异或,结果写入GPR rd中。无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(22)XORI rt,rs,immediate GPR[rt]←GPR[rs]xor Zero_extend(imm)
功能描述:GPR rs中的值与零扩展至32位的立即数imm按位逻辑异或,结果写入GPR rt中。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
移位指令
(23)SLL rd,rt,sa GPR[rd]←GPR[rt]<<sa
功能描述:由立即数sa指定移位量,对rt的值进行逻辑左移(右边补零),结果写入GPR rd中。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(24)SLLV rd,rs,rt GPR[rd]←GPR[rt]<<rs
功能描述:由GPR rs中的值指定移位量,对GPR rt的值进行逻辑左移,结果写入GPR rd中。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(25)SRA rd,rt,sa GPR[rd]←GPR[rt]>>sa(arithmetic)
功能描述:由立即数sa指定移位量,对GPR rt的值进行算术右移,结果写入GPR rd中。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(26)SRAV rd,rs,rt GPR[rd]←GPR[rt]>>rs(arithmetic)
功能描述:由GPR rs中的值指定移位量,对GPR rt的值进行算术右移,结果写入GPR rd中。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(27)SRL rd,rt,sa GPR[rd]←GPR[rt]>>sa(logical)
功能描述:由立即数sa指定移位量,对GPR rt的值进行逻辑右移,结果写入GPR rd中。无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
(28)SRLV rd,rs,rt GPR[rd]←GPR[rt]>>GPR[rs](logical)
功能描述:由GPR rs中的值指定移位量,对GPR rt的值进行逻辑右移,结果写入GPR rd中。
无例外。
冒险:该指令一定会写回Register File,因此需要在写回段实现数据通路的控制开关选择。
该指令的处理在五级流水线中会存在数据冒险,冒险检测单元应该对这条指令进行检测。同时,在确定结构下该指令不会出现控制冒险和结构冒险。
分支跳转指令
(29)BEQ rs,rt,offset if GPR[rs]=GPR[rt]then branch
功能描述:如果寄存器rs的值等于寄存器rt的值则转移,否则顺序执行。转移目标由立即数offset左移2位(为了对齐,一条指令4字节),并进行有符号扩展的值加上该分支指令对应的延迟槽指令的PC计算得到。
无例外。
冒险:在五级流水中可能会出现控制冒险。
(30)BNE rs,rt,offset if GPR[rs]≠GPR[rt]then branch
功能描述:如果寄存器rs的值不等于寄存器rt的值则转移,否则顺序执行。转移目标由立即数offset左移2位并进行有符号扩展的值加上该分支指令对应的延迟槽指令的PC计算得到。
无例外。
冒险:在五级流水中可能会出现控制冒险。
(31)BGEZ rs,offset if GPR[rs]≥0then branch
功能描述:如果寄存器rs的值大于等于0则转移,否则顺序执行。转移目标由立即数offset左移2位并进行有符号扩展的值加上该分支指令对应的延迟槽指令的PC计算得到。
无例外。
冒险:在五级流水中可能会出现控制冒险。
(32)BGTZ rs,offset if GPR[rs]>0then branch
功能描述:如果寄存器rs的值大于0则转移,否则顺序执行。转移目标由立即数offset左移2位并进行有符号扩展的值加上该分支指令对应的延迟槽指令的PC计算得到。无例外。
冒险:在五级流水中可能会出现控制冒险。
(33)BLEZ rs,offset if GPR[rs]≤0then branch
功能描述:如果寄存器rs的值小于等于0则转移,否则顺序执行。转移目标由立即数offset左移2位并进行有符号扩展的值加上该分支指令对应的延迟槽指令的PC计算得到。
无例外。
冒险:在五级流水中可能会出现控制冒险。
(34)BLTZ rs,offset if GPR[rs]<0then branch
功能描述:如果寄存器rs的值小于0则转移,否则顺序执行。转移目标由立即数offset左移2位并进行有符号扩展的值加上该分支指令对应的延迟槽指令的PC计算得到。无例外。
冒险:在五级流水中可能会出现控制冒险。
(35)BLTZAL rs,offset if GPR[rs]<0then procedure_call
功能描述:如果寄存器rs的值小于0则转移,否则顺序执行。转移目标由立即数offset左移2位并进行有符号扩展的值加上该分支指令对应的延迟槽指令的PC计算得到。无论转移与否,将该分支对应延迟槽指令之后的指令的PC值保存至第31号通用寄存器中。
无例外。
冒险:在五级流水中可能会出现控制冒险。
(36)BGEZAL rs,offset if GPR[rs]≥0then procedure_call
功能描述:如果寄存器rs的值大于等于0则转移,否则顺序执行。转移目标由立即数offset左移2位并进行有符号扩展的值加上该分支指令对应的延迟槽指令的PC计算得到。无论转移与否,将该分支对应延迟槽指令之后的指令的PC值保存至第31号通用寄存器中。
无例外。
冒险:在五级流水中可能会出现控制冒险。
(37)J target PC←PC 31..28||instr_index||0 2
功能描述:无条件跳转。跳转目标由该分支指令对应的延迟槽指令的PC的最高4位与立即数instr_index左移2位后的值拼接得到。
无例外。
冒险:在五级流水中可能会出现控制冒险。
(38)JAL target GPR[31]←PC+8;PC←PC 31..28||instr_index||02
功能描述:无条件跳转。跳转目标由该分支指令对应的延迟槽指令的PC的最高4位与立即数instr_index左移2位后的值拼接得到。同时将该分支对应延迟槽指令之后的指令的PC值保存至第31号通用寄存器中。
无例外。
冒险:在五级流水中可能会出现控制冒险。
(39)JR rs temp←GPR[rs];PC←temp
功能描述:无条件跳转。跳转目标为寄存器rs中的值。
无例外。
冒险:在五级流水中可能会出现数据冒险。
(40)JALR rd,rs temp←GPR[rs],GPR[rd]←PC+8;PC←temp
功能描述:无条件跳转。跳转目标为寄存器rs中的值。同时将该分支对应延迟槽指令之后的指令的PC值保存至寄存器rd中。
无例外。
冒险:在五级流水中可能会出现数据冒险。
数据移动指令
(41)MFHI rd GPR[rd]←HI
功能描述:将HI寄存器的值写入到寄存器rd中。
无例外。
冒险:在五级流水中可能会出现数据冒险。
(42)MFLO rd GPR[rd]←LO
功能描述:将LO寄存器的值写入到寄存器rd中。
无例外。
冒险:在五级流水中可能会出现数据冒险。
(43)MTHI rs HI←GPR[rs]
功能描述:将寄存器rs的值写入到HI寄存器中。
无例外。
冒险:在五级流水中可能会出现数据冒险。
(44)MTLO rs LO←GPR[rs]
功能描述:将寄存器rs的值写入到LO寄存器中。
无例外。
冒险:在五级流水中可能会出现数据冒险。
(45)BREAK SignalException(Breakpoint)
功能描述:触发断点例外。发生断点异常,立即并无条件地将控制权转移到异常处理程序。该代码字段可用作软件参数,但是只有通过加载包含指令的存储字的内容,异常处理程序才能检索该代码字段。
断点例外。
冒险:无。
(46)SYSCALL SignalException(SystemCall)
功能描述:触发系统调用例外。发生系统调用异常,立即并无条件地将控制权转移到异常处理程序。该代码字段可用作软件参数,但是只有通过加载包含指令的存储字的内容,异常处理程序才能检索该代码字段。
系统调用例外。
冒险:无。
访存指令
(47)LB rt,offset(base)GPR[rt]←memory[GPR[base]+offset]
功能描述:将base寄存器的值加上符号扩展后的立即数offset得到访存的虚地址,据此虚地址从存储器中读取1个字节的值并进行符号扩展,写入到rt寄存器中。
无例外。(因为这个地址访问的是存储器,LBU,SB同)(也可能出现SB中提到的例外)
冒险:可能发生数据冒险,若只有一个存储器(即存储器中数据和指令不是分开存放)则可能发生结构冒险。
(48)LBU rt,offset(base)GPR[rt]←memory[GPR[base]+offset]
功能描述:将base寄存器的值加上符号扩展后的立即数offset得到访存的虚地址,据此虚地址从存储器中读取1个字节的值并进行零扩展,写入到rt寄存器中。
无例外。
冒险:可能发生数据冒险,若只有一个存储器(即存储器读写共用一条地址线)则可能发生结构冒险。
(49)LH rt,offset(base)GPR[rt]←memory[GPR[base]+offset]
功能描述:将base寄存器的值加上符号扩展后的立即数offset得到访存的虚地址,如果地址不是2的整数倍则触发地址错例外,否则据此虚地址从存储器中读取连续2个字节的值并进行符号扩展,写入到rt寄存器中。
地址最低1位不为0,触发地址错例外
冒险:可能发生数据冒险,若只有一个存储器(即存储器读写共用一条地址线)则可能发生结构冒险。
(50)LHU rt,offset(base)GPR[rt]←memory[GPR[base]+offset]
功能描述:将base寄存器的值加上符号扩展后的立即数offset得到访存的虚地址,如果地址不是2的整数倍则触发地址错例外,否则据此虚地址从存储器中读取连续2个字节的值并进行零扩展,写入到rt寄存器中。
地址最低1位不为0,触发地址错例外。
冒险:可能发生数据冒险,若只有一个存储器(即存储器读写共用一条地址线)则可能发生结构冒险。
(51)LW rt,offset(base)GPR[rt]←memory[GPR[base]+offset]
功能描述:将base寄存器的值加上符号扩展后的立即数offset得到访存的虚地址,如果地址不是4的整数倍则触发地址错例外,否则据此虚地址从存储器中读取连续4个字节的值并进行符号扩展,写入到rt寄存器中。
地址最低2位不为0,触发地址错例外。
冒险:可能发生数据冒险,若只有一个存储器(即存储器读写共用一条地址线)则可能发生结构冒险。
(52)SB rt,offset(base)memory[GPR[base]+offset]←GPR[rt]
功能描述:将base寄存器的值加上符号扩展后的立即数offset得到访存的虚地址,据此虚地址将rt寄存器的最低字节存入存储器中。
可能出现的例外:有TLB重新填充,TLB无效,TLB修改,总线错误,地址错误,监视
冒险:可能发生数据冒险,若只有一个存储器(即存储器读写共用一条地址线)则可能发生结构冒险。
(53)SH rt,offset(base)memory[GPR[base]+offset]←GPR[rt]
功能描述:将base寄存器的值加上符号扩展后的立即数offset得到访存的虚地址,如果地址不是2的整数倍则触发地址错例外,否则据此虚地址将rt寄存器的低半字存入存储器中。
地址最低1位不为0,触发地址错例外。
冒险:可能发生数据冒险,若只有一个存储器(即存储器读写共用一条地址线)则可能发生结构冒险。
(54)SW rt,offset(base)memory[GPR[base]+offset]←GPR[rt]
功能描述:将base寄存器的值加上符号扩展后的立即数offset得到访存的虚地址,如果地址不是4的整数倍则触发地址错例外,否则据此虚地址将rt寄存器存入存储器中。
地址最低2位不为0,触发地址错例外。
冒险:可能发生数据冒险,若只有一个存储器(即存储器读写共用一条地址线)则可能发生结构冒险。
(55)ERET PC←EPC
功能描述:从中断、例外处理返回。
无例外。
冒险:可能发生数据冒险。
(56)MFC0 rt,rd,sel GPR[rt]←CP0[rd,sel]
功能描述:由rd和sel组合指定的协处理器0寄存器的内容被加载到通用寄存器rt中。请注意,并非所有协处理器0寄存器都支持sel字段。在这些情况下,sel字段必须为零。
可能发生的例外:协处理器不可用、Reserved Instruction。
冒险:可能发生数据冒险。
(57)MTC0 rt,rd,sel CPR[0,rd,sel]←GPR[rt]
功能描述:通用寄存器rt的内容被加载到由rd和sel组合指定的协处理器0寄存器中。并非所有协处理器0寄存器都支持sel字段。在这些情况下,必须将sel字段设置为零。可能发生的例外:协处理器不可用、Reserved Instruction。
冒险:可能发生数据冒险。译码逻辑分析
概述
译码逻辑是重要的信号通路处理逻辑,由译码逻辑发出的指令控制指令信号的工作和运行,其中突出表现为根据指令的opcode和funct段,判断指令类型,在decode模块中输出信号。
R型指令
R型指令的opcode段除了三条比较特殊的之外,其他的全部为000000,这就给分步译码提供了方法,opcode段为000000,那么证明其为R指令,然后译码funct段的,funct对于指令opcode为010000段时(55,56,57),需要结合具体代码特殊考虑。
编号 | 类型 | opcode | funct |
1 | ADD | 000000 | 100000 |
3 | ADDU | 000000 | 100001 |
5 | SUB | 000000 | 100010 |
6 | SUBU | 000000 | 100011 |
7 | SLT | 000000 | 101010 |
9 | SLTU | 000000 | 101011 |
11 | DIV | 000000 | 011010 |
12 | DIVU | 000000 | 011011 |
13 | MULT | 000000 | 011000 |
14 | MULTU | 000000 | 011001 |
15 | AND | 000000 | 100100 |
18 | NOR | 000000 | 100111 |
19 | OR | 000000 | 100101 |
21 | XOR | 000000 | 100110 |
23 | SLL | 000000 | 000000 |
24 | SLLV | 000000 | 000100 |
25 | SRA | 000000 | 000011 |
26 | SRAV | 000000 | 000111 |
27 | SRL | 000000 | 000010 |
28 | SRLV | 000000 | 000110 |
39 | JR | 000000 | 001000 |
40 | JALR | 000000 | 001001 |
41 | MFHI | 000000 | 010000 |
42 | MFLO | 000000 | 010010 |
43 | MTHI | 000000 | 010001 |
44 | MTLO | 000000 | 010011 |
45 | BREAK | 000000 | 001101 |
46 | SYSCALL | 000000 | 001100 |
55 | ERTL | 010000 | 011000 |
56 | MFC0 | 010000 | 00000(25-21) |
57 | MTC0 | 010000 | 00100 |
I型指令
I型指令的主要区分在于它的opcode段,除34-36指令均为000001外,其他指令的opcode段各不相同,并且不和R型指令相同,所以可以直接译码。
而其中31-36段指令,由于其20-16位同样含有一定的信息,所以应该结合这段的译码逻辑进行考虑。
编号 | 类型 | opcode | funct |
2 | ADDI | 001000 | None |
4 | ADDIU | 001001 | None |
8 | SLTI | 001010 | None |
10 | SLTUI | 001011 | None |
16 | ANDI | 001100 | None |
17 | LUI | 001111 | None |
20 | ORI | 001010 | None |
22 | XORI | 001110 | None |
29 | BEQ | 000100 | |
30 | BNE | 000101 | |
31 | BGEZ | 000001 | 00001(20-16) |
32 | BGTZ | 000111 | 00000 |
33 | BLEZ | 000110 | 00000 |
34 | BLTZ | 000001 | 00000 |
35 | BLTZAL | 000001 | 10000 |
36 | BGEZAL | 000001 | 10001 |
47 | LB | 100000 | |
48 | LBU | 100100 | |
49 | LH | 100001 | |
50 | LHU | 100101 | |
51 | LW | 100011 | |
52 | SB | 101000 | |
53 | SH | 101001 | |
54 | SW | 101011 |
J型指令
J型指令只含有两条,且其目标为直接跳转,那么就直接进行opcode段的译码。
编号 | 类型 | opcode | |
37 | J | 000010 | |
38 | JAL | 000011 |
控制信号分析
控制信号分析分析了寄存器中所有的控制信号通路和信号所代表的含义。
本发明通过上板测试运行,实现了指令的运行,完成了一个可以在通用的可以运行特定程序的CPU。
Claims (1)
1.一种基于MIPS32指令系统的三级流水线CPU设计方法,其特征在于:三级流水线由两个流水线寄存器和在其三个流水级中插入的模块构成;三级流水线CPU的运行过程由取指令、译码和执行三级组成;其流水情况为:
其中:
IF——取指令
DECODE——译码
EXE——执行
CLK——时钟节拍数
INS——指令
所述的取指令过程:首先由多路选择器模块MUX1选择适合的PC值,将其PC值发送给对应的PC模块,PC模块再将对应的地址转送给指令存储器,进行取地址操作,除此之外,再将地址存入下一级流水线寄存器中;当指令存储器收到指令对应的地址时,进行取指令操作,将这一拍取出的指令存入下一级流水线寄存器中;
所述的译码过程:指令被送译码器中,根据所拥有的指令不同生成不同的控制信号,这些控制信号将帮助执行指令时保证指令正常运行,构成了指令的控制通路,将这些信号存入下一级流水线寄存器中;同时,指令信号被分段传输入寄存器文件中,这些信号是寄存器的索引,通过索引读出数据,将数据存入下一级流水线寄存器中;同时,还有部分信号和数据是直接在指令中包含的,通过前一级的流水线寄存器将其取出,然后导入下一级流水线寄存器中;
所述的执行过程:流水线寄存器发出所有的数据信号和控制信号,他们将完成指令最终的操作,并将结果传回PC模块中;在直接跳转单元中,指令完成的是跳转地址的计算与选择操作,将最终地址传回多路选择器MUX1后,通过控制信号选择接下来的地址传入PC中;在算数逻辑运算单元模块ALU中,完成的是算数计算指令和逻辑运算指令,根据信号,将结果写回寄存器文件中;指令运行时可能发生异常,当异常发生时,异常处理模块将会改写指令的控制信号,使指令按照异常发生的控制信号进行运作,ALU或流水线寄存器将遇到的异常提交到协处理器单元CP0中,然后CPU会将这些进行处理;在Branch模块中,判断指令是否为分支跳转指令,视情况将不同的指令地址送入;流水线最后的多路选择器MUX2将选择何种数据写入寄存器文件;而多路选择器MUX3作用是判断是写入哪个寄存器文件中的寄存器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010958681.8A CN112182999B (zh) | 2020-09-14 | 2020-09-14 | 一种基于mips32指令系统的三级流水线cpu设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010958681.8A CN112182999B (zh) | 2020-09-14 | 2020-09-14 | 一种基于mips32指令系统的三级流水线cpu设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112182999A true CN112182999A (zh) | 2021-01-05 |
CN112182999B CN112182999B (zh) | 2022-10-04 |
Family
ID=73920795
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010958681.8A Expired - Fee Related CN112182999B (zh) | 2020-09-14 | 2020-09-14 | 一种基于mips32指令系统的三级流水线cpu设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112182999B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113110879A (zh) * | 2021-03-31 | 2021-07-13 | 北京中科晶上科技股份有限公司 | 指令处理方法及装置 |
CN117331603A (zh) * | 2023-09-18 | 2024-01-02 | 中国人民解放军军事科学院国防科技创新研究院 | 基于优先级判定的深度流水线前向旁路 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5603047A (en) * | 1995-10-06 | 1997-02-11 | Lsi Logic Corporation | Superscalar microprocessor architecture |
CN101937341A (zh) * | 2010-09-09 | 2011-01-05 | 西北工业大学 | 一种自主多模态管理方法 |
CN103150146A (zh) * | 2013-01-31 | 2013-06-12 | 西安电子科技大学 | 基于可扩展处理器架构的专用指令集处理器及其实现方法 |
CN104331268A (zh) * | 2014-10-27 | 2015-02-04 | 杭州中天微系统有限公司 | 一种用于低功耗处理器的加快条件跳转执行的装置 |
CN104424158A (zh) * | 2013-08-19 | 2015-03-18 | 上海芯豪微电子有限公司 | 基于通用单元的高性能处理器系统和方法 |
-
2020
- 2020-09-14 CN CN202010958681.8A patent/CN112182999B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5603047A (en) * | 1995-10-06 | 1997-02-11 | Lsi Logic Corporation | Superscalar microprocessor architecture |
CN101937341A (zh) * | 2010-09-09 | 2011-01-05 | 西北工业大学 | 一种自主多模态管理方法 |
CN103150146A (zh) * | 2013-01-31 | 2013-06-12 | 西安电子科技大学 | 基于可扩展处理器架构的专用指令集处理器及其实现方法 |
CN104424158A (zh) * | 2013-08-19 | 2015-03-18 | 上海芯豪微电子有限公司 | 基于通用单元的高性能处理器系统和方法 |
CN104331268A (zh) * | 2014-10-27 | 2015-02-04 | 杭州中天微系统有限公司 | 一种用于低功耗处理器的加快条件跳转执行的装置 |
Non-Patent Citations (2)
Title |
---|
KUI YI等: "32-bit RISC CPU Based on MIPS-Instruction Decoder Module Design", 《IEEE XPLORE》, 4 September 2009 (2009-09-04) * |
朱鹏程等: "可逆处理器指令流水线的设计与仿真", 《计算机工程与设计》, no. 10, 16 October 2016 (2016-10-16) * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113110879A (zh) * | 2021-03-31 | 2021-07-13 | 北京中科晶上科技股份有限公司 | 指令处理方法及装置 |
CN117331603A (zh) * | 2023-09-18 | 2024-01-02 | 中国人民解放军军事科学院国防科技创新研究院 | 基于优先级判定的深度流水线前向旁路 |
CN117331603B (zh) * | 2023-09-18 | 2024-04-09 | 中国人民解放军军事科学院国防科技创新研究院 | 基于优先级判定的深度流水线前向旁路 |
Also Published As
Publication number | Publication date |
---|---|
CN112182999B (zh) | 2022-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0368332B1 (en) | Pipeline data processor | |
JP2761688B2 (ja) | データ処理装置 | |
US5619664A (en) | Processor with architecture for improved pipelining of arithmetic instructions by forwarding redundant intermediate data forms | |
US5398321A (en) | Microcode generation for a scalable compound instruction set machine | |
KR100254007B1 (ko) | 2개의 명령을 동시에 실행할 수 있는 데이타프로세서 | |
JPH0926878A (ja) | データ処理装置 | |
JPH09311786A (ja) | データ処理装置 | |
JP3449186B2 (ja) | パイプラインバイパス機能を有するデータ処理装置 | |
CN112182999B (zh) | 一种基于mips32指令系统的三级流水线cpu设计方法 | |
CN117193861B (zh) | 指令处理方法、装置、计算机设备和存储介质 | |
KR20080014062A (ko) | 마이크로프로세서에서의 효율적인 서브프로그램 복귀 | |
JP2001034471A (ja) | Vliw方式プロセッサ | |
US7613903B2 (en) | Data processing device with instruction translator and memory interface device to translate non-native instructions into native instructions for processor | |
WO2007085010A2 (en) | Early conditional selection of an operand | |
JP3736866B2 (ja) | スーパーパイプライン式スーパースカラーマイクロプロセッサ用のマイクロコントロールユニット | |
JPH07120284B2 (ja) | データ処理装置 | |
US5742755A (en) | Error-handling circuit and method for memory address alignment double fault | |
JP3182591B2 (ja) | マイクロプロセッサ | |
CN113703845A (zh) | 一种基于risc-v的可重构嵌入式处理器微架构及其工作方法 | |
US6453412B1 (en) | Method and apparatus for reissuing paired MMX instructions singly during exception handling | |
RU2816094C1 (ru) | Vliw-процессор с дополнительным подготовительным конвейером и предсказателем перехода | |
US7191432B2 (en) | High frequency compound instruction mechanism and method for a compare operation in an arithmetic logic unit | |
US20240192958A1 (en) | Branch target buffer operation with auxiliary indirect cache | |
US6289439B1 (en) | Method, device and microprocessor for performing an XOR clear without executing an XOR instruction | |
JP3147884B2 (ja) | 記憶装置及び情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20221004 |
|
CF01 | Termination of patent right due to non-payment of annual fee |