2019.32019.62019.3 \sim 2019.6 上了马德教授《计算机组成》这门课,讲得还是挺不错的。

我校把计算机系统划成了《数字逻辑设计》、《计算机组成》和《计算机体系结构》三门课。

本门课程进一步熟悉了 MIPS 和 Verilog,最终还要在自己写的 CPU 上运行一个自己设计的程序。我写了一个迷你的 Flappy Bird 小游戏,链接 见此

本文对《计算机组成》的知识点进行了随性的整理。

MIPS相关

  • 移码(增码):符号位取反的补码

    • 一般用指数的移码减一来做浮点数的阶码
  • IEEE754 标准

    • float (1位符号位 + 8位指数位 + 23位底数位)
      • 其中,指数位 实际值 = 显示值 - 127
    • double (1位符号位 + 11位指数位 + 52位底数位)
  • MIPS指令

    • beq $rs, $rt, offset
      • 注意此处顺序是的。
      • offset 是 新地址 和 PC+4 的差除以 4 后的结果。
    • lw $rt, offset($rs)
      • 注意此处顺序是的。
    • sw $rt, offset($rs)
      • 注意此处顺序是的。
    • add $rd, $rs, $st
    • J Jumpaddr
      • 实际跳转地址 = PC+4[31:28] + Jumpaddr[25:0] + 00
  • 寄存器表

编号 寄存器 作用
0 $zero
1 $at 保留给汇编器
2-3 $v0 , $v1 函数调用返回值
4-7 $a0 - $a3 函数调用参数
8-15 $t0 - $t7
16-23 $s0 - $s7
24-25 $t8 , $t9
26,27 $k0 , $k1 保留给异常处理函数
28 $gp 全局指针
29 $sp 堆栈指针
30 $fp 帧指针
31 $ra 返回地址

注意 寄存器里的负数值都是用补码表示的

多周期

  • 多周期的步数
  • ALU 译码表
  • 多周期控制信号含义
信号名称 = 0 时候的含义 = 1 时候的含义
RegDst rt[20:16] rt[15:11]
RegWrite 对寄存器执行写操作
ALUScrA ALU 第一个值是PC ALU第一个值来自寄存器 A
MemRead 从 memory 中读入
MemWrite 输出到 memory
MemtoReg 写入 reg 数据从 ALUout 来 写入 reg 数据从MDA来
IorD PC 来做访问的内存地址 ALUout 来做访问的内存地址
IRWrite 内存输出到 IR 里去
PCWrite J指令的强制跳转
PCWriteCond 如果 ALU = 0,branch 强制跳转
信号名称 作用 00 01 10 11
ALUop 给 ALU 信息 其他
ALUScrB ALU 第二个值 B 4 位拓展的IR 位拓展的IR*4
PCSource 新 PC 被什么写 PC+4 branch Jump
  • 多周期数据通路

  • 多周期状态机控制信号表

存储

  • Locality
    • temporal locality (locality in time): If an item is referenced, it will tend to be referenced again soon.
    • spatial locality (locality in space): If an item is referenced, items whose addresses are close by will tend to be referenced soon.
  • Cache
    • 分类
      • Direct Mapped:取最后几个二进制位直接映射。
        • TAG 是前几个二进制位
        • 一个我们需求的地址由 TAG + Index + offset 组成
        • Cache里一个单位由 Validbit + TAG + data 组成
      • Fully associative
      • Set associative
        • Direct Mapped 其实是一路组关联
    • Strategy of block Replacement
      • Random replacement
      • Least-recently used (LRU)
      • First in,first out(FIFO)
    • Write hit:
      • write-back (Cause Inconsistent): Wrote the data into only the data cache
      • write-through (Ensuring Consistent): Write the data into both the memory the cache
    • Write miss:
      • read the entire block into the cache, then write the word
      • Write allocate:The block is loaded into the cache on a miss before anything else occurs
      • Write around:The block is only written to main memory (not stored in the cache)
  • 虚拟内存
    • blocks of memory (called pages) are mapped from virtual addresses to physical address.
    • page number 决定 physical address 的高位, page offset 决定低位。
    • 每个 page 的大小一般是 4KB \sim 16KB
    • 采用 write back 策略(频繁写入)
    • page table is indexed with the page number from the virtual address to discover physical address.
      • valid bitpage number 两部分组成。
      • 位宽是 physical page number 的位宽加一(注意要向上填充)
      • 如果 valid bit = 0,会产生 page fault。`
      • TLB (Translation-lookaside Buffer):