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





    引言

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

  • 相关阅读:
    大类资产智能投顾模型:从风险平价开始,夏普比1.9
    要我说,还是会写总结的项目经理才吃香
    Serverless安全揭秘:架构、风险与防护措施
    前端图形:SVG与Canvas
    37岁更要坚定,竞争从阿里的Java高并发操作手册开始
    gps点集合构造 简单多边形,排序 方向角,达到:边与边无交叉
    计算机毕业设计Java公交线路查询系统(源码+系统+mysql数据库+Lw文档)
    【无标题】
    对话MySQL之父:一个优秀程序员可抵5个普通程序员
    解决between and不包含有边界问题
  • 原文地址:https://blog.csdn.net/qq_43045275/article/details/128201781