《自己动手写CPU》-理论篇-第一章

  • 理论篇 (1章)
  • 第一章 处理器与MIPS
  • 1.1 计算机的简单模型
  • 1.2 架构与指令集
  • 1.3 MIPS指令集架构的演变
  • 1.4 MIPS指令集架构简介
  • 1.4.1 数据类型
  • 1.4.2 寄存器
  • 1.4.3 字节次序
  • 1.4.4 指令格式
  • 1.4.5 指令集
  • 1.4.6 寻址方式
  • 1.4.7 协处理器CP0
  • 1.4.8 异常


理论篇 (1章)

  • 介绍指令集架构、VerilogHDL相关知识。
  1. 计算机的简单组成模型,简单使用模型。指令集架构的作用。OpenMIPS采用MIPS32指令集架构。
  2. FPGA、VerilogHDL的基础知识。
  3. CPU架构 软件开发_CPU架构 软件开发

第一章 处理器与MIPS

1.1 计算机的简单模型

  • 计算机的简单组成模型
    处理器、输入输出(I/O)、存储器(Memory)
  • 处理器:获取存储器中的指令并按指令执行一定的操作
  • I/O:提供运算数据,显示结果
  • 存储器:存储指令(运算命令)

CPU架构 软件开发_CPU架构 软件开发_02

  • 计算机的简单使用模型

1.2 架构与指令集

ISA(指令集架构):设计规范。从硬件系统中抽象出的编程所需要了解的硬件信息。包括指令集和一些寄存器。

微架构:具体实现。

  • CISC与RISC(计算机分类)
    Complext Instructor of Set Computer:每条指令对应的0、1编码串长度不一。
    Reduced Instructor of Set Computer: 长度固定。
  • MIPS(无内锁流水线微处理器)架构:

1.3 MIPS指令集架构的演变

CPU架构 软件开发_指令集架构_03

1.4 MIPS指令集架构简介

1.4.1 数据类型
  1. 位-b:1bit
  2. 字节-Byte: 8bit
  3. 半字-Half Word: 16bit
  4. 字-Word: 32bit
  5. 双字-Double Word: 64bit
  6. 32位单精度浮点数、64位双精度浮点数
1.4.2 寄存器
  1. 通用寄存器
  • 32个通用寄存器$0、$1…$31,均为32位。
  • $0: 常量0
  • $31: 存放子程序的返回地址
  • CPU架构 软件开发_寄存器_04


  • CPU架构 软件开发_指令集架构_05

  1. 特殊寄存器
  • PC(Program Counter 程序计数器)
  • HI(乘除结果高位寄存器)
  • LO(乘除结果地位寄存器)
  • 乘法运算时,HI和LO保存结果,HI存高32位,LO存低32位。
  • 除法运算时,HI存储余数,LO存储商。
1.4.3 字节次序
  • MSB: 大端模式,数据高位存在存储器的低地址中;{mem[n], mem[n+1], mem[n+2], mem[n+3]}
  • LSB
  • 本书处理器采用大端模式。
1.4.4 指令格式
  • MIPS32架构中所有指令都是32位。
  • op-指令码,func-功能码,rs、rt-源寄存器编号,rd-目的寄存器编号,sa-指定移位位数
  • CPU架构 软件开发_fpga开发_06

1.4.5 指令集
  1. 逻辑操作指令
    and、andi、or、ori、xor、xori、nor、lui
    逻辑与、或、亦或、或非等
  2. 移位操作指令
    sll、sllv、sra、srav、srl、srlv
    逻辑左移、右移、算数右移等
  3. 移动操作指令
    movn、movz、mfhi、mthi、mflo、mtlo
    通用寄存器之间以及通用寄存器与HI、LO寄存器之间的数据移动
  4. 算术操作指令
    add、addi、addiu、addu、sub、subu、clo、clz、slt、slti、sltiu、sltu、mul、mult、multu、madd、maddu、msub、msubu、div、divu
    加、减、比较、乘、乘累加、除法
  5. 转移指令
    jr、jalr、j、jal、b、bal、beq、bgez、bgezal、bgtz、blez、bltz、bltzal、bne
    程序转移到另一个地方执行
  6. 加载存储指令
    lb、lbu、lh、lhu、ll、lw、lwl、lwr、sb、sc、sh、sw、swl、swr
    “l-”:加载指令,“s-”:存储指令
  7. 协处理器访问指令
    mtc0,mfc0
    对协处理器CP0中某个寄存器进行值的读取和保存
  8. 异常相关指令
    (12条自陷)teq、tge、tgeu、tlt、tltu、tne、teqi、tgei、tgeiu、tlti、tltiu、tnei
    系统调用指令syscall、异常返回指令eret
  9. 其余指令
    nop(空)、ssnop(特殊空)、sync(保证加载存储操作的顺序)、pref(缓存预取)
1.4.6 寻址方式

寄存器寻址、立即数寻址、寄存器相对寻址、PC相对寻址;

  1. 寄存器相对寻址:
    加载/存储指令使用

CPU架构 软件开发_fpga开发_07

  1. PC相对寻址:
    转移指令使用

CPU架构 软件开发_寻址_08

1.4.7 协处理器CP0

表示处理器的一个可选部件,负责处理指令集的某个扩展,寄存器与处理器的相独立。

  • CP0-系统控制-配置CPU工作状态、高速缓存控制、一场控制、存储管理单元控制等
  • CP1、CP3-浮点处理单元
  • CP2-保留用于特定实现
  • 除CP0外的协处理器都是可选的
1.4.8 异常

硬件复位、中断(软、硬)、syscall系统调用、无效指令、溢出、自陷等