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

news2024/9/22 15:47:12




引言

此专栏的文章记录自己学习《自己动手写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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/67776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

注册ChatGPT全攻略

参考: 最近ChatGPT很火,但有人注册会经常出现不服务当区域问题,现在把手教你解决。 准备 代理,要求是,韩国,日本,印度,新加坡,美国这几个地址。其他的不太清楚,反正香港…

开关电源环路稳定性分析(03)-开环电源

大家好,这里是大话硬件。 在前面的章节中,分析了开关电源为什么需要闭环环路控制,并且得出了开关电源需要稳定可靠,就必须增加环路控制的结论。虽然目前开关电源环路控制的方法很多,但是较常用的是电压控制方式。 这一…

联表查询之交叉连接、内、外连接

目录 1、交叉连接(笛卡尔积) 2、内连接 2.1 显示内连接(inner join) 2.2 隐示内连接 2.3 内连接的练习 2.3.1 查询第一或者二学期中所有的学生 2.3.2 查询第一和第二期所有的学生 2.3.3 查询每个班级下的学生总数,…

目标检测 YOLO5部署安装测试

一、下载模型 yolov5: 同步更新官方最新版 Yolov5 ,发行版提供模型下载地址 (gitee.com)https://gitee.com/monkeycc/yolov5?_fromgitee_search二、导入需要的包 pip install -r requirements.txt -i https://pypi.douban.com/simple/三、下载模型yolov5s.pt放到根…

Java进阶——多线程基础

文章目录线程基础1、线程介绍1.1、线程相关概念2、线程基本使用创建线程的两种方式:2.1、 继承Thread 类,重写run方法2.2、实现Runnable接口,重写run方法2.3、多线程的简单演示:2.4、继承Thread 和实现Runnable 的区别2.5、线程终…

基于鲸鱼算法优化的lssvm回归预测-附代码

基于鲸鱼算法优化的lssvm回归预测 - 附代码 文章目录基于鲸鱼算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于鲸鱼算法优化的LSSVM4.测试结果5.Matlab代码摘要:为了提高最小二乘支持向量机(lssvm)的回归预测准确率,对…

行列式基础

进阶版:(努力更新中) 二阶行列式 我们先来看看二元一次方程。 {a1,1x1a1,2x2b1a2,1x2a2,2x2b2\left\{ \begin{matrix} a_{_{1,1}} x_{_1} a_{_{1,2}} x_{_2} b_{_1} \\ \\ a_{_{2,1}} x_{_2} a_{_{2,2}} x_{_2} b_{_2} \end{matrix} \ri…

[附源码]计算机毕业设计葡萄酒销售管理系统论文Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【算法篇】利用堆高效解决大数据量时TOP-K问题

Top-k问题1.问题描述2.分析问题3.思路4.复杂度分析5.代码实现6.总结堆相关博客: 堆1.问题描述 TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。 比如:专业前10名、世界500强、富豪榜、游戏中前…

C语言第十九课:补充知识——函数栈帧的创建与销毁

目录 前言: 一、寄存器: 二、函数栈帧的创建与销毁: 1.main函数函数栈帧开辟的准备: 2.main函数函数栈帧的开辟: 3.Add函数函数栈帧的开辟: 4.Add函数函数栈帧的销毁: 5.main函数函数栈帧的销…

Linux多线程

Linux多线程 文章目录Linux多线程1.Linux线程概念1.1 什么是线程1.2 线程的执行流1.3 线程的优缺点1.4 线程的异常与用途2.进程与线程的区别总结3.多进程与多线程的应用场景4.线程控制4.1 进程ID与线程ID4.2 线程创建(pthread_create)4.3 线程终止(pthread_exit、pthread_cance…

Unity计算着色器 01

序 计算着色器,是什么? Unity中ComputeShader的基础介绍与使用 - 知乎 (zhihu.com) 好像是并行计算的一个东西。再具体的,看不懂了。 并行计算,显卡? 那看来得先了解显卡,铺垫一下,再计划…

算法前缀和

一 和为 k 的子数组 1.1 题目描述 给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。 示例 1: 输入:nums [1,1,1], k 2 输出: 2 解释: 此题 [1,1] 与 [1,1] 为两种不同的情况 示例 2: 输入:nums [1,2,3], k…

由浅入深,详解 LiveData 的那些事

引言 关于LiveData,在2022尾声的今天,从事 Android 开发的小伙伴一定不会陌生。相应的,关于 LiveData 解析与使用的文章更是数不胜数,其中不乏优秀的创作者,在众多的文章以及前辈面前,本篇也不敢妄谈能写的多么深入,易…

python使用Flask,Redis和Celery的异步任务

介绍 随着Web应用程序的发展和使用的增加,用例也变得多样化。我们现在正在建设和使用网站来执行比以往任何时候都更复杂的任务。其中一些任务可以进行处理,并将反馈立即转发给用户,而其他任务则需要稍后进行进一步处理和结果转发。越来越多地…

冯诺依曼体系各硬件工作原理解析

文章目录计算机结构体系来源冯诺依曼体系结构主存储器的基本组成运算器的基本组成控制器的基本组成计算机的工作过程总结计算机结构体系来源 1946年,美国发明了世界上第一台计算机ENIAC,可用于比较快速的数据计算,但是其运算速度却受到了人工数据的输入速度的限制,为此我们现在…

NNDL实验 优化算法3D轨迹 鱼书例题3D版

这张图在网络上很流行。代码源自: 深度学习入门:基于Python的理论与实现 (ituring.com.cn) 2D版讲解:NNDL 作业11:优化算法比较 调整学习率等超参数,观察动画,可以加深对各种算法的理解。 配合实验的模型…

南方农业杂志南方农业杂志社南方农业编辑部2022年第19期目录

遗传育种 峨眉黑鸡遗传多样性及群体遗传结构分析 袁霞;刘方庆;文陇英;徐婧;廖光祥;王强胜;王湘; 1-7 栽培与植保《南方农业》投稿:cn7kantougao163.com 井窖式移栽烤烟前期地上部和地下部生长规律拟合分析 温明霞;郭发文;冯小芽;王军;刘京;彭剑涛;廉云; 8-1…

从进程的角度来看JVM的内存分布

JVM(下面JVM都是指代HotSpot)本质上是运行在操作系统上的一个C程序,本文会从这个角度来构建对于JVM内存的完整视角,以HotSpot这个JVM实现运行在Linux操作系统上进行分析,在分析的过程中会解释清楚一些不太好理解的概念,诸如堆外内…

双十二哪些数码好物值得入手?盘点双十二最值得入手的数码好物

双十二快到了,相信很多人像我一样想趁着年末入手数码产品,但又不知道什么值得入手。最近也听到很多人问,针对这个问题,我来给大家盘点双十二最值得入手的数码好物,有需要的可以当个参考。 一、南卡小音舱蓝牙耳机 推…