引言

此专栏的文章记录自己学习《自己动手写CPU》的过程。算是一个学习笔记,里面也会夹杂个人的思考以及代码编写。希望自己可以像作者一样,坚持到最后。加油~~

本篇学习MIPS32处理器的基本架构。

致谢

感谢书籍《自己动手写CPU》及其作者雷思磊。一并感谢开源精神。


目录

引言

致谢

处理器与MIPS

1、计算机的简单模型

2、架构与指令集

3、MIPS的ISA演变

4、MIPS32 Release 1 指令集架构

1、数据类型

2、寄存器

3、字节次序

4、指令格式

5、指令集

6、寻址方式

7、协处理器CP0

8、异常

硬件描述语言 Verilog



处理器与MIPS

1、计算机的简单模型

计算机主要由三大组成部分构成:处理器、输入输出、存储器。

汇编指令将助记符进行译码,变为二进制数据,供计算机识别、执行。

高级语言先通过编译变为汇编语言,然后通过汇编指令将指令翻译为二进制编码数据。

2、架构与指令集

指令集架构(ISA):包括了一套指令集和一些寄存器。面向ISA编程的最大优点就是,程序的执行无关处理器类型,无关硬件。ISA本身是一个抽象物,不涉及任何实现的硬件与环境。

微架构:是ISA的具体实现。

同样的ISA,不同的微架构则会带来不同的性能。

根据不同的ISA,可将计算机分为两类:复杂指令集计算机(CISC)、精简指令集计算机(RISC)。二者的主要区别在于:

CISC指令编码长度不一致;

RISC指令编码长度一致且固定;

ISA种类:

x86:属CISC范畴

ARM:Acorn RISC Machine ,属RISC范畴,目前ARM公司仅作CPU内核设计,不做具体的芯片制造和生产。其产品侧重于低功耗、低成本,主要面向嵌入式应用。

SPARC:Scalable Processor ARChitecture ,可扩展处理器架构。属RISC范畴。

POWER:Performance Optimization With Enhanced RISC ,属RISC范畴。IBM公司的产品。

MIPS:Microprocessor without Interlocked Piped Stages,无内锁流水线处理器。属RISC范畴。其设计理念:使用简单的指令,结合优秀的编译器,采用流水线执行指令的硬件,就可以用更少的晶圆面积生产更快的处理器。龙芯处理器采用的就是此架构。

3、MIPS的ISA演变

4、MIPS32 Release 1 指令集架构

该参考数目的处理器设计就是遵循 MIPS32 Release 1 架构。

1、数据类型

  • 位(b):长度为 1 bit;
  • 字节(Byte):长度为8 bit;
  • 半字(HalfWord):长度16 bit;
  • 字(Word):长度为 32 bit;
  • 双字(Double Word):长度为 64bit;
  • 另:32位单精度浮点数,64位双精度浮点数;

2、寄存器

MIPS32的指令中处了 加载/存储 指令外,其他指令都是用寄存器或者立即数作为操作数。因为寄存器的存取可以在一个时钟周期内完成。

MIPS32中的寄存器类别:通用寄存器、特殊寄存器。

1、通用寄存器

MIPS32架构定义了 3232 位宽的寄存器,用 $0 ~ $31表示。$0 一般用作常量 0;

实际使用中,寄存器一般遵循如下的约定:

2、特殊寄存器

MIPS32中的特殊寄存器有3个:PC(程序计数器)、HI(乘除结果高位寄存器)、LO(乘除结果地位寄存器)。乘法运算时,HI保存乘法结果的高32位,LO保存低32位。除法运算时,HI存储余数,LO存储商。

3、字节次序

数据在存储器中的存取都是以字节为单位的,所以当存取的数据的位宽多于1个字节时,就需要明确数据的大小端模式。

大端模式:MSB,数据高位存储于低地址;

小端模式: LSB,数据低位保存在低地址;

参考书中MIPS32的实现是大端模式。

示例:

4、指令格式

MIPS32的架构中,指令位宽都是32。

图中 op 为指令码;func 为功能码;

5、指令集

1、逻辑操作指令

包含8条指令:and 、andi 、or 、ori 、xor 、xori 、nor 、lui

2、移位操作指令

包含6条指令:sll 、sllv 、sra 、srav 、srl 、srlv

3、移动操作指令

包含6条指令:movn、movz、mfhi、mthi、mflo、mtlo

4、算术操作指令

包含21条指令:add、addi、addiu、addu、sub、subu、clo、clz、slt、slti、sltiu、sltu、mul、mult、multu、madd、maddu、msub、msubu、div、divu

5、转移指令

包含14条指令:jr 、jalr 、j、 jal、b、bal、beq、bgez、bgezal、bgtz、blez、bltz、bltzal、bne

6、加载存储指令

包含14条指令:lb、lbu、lh、lhu、ll、lw、lwl、lwr、sb、sc、sh、sw、swl、swr

7、协处理器访问指令

包含2条指令:mtc0、mfc0

8、异常相关指令

包含14条指令,其中12条自陷指令:teq、tge、tgeu、tlt、tltu、tne、teqi、tgei、tgeiu、tlti、tltiu、tnei;系统调用指令:syscall、异常返回指令:eret

9、其余指令

包含4条指令:nop、ssnop、sync、pref

6、寻址方式

MIPS32架构的寻址方式:寄存器寻址、立即数寻址、寄存器相对寻址、PC相对寻址。

1、寄存器相对寻址

2、PC相对寻址

7、协处理器CP0

MIPS32架构提供了最多 4 个协处理器,分别是 CP0 ~ CP3。其中CP0用作系统控制,CP1、CP3作浮点处理单元。CP2用于特定实现。除CP0以外的协处理器都是可选的。

协处理器CP0,主要的作用:

配置CPU工作状态;

高速缓存控制;

异常控制;

存储单元管理;

8、异常

硬件描述语言 Verilog

此部分本人比较了解,就不再记录。建议初学者查看我的下面的专栏,快速了解Verilog HDL语法:

Verilog HDL 语法整理https://blog.csdn.net/qq_43045275/category_11341294.html?spm=1001.2014.3001.5482

《自己动手写CPU》学习记录(1)——第1章相关推荐

  1. 自己动手写CPU(2)第一条ori指令

    本博客内容基于<自己动手写CPU>这本书 上一篇文章介绍了一下流水线思想.设计流程等,下面我们可以实操一下实现第一条ori指令. 其实实现一条ori指令不难,我目前对这一条指令的理解简单来 ...

  2. 自己动手写cpu 光盘_自己动手写CPU配套源码

    自己动手写CPU的源代码,一共15章,可以完整实现MIPS的指令 文件:n459.com/file/25127180-476886294 以下内容无关: ----------------------- ...

  3. 【自己动手写CPU】异常相关指令的实现

    MIPS架构中定义的异常类型 MIPS32架构中,有些事情打断程序的正常的执行流程,这些事情称为中断.陷阱.系统调用以及其他打断程序执行流程的情况,统称为异常. 此处的OpenMIPS处理器只实现了其 ...

  4. 自己动手写CPU(1)五级流水线及CPU第一条指令ori

    自己动手写CPU(1)五级流水线及CPU第一条指令ori 动机 不知为何研一的自由时间突然多起来,可能人一闲下来就容易焦虑吧,hhhhhh.正好之前看到一本<自己动手写CPU>,就按照此书 ...

  5. 自己动手写CPU之第七阶段(10)——除法指令实现过程1

    将陆续上传本人写的新书<自己动手写CPU>,今天是第33篇,我尽量每周四篇 亚马逊的销售地址如下,欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8/r ...

  6. 自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现

    将陆续上传本人写的新书<自己动手写CPU>,今天是第28篇.我尽量每周四篇 China-pub的预售地址例如以下(有文件夹.内容简单介绍.前言): http://product.china ...

  7. 自己动手写CPU(8)加载存储指令的实现

    自己动手写CPU(8)加载存储指令的实现 好久没更新blog了,暑假提前放了.现在收假也该收收心了,继续捡起之前的CPU,自己开的坑不管咋样把它填完吧. 指令介绍 1.加载指令 2.存储指令 修改系统 ...

  8. 自己动手写CPU(7)转移指令的实现

    自己动手写CPU(7)转移指令的实现 分支延迟槽 在MIPS五级流水线中,一条指令被分成了五个阶段:取指.译指.执行.仿存.回写.当第一条指令的执行阶段结束时,第二条指令的译指阶段也已经结束了. 那么 ...

  9. 自己动手写CPU(6)流水线暂停、乘累加减与除法器的实现

    自己动手写CPU(6)流水线暂停.乘累加减与除法器的实现 流水线暂停 因为OpenMIPS设计乘累加.乘累减.除法指令在流水线执行阶段占用多个时钟周期,因此需要暂停流水线,以等待这些多周期指令执行完毕 ...

  10. 自己动手写CPU(5)简单算术操作指令实现_1

    自己动手写CPU(5)简单算数操作指令实现_1 指令介绍 MIPS32指令集架构定义的所有算术操作指令,共有21条 共有三类,分别是: 简单算术指令 乘累加.乘累减指令 除法指令 算术指令操作介绍 一 ...

最新文章

  1. rpm、yum、编译安装轻松管理centos7程序包
  2. 中蒙最大陆路口岸2018年运行中欧班列1052列
  3. 监控io性能, free命令, ps命令, 查看网络状态, linux下抓包
  4. Octopress配置和部署
  5. 分布式事务中间件 Fescar - 全局写排它锁解读
  6. Algs4-1.4.8计算输入文件中相等的整数对的数量
  7. ImportError: No module named ‘pandas.io.data‘
  8. Linux 下报错:A Java RunTime Environment (JRE) or Java
  9. IEEE Fellow 2020名单揭晓!BDTC 2019重磅嘉宾周伯文、叶杰平、陈宝权上榜
  10. Android实现税博客,Android个人所得税计算器
  11. linux 内核空间与用户空间通信,liunx用户空间和内核空间之间的通信实现(在PPC下的实现)...
  12. ora-12555解决方案
  13. 友善串口助手 V2.5.8.0825 Serial Port Utility注册码
  14. 陪诊系统app开发,一个应用可切换不同身份
  15. 网站域名解析为什么错误?域名解析错误怎么解决?
  16. 扇贝python编程课_扇贝编程APP下载|扇贝编程python V1.1.35 安卓版下载 - 下载银行...
  17. J2EE平台WEB组件开发中如何使用定制标签
  18. JAVA虚拟机的安装以及JAVA的环境配置
  19. windows7安装Edge浏览器后无法登录微软账户
  20. iwebshop与MySQL无法并存吗_该如何做好iwebshop网上购物商场

热门文章

  1. 【深度学习实验报告】实验 1:PyTorch 使用简介
  2. 第11章-ThreadSpecificStorage
  3. 几个国内的 apple 相关社区
  4. 基于pytorch卷积人脸表情识别--毕业设计
  5. 计算机网络软件系统不包括,1period;计算机软件系统一般分为lpar; A rpar;两大部分...
  6. python 读写pcd
  7. FastAdmin下拉显示
  8. 2019全球IT行业薪酬报告:平均年薪超70万!最高薪职位竟是...
  9. Inception模块 GooLeNet网络
  10. 克里金方法内插生成高程曲面