自己动手写CPU
文章平均质量分 81
小刘真的很努力
一个疯狂努力的代码人
展开
-
第十一章:异常相关指令的实现
11.1 MIPS32架构中定义的异常类型在MIPS32架构中,有一些事件要打断程序的正常执行流程,这些事件有中断(Interrupt)、陷阱(Trap)、系统调用(System Call)以及其他任何可以打断程序正常执行流程的情况,统称为异常。异常类型及其优先级如表所示。 OpenMIPS处理器只实现对其中6种异常情况的处理,列举如下:硬件复位中断(包含软中断、硬中断)syscall系统调用无效指令溢出自陷指令引发的异常异常发生后,会进入异常处理例程进行具体的异常处理,处理结束后,返回原创 2022-02-01 13:36:45 · 2224 阅读 · 0 评论 -
第十章协处理器访问指令的实现
10.1 协处理器介绍协处理器一词通常用来表示处理器的一个可选部件,负责处理指令集的某个扩展,具有与处理器核独立的寄存器。MIPS32架构提供了最多4个协处理器,分别是CP0-CP3,作用如表所示:协处理器CP0用作系统控制,CP1,CP3用作浮点处理单元,而CP2被保留用于特定实现。除CP0处的协处理器都是可选的,OpenMIPS没有实现浮点运算,所以CP1,CP3不用实现,而CP0是不可选的,需要实现,所以下面重点介绍协处理器CP0.截至本章,我们的OpenMIPS处理器实现了很多指令,但这些指令原创 2022-01-30 20:29:02 · 691 阅读 · 0 评论 -
第九章 加载存储指令的实现
本章将实现MIPS32指令集架构中定义的加载存储指令,分两步:首先实现除ll、sc指令外的一般加载存储指令,其次实现比较特殊的加载存储指令ll、sc。9.1 加载存储指令说明MIPS指令集架构中定义的加载存储指令共有14条,如下:9.1.1 加载指令lb,lbu,lh,lhu,lw说明加载指令lb,lbu,lh,lhu,lw说明从图中可知,这5条加载指令可以根据指令中26-31bit的指令码加以区分,另外,加载指令的第0-15bit是offset,第21-15bit是base,加载地址的计算方原创 2022-01-30 14:43:43 · 4099 阅读 · 0 评论 -
第八章:转移指令的实现
本章将为OpenMIPS处理器添加转移指令,转移指令包括跳转、分支两种,区别是前者是绝对转移,后者是相对转移,但实现方法是相似的。转移指令涉及延迟槽。8.1 延迟槽在实现转移指令之前,先介绍一下延迟槽的概念。在第五章已经介绍了流水线中存在的三种相关:数据相关、结构相关、控制相关。其中,控制相关是指流水线中的转移指令或者其他需要改写PC指令造成的相关。这些指令改写了PC的值,所以导致后面已经进入流水线的几条指令无效,比如:如果转移指令在流水线的执行阶段进行转移条件判断,在发生转移时,会导致当前处于取指、译原创 2022-01-26 13:48:59 · 1312 阅读 · 0 评论 -
算数指令的实现
7.5 流水线暂停机制的设计与实现7.5.1流水线暂停机制的设计因为OpenMIPS设计乘累加、乘累减、除法指令在流水线执行阶段占用多个时钟周期,因此需要暂停流水线,以等待这些多周期指令执行完毕,一种直观的实现方法是:要暂停流水线,只需要保持取指令地址PC的值不变,同时保持流水线各个阶段的寄存器(也就是IF/ID、ID/EX、EX/MEM、MEM/WB模块的输出)不变。OpenMIPS采用的是一种改进的方法,假如位于流水线第n阶段的指令需要多个时钟周期,进而请求流水线暂停,那么需要保持取指地址PC的值原创 2022-01-16 15:25:46 · 545 阅读 · 0 评论 -
第七章 算术操作指令的实现
本章将实现MIPS32指令集架构定义的所有算数指令,共有21条,按照OpenMIPS实现这些指令的方式,可以分为三类,分别介绍如下:(1)简单算数操作指令共有15条,包括加法、减法、比较、乘法等指令,这些指令在流水线执行阶段都只需要一个时钟周期,而且实现思路很直观,与第4章添加逻辑操作指令类似,只需修改译码阶段的ID模块,执行阶段的EX模块,即可实现。(2)乘累加、乘累减治令共有4条:乘累加(madd)、无符号乘累加(maddu)、乘累减(msub)、无符号乘累减(msubu)。其中madd、mad原创 2022-01-14 12:16:28 · 10038 阅读 · 0 评论 -
移位操作的代码原理
6.2.1 新的数据相关情况的解决进一步考虑mfhi、mflo指令的处理过程,这2条指令会在流水线执行阶段读取HI、LO寄存器的值,如果直接采用HILO模块给出的HI、LO寄存器的值,可能不是正确的HI、LO寄存器的值,因为此时处于访存、回写阶段的指令有可能会修改HI、LO寄存器,以如下程序为例。指令3 4 5 需要修改HI寄存器,当指令6处在执行阶段时,指令5处于访存阶段,指令4处于回写阶段,而此时HI 寄存器的值是指令3刚刚写入的0x00000000,HILO模块正是将该值传到执行阶段。如果采用这个原创 2022-01-13 12:38:49 · 727 阅读 · 0 评论 -
第六章移动操作指令的实现
本章将实现移动操作指令,首先在6.1节介绍了MIPS32指令集架构中定义的移动操作指令的格式、作用,接着在6.2节给出移动操作指令的实现思路,介绍了修改后的数据流图,新出现的数据相关问题及其解决措施,并给出了修改后的OpenMIPS系统结构图。6.1 移动操作指令说明MIPS32指令集架构中定义的移动操作指令共有6条:movn、movz、mfhi、mthi、mflo、mtlo,后4条指令涉及对特殊寄存器hi、LO的读/写操作。截至到本章,我们的OpenMIPS处理器只实现了32个通用寄存器以及PC、所有原创 2022-01-11 20:01:13 · 1343 阅读 · 0 评论 -
逻辑移位空指令代码原理
5.5.1 修改译码阶段的ID模块对指令译码的前提是能判断出指令种类,这个过程如图5-15所示。其中op就是指指令的第26-31bit,即指令码,op2就是指令的第6-10bit,op3就是指令的第0-5bit,即功能码,op4就是指令的第16-20bit.定义如下:首先依据指令码op进行判断,如果是SPECIAL类指令,再判断指令的第6-10bit(即op2)是否为0,如果为0,那么再依据功能码op3的值,进行最终判断,确定指令类型。如果指令码op不为SPECIAL,那么就直接依据指令码op的值进行判断原创 2022-01-11 11:34:09 · 1661 阅读 · 0 评论 -
第五章逻辑、移位操作与空指令的实现
上一章建立了原始的OpenMIPS五级流水线结构,但是只实现了一条ori指令,从本章开始,将逐步完善。本章首先讨论了流水线数据相关问题,然后修改OpenMIPS以解决问题。接着对逻辑、移位操作和空指令的指令格式、用法进行了一一说明。5.1流水线数据相关问题流水线中经常有一些被称为“相关”的情况发生,它使得指令序列中下一条指令无法按照设计周期执行,这些“相关”会降低流水线的性能,流水线中的相关分为以下三种类型。结构相关:在指令执行过程中,由于硬件资源满足不了指令执行的要求,发生硬件资源冲突而产生的相关原创 2022-01-10 18:53:31 · 4362 阅读 · 0 评论 -
ori指令的测试
ori 自己动手写cpu原创 2022-01-09 13:54:03 · 881 阅读 · 0 评论 -
ORI指令实现代码
ori指令原创 2022-01-09 12:35:38 · 1158 阅读 · 0 评论 -
4. 第一条ORI的实现
ori指令介绍原创 2022-01-08 13:45:13 · 2252 阅读 · 0 评论 -
MIPS处理器
3.1系统设计目标3.1.1设计目标教学版的OpenMIPS处理器是一款具有哈佛结构的32位标量处理器,兼容MIPS32Release1指令集架构,可以使用现有的MIPS编译环境,如:GCC编译器等,设计目标如下:五级流水线哈佛结构,分开的指令、数据接口32个32位整数寄存器大端模式向量化异常处理,支持精准异常处理支持6个外部中断具有32bit数据、地址总线宽度能实现单周期乘法支持延迟转移兼容MIPS32指令集架构,支持MIPS32指令集中的所有整数指令大多数指令可以在一个时钟周原创 2022-01-02 16:55:41 · 989 阅读 · 0 评论 -
CPU处理器与MIPS
step1:处理器与MIPS1971年11月15日开始,那一天Inter发布了世界上第一款单芯片微处理器40041.1计算机的简单模型计算机的复杂在于不了解的时候可以听歌,看电影,上网等等,计算机是如何工作的?但是计算机只可以做加、减、乘、除、逻辑、移位、转移、存储、加载等几类操作1.1.1计算机的简单组成部分计算机组成有三大部分:处理器(CPU)、输入、输出(I/O)、存储器...原创 2021-12-19 15:25:15 · 870 阅读 · 0 评论