11911 字
32 分钟
计算机组成原理学习笔记
2026-09-01
NOTE

一篇关于计算机组成原理粗浅的学习笔记,只记录了一些重难点,但是对于考试复习还是太多了(期末会发老师的重难点)
提前说明,本文基础知识部分研究的对象是 16 位模型机,知识点基于上课ppt的内容


第零章:前置知识#

0.2 数字逻辑基础知识#

0.2.1 逻辑代数基础#

逻辑代数的三种基本运算#

  • 与运算:同为1才为1。即 F=AB˙=ABF=A \dot B = AB。国际符号:&
  • 或运算:同为0才为0。即 F=A+BF=A + B。国际符号:>= 1
  • 非运算:0对1,1对0。即 F=AˉF=\bar{A}。国际符号:1

后面重要的就是异或、同或的运算,还要熟悉反演、代入等操作。考试会涉及这方面的证明题,熟悉基本的运算就ok。

0.2.3 组合逻辑电路与译码器#

组合逻辑电路#

任意时刻的输出仅仅取决于该时刻的输入组合,而与输入信号作用前电路的原状态无关(与过去的输入无关)。

半加器(掌握)#

全加器(掌握)#

关于进位与本位和的两个重要的公式:

Σi=AiBiCi\Sigma_i = A_i \oplus B_i \oplus C_iCi+1=AiBi+(AiBi)CiC_{i+1} = A_iB_i + (A_i \oplus B_i)C_i

译码器(掌握)#

二进制译码器属于完全译码器(设译码器有 n 个输入和 m 个输出,则 m=2^n),不满足该条件的为部分译码器。

0.2.4 时序逻辑电路及触发器#

时序逻辑电路#

任意时刻的输出不仅仅与该时刻的输入有关,而且还与电路的原状态有关(与过去的输入有关)

D触发器(掌握)#

集成D触发器#

D触发器国际符号

  • 同步工作时:D触发器
  • 异步工作时:RS触发器

第一章:计算机系统概论#

1.1 计算机系统的层次架构#

应用程序高级语言汇编语言操作系统指令系统(ISA)微体系架构(微程序/硬布线控制器实现指令)逻辑电路\text{应用程序} \rightarrow \text{高级语言} \rightarrow \text{汇编语言} \rightarrow \text{操作系统} \rightarrow \text{指令系统(ISA)} \rightarrow \text{微体系架构(微程序/硬布线控制器实现指令)} \rightarrow \text{逻辑电路}

1.2 计算机硬件基本组成#

1.2.1 冯·诺依曼计算机的本质特征#

存储程序方式(非常重要)#

  • 事先编制程序
  • 存储程序
  • 自动连续运行程序的工作方式

冯诺依曼体制(非常重要)#

采用二进制存储数据与指令;采用存储程序方式工作;由五大部件组成计算机系统的硬件。

  • 存储程序:指令和数据都以二进制形式存放在同一个存储器中(冯诺依曼结构不会分模块存储数据与指令,但哈佛结构会区分)
  • 五大部件:计算机五大部件:运算器、控制器、存储器、输入设备、输出设备(现代计算机把运算器与控制器合并为CPU,即 ALU+CU)
NOTE

扩展:
传统冯诺依曼结构下,指令和数据共享同一总线、同一存储空间,这意味着CPU在取指令和取数据时是串行执行的(在有流水线场景,同一个时钟周期内,取指令和取数据会被两条不同指令同时执行,如果数据与指令共享同一个Cache和总线,两个操作会占用同一个端口,流水线因此停顿)。与之相对的是哈佛结构增加了并行处理,即指令存储器和数据存储器物理分离,各有各的总线,现代CPU的片上一级Cache常常做成指令Cache和数据Cache分离,就是哈佛结构思想在冯诺依曼整体框架下的局部应用。所以严格来说:现代CPU从主体层面是冯诺依曼,从Cache层面看局部采用哈佛结构

1.2.2 CPU 部件概览#

NOTE

下面的知识点这里只是简单提及,后面章节会详细展开

运算器#

组成:ALU(核心),移位器,选择器。数据从选择器进入,经过 ALU 计算,最后通过移位器输出(后面细讲,此处不多展开)

运算器组成

  • 选择器:本质还是寄存器,从通用寄存器组中选择需要的信息
  • 通用寄存器组:提供操作数,存放运算结果
  • ALU:由全加器求和、由进位链传递进位信号。

控制器*#

(1)功能:产生控制命令(微命令),控制全机操作

指令信息 + 状态信息 + 时序信息 \rightarrow 微命令发生器,输出微命令序列

微命令的产生方式:

  • 组合逻辑控制方式:由组合逻辑电路产生微命令
  • 微程序控制方式:由微指令产生微命令

存储器#

运算器组成

  • 存储体:存放信息的实体
  • 寻址系统:组成:地址寄存器 + 译码器,对地址码译码,选择存储单元
  • 数据寄存器(MDR):逻辑上属于主存与CPU的接口(虽然通常位于CPU内部),目的是做速度缓冲,位宽匹配等等

RAM:随机存取存储器(内存条) ROM:只读存储器,断点后数据不消失,存底层的系统程序

1.2.3 以总线为基础的系统结构#

总线:能为多个部件分时共享一组信息传递线路及相应的控制逻辑

按传递信息分为3类:

  • DB数据总线:双向传输数据,数据总线根数决定了CPU一次传输的数据位数(即字长)
  • AB地址总线:单向传输CPU发出的地址信息,用来指定要访问的存储单元或I/O
  • CB控制总线:传输控制信号和状态信号,协调各部件

教材用的模型机是:单总线结构

1.2.4 接口#

接口的核心工作就是匹配缓冲

  • 匹配:地址译码逻辑,明确当前访问哪一个外设;信号转换逻辑,电平转换
  • 缓冲:由于CPU与外设存在悬殊的速度差异,于是有命令与数据寄存器。

主机系统总线与 I/O 设备之间的交接部分称为 I/O 接口

接口类型

  • 按传送格式:串行接口、并行接口
  • 时序控制:同步接口、异步接口
  • 信息传送控制方式:中断接口、DMA接口

1.3 计算机的工作过程#

  • 取指令IF:CPU 根据 PC主存取一条指令,送入指令寄存器(IR),同时PC自动+1,或者+一条指令长度,从而指向下一条指令(如果遇到跳转/分支指令,PC被强制赋值为跳转目标地址(PC的强制赋值为跳转地址在译码阶段算出在执行阶段才写入PC),这是所有分支预测与流水线冒险问题的根源
  • 分析指令ID:控制器分析指令里面的操作码和地址码(译码阶段
  • 执行指令EX:在CPU内部执行指令
  • 存结果:将结果放回寄存器

如上一个循环被称为指令周期

1.4 计算机的性能指标#

1.4.1 主频、时钟周期(有点问题这里)#

  • CPU主频(f):计算机的振荡器输出的脉冲序列的频率,一切操作的基准信号,其高低决定了计算机工作的快慢
  • CPU时钟频率(HZ,GHZ)
  • 时钟周期(T)= 1 / f,单位s
  • 主频越高不一定性能越好,因为不同架构每条指令需要的时钟周期(CPI)不同

1.4.2 基本字长#

指的是CPU在同一时间内能一次并行处理的二进制数据的位数(即参加一次顶点运算的操作数的位数,常见的有32位、64位)。直接反映CPU的数据处理宽度,是衡量CPU性能的重要指标,它通常等于CPU内部通用寄存器(如累加器)的宽度,也等于算术逻辑单元(ALU) 的宽度。

1.4.3 数据通路宽度与数据传输率#

数据通道宽度(CPU到寄存器)一般等于基本字长

数据传输率=数据通路宽度8×总线时钟频率(这里用内存的等效频率)×传输效率系数\text{数据传输率} = \frac{\text{数据通路宽度}}{8} \times \text{总线时钟频率(这里用内存的等效频率)} \times \text{传输效率系数}总线宽带=数据通路宽度×总线时钟频率8(BPS)\text{总线宽带}=\frac{\text{数据通路宽度} \times \text{总线时钟频率}}{8}(\text{BPS})

1.4.4 主存容量#

可编址存储单元个数 x 位数

表示为:字数 x 字长(16位)
或:字数 x 字节长(8位)

举例:1MB,表示一个存储单元是1B,楼高1M

1.5 模拟信号与数字信号#

  • 模拟信号:时间与数值上连续
  • 数字信号:在时间和数值上都是离散的,幅值通常为0/1

数字信号通常分为两种:

  • 电平信号:逻辑值由稳定持续电压值来表示(高电平/低电平)。功能:存储数据,并行传送(并行总线上的数据由电平维持)
  • 脉冲信号:瞬间变化,带有跳边沿的信号。串行传送

第二章:计算机中的信息表示#

2.1 信息分类#

  • 数据型:数值型数据与非数值型数据
  • 控制型:微命令与指令

权、基数#

  • 基数(Radix, R) :计数制中每一位允许使用的不同数字符号的个数。二进制 R=2(0,1)
  • 权(Weight):某一位数字在其位置上所代表的数值大小,等于 RiR^i,其中 ii 是该位相对小数点的位置(小数点左边整数部分从0开始往左递增,右边小数部分从-1开始往右递减)。比如二进制数 1011.01 中,最左边 1 的权是 232^3,最右边 1 权为 222^{-2}

机器数#

机器数的四种分类

  • 原码:符号位0/1表正负,直观但符号位不能直接参与加减
  • 反码*:正数同原码,负数符号位不变,数值位按位取反(原码+反码=1111,4位寄存器而言)
  • 补码:正数同原码,负数=反码+1,多出的溢位直接扔掉。于是可以把减法变成加法。最总要的是符号位能和数值位一起参与运算(这里的运算逻辑理解很重要)
  • 移码:补码的符号位取反,等价位给一个真值加一个偏置常数,专门用于浮点数的阶码。(后续完善移码)
NOTE

正数的原码 = 补码 = 反码,因为正数不需要额外操作
已知 [x][x]_{\text{补}},求 [x][-x]_{\text{补}},包括补码的符号位一起取反再+1

2.2 指令#

指令包含操作码OP地址码A指令系统(ISA),一台机器所能执行的全部指令的集合,包括指令格式、寻址方式、数据类型规范。

NOTE

扩展操作码约束核心:扩展操作码必须满足任何一个短操作码,不能是另一个长操作码的前缀,即哈夫曼编码。
设指令字长16位,地址码字段每个6位。若二地址指令有K1条,一地址指令有K2条,零地址指令不限,则:

  • 二地址指令占用 16 - 6 x 2 = 4 位操作码,最多表示 2^4 种,若二地址指令用了 K1 种,还剩 2^4 - 1 种4位编码给一地址指令扩展。
  • 一地址指令操作码 = 让出来的4位编码 + 后面6位,即操作码变成了10位,可用编码数为 (16 - K1) x 2^6,若一地址指令用了K2种,剩下的继续给零地址指令。
  • 零地址操作码为16位,可用编码数为 [(16 - K1) x 2^6 - K2] x 2^6

扩展操作数

操作数存放地址

CPU 能够直接通过数据总线和地址总线访问的部分包括:CPU 内的 R,主存,Cache,接口的R

操作类型#

操作码4位,模型机设置了15种指令(14种编码方式),余下两种操作码组合做扩充

  1. 传送指令:1种
  2. 双操作数算逻指令:5种
  3. 单操作数算逻指令:6种
  4. 程序控制类指令:3种,其中两种编码相同

指令分类#

对指令大致分为3类:

  • 指令格式分类:双操作数指令、单操作数指令、程序转移指令
  • 操作数寻址分类:RR, RX, RS, SI, SS(R寄存器、S存储器、X变址存储器、I立即数)
  • 指令功能分类:传送指令、I/O指令、算术运算指令、逻辑运算指令、程序控制类指令、处理机控制类指令等等

模型机按字编址,字长16位

双操作数结构:4位操作码 + (3位寄存器号 + 3位寻址方式)目的地址 + (3位寄存器号 + 3位寻址方式)源地址

单操作数结构:4位操作码 + … + (3位寄存器号 + 3位寻址方式)目的地址

转移指令:4位操作码 + (3位寄存器号 + 3位寻址方式)转移地址 + 6位转移条件

传送类指令#

一般来说,传送指令就是将数据从源地址传送到了目的地址,包括中间进行某种处理(算术、逻辑处理)
一条传送指令需要设置传送范围,比如 MOV R1, R2;设置传送单位,按字节、字、双字等等传;设置寻址方式

2.3 地址码/寻址方式/地址结构#

操作数存储的位置:堆栈,寄存器,存储器

地址结构#

显地址:

  • 零地址指令:不带地址码(比如堆栈运算指令,操作数隐含在栈顶)
  • 一地址指令:一个地址码(比如单目运算,或者隐含用累加器作另一操作数)
  • 二地址指令:两个操作数地址(最常见如 ADD A, B),结果存放在两个数中那个不再需要的数的地址里
  • 三地址指令:两个源操作数地址+一个结果存放地址,下条指令由PC隐式给出

寻址方法*#

  1. 立即寻址:操作数就在指令里,此时操作数在IR中(控制器中的指令寄存器),例:MOV AX, 1234H
  2. 直接寻址类
    • 直接寻址:EA = A,直接给出主存地址
    • 寄存器寻址:操作数存放在CPU内部的某个寄存器里,指令给的是寄存器编号(这些可编程可访问的寄存器称为可编址寄存器),由于不需要访问主存,更快
  3. 间接寻址类:先从某寄存器/主存里读取这个地址,再按这个地址在主存里读取操作数(也可以有多重间接寻址)。间接寻址的优点是可以用较短的地址码访问更大的地址空间,也方便做跳转表与动态改地址。
  4. 变址类
    • 变址寻址:助记符为 X(R)X 是偏移量。一般用于访问数组的连续元素。硬件基础是变址寄存器 + 指令中提供的偏移量来完成的。变址寄存器提供的修改量可变,指令中提供的基准量是固定的。
    • 基址寻址:EA=(BR)+AEA=(BR) + A:多道程序切换时(程序整体加载到内存的不同位置时,只需改变BR的值,指令中的A完全不用变(计组不要求)
    • 相对寻址:EA=(PC)+AEA=(PC) + A:转移指令,偏移量A相对于当前的PC,与程序加载到的绝对位置无关。(不要求)
  5. 堆栈寻址:指的是操作数在堆栈中,指令隐含约定堆栈指针SP寄存器提供栈顶单元地址。这里以自底向上生成方式来说明:当CPU在拿到SP中的内容后,进行相应操作来得到操作数的地址(压栈PUSH,减一;出栈POP,加一),再根据此地址访问主存。PUSH时栈顶单元的地址减小——向上生成方式
NOTE

值得注意的是,变址与基址寻址的公式都一样,都是寄存器+形式地址(控制单元根据指令中的寄存器编号,立刻读这个寄存器里存放的数值,同时指令本身后面还跟一个形式地址,是一个立即数,因此最终地址 = 寄存器数值 + 立即数。指令除了操作码,寄存器编号,形式地址A之外,还会有一个寻址模式的编码,这就是编译器区分两者的主要根据(硬件层面)

NOTE

寄存器寻址的优势
寄存器访问更快
指令中存放寄存器编号的字段位数大大小于存放主存地址的字段位数,因此可以有效缩短指令长度,减少指令的读取时间
同样可以减少指令长度的操作还有使用隐式寻址

隐式寻址(隐式I/O指令)#

隐式寻址:操作数的地址不在指令里显式给出,而是隐含在操作吗本身的约定里,典型例子就是累加型指令,比如机器码 ADD A, B,指的是 A 和 B 相加结果放回 A,隐式寻址写成 ADD B,B 与 累加器AC的值相加,最后把值放回AC,因为CPU硬件内部规定凡是没有明确写第一个操作数的加法,默认第一个数一定在AC里,结果也一定放回AC里。(AC是数据的必经之路,硬件限制死)

隐式I/O指令:I/O指令中不显式给出外设的端口号/地址,而是约定固定使用某个寄存器(比如累加器AC)作为主机和外设之间数据传送的中转站。比如 IN AC, PORT5(将端口5的输入数据直接加到AC),隐式 I/O 指令直接写成 IN

隐式寻址的主要特点:指令字段段,编码简单,但是灵活性较低,地址被写死在了硬件/约定里

2.8 主机访问外设的编码方式#

分两大类:

  • 统一编址(存储器映射I/O,Memory-Mapped I/O):把I/O设备的端口和主存单元放在同一个地址空间里统一编号,CPU用同一套访存指令(如MOV、LOAD、STORE)就能访问外设,无需专门的I/O指令。优点:指令系统简单统一;缺点:占用了一部分主存地址空间。
  • 独立编址(I/O映射I/O,I/O-Mapped I/O):I/O地址空间和主存地址空间完全独立、各自编号,需要专门的IN/OUT一类指令才能访问外设。优点:不占用主存地址空间;缺点:指令系统要额外增加专门的I/O指令类型,增加了硬件和指令集复杂度。
NOTE

其余的I/O部分的知识点后续补充

NOTE

IEEE754短浮点数(float, 32位)格式
符号位(1位)+ 阶段码(8位)+ 原码(23位)

  • 符号位S:0正1负
  • 阶段码E:采用移码,偏置常数固定为127(即真实价码 = E - 127),E全为0或全为1是特殊值
  • 尾数M:规定尾数的整数部分固定位1(即 1.xxxx),这个 1 不显式存储,只存小数点后的23位
    所以真正的数值公式是N=(1)S×1.M×2E127N=(-1)^S \times 1.M \times 2^{E - 127}

举个例子:0 10000000 10000000000000000000000
正数,阶码 10000000 = 十进制 128,所以接码真值 = 128 - 127 = 1,完整数值 = 1.1 x 2^1 = 11.0(二进制),对应试十进制的 3.0

特殊的

  • E=0,M=0E = 0, M = 0:表示 0
  • E=0,M0E = 0, M \neq 0:表示极小的数
  • E=255,M=0E = 255, M = 0:无穷大
  • E=255,M0E = 255, M \neq 0:非法值 NaN
NOTE

小数的二进制转换
整数部分除以2取余数,将余数从个位排下来,小数部分乘2取整数,将整数按小数部分从左往右排列
比如 26.625 换成二进制为 11010.101


第三章:中央处理器——模型机总体设计#

3.1 模型机的CPU组成:#

  • 运算器:三级,输入选择器/锁存器->ALU->移位器
  • 寄存器组:三组,处理数据的 + 控制程序执行的 + 和主存接口相关的寄存器
  • 总线:四组,CPU内部总线、部件间总线、系统总线、外总线
  • 控制器:组合逻辑控制器 / 微程序控制器
  • 时序系统:一个脉冲源、一组计数分频逻辑

3.1.1 运算器#

输入选择器/锁存器#

送入ALU进行运算处理,或借道ALU进行传送。数据来源:R0 ~ R3, C, D, PC, SP ,PSW, MDR

WARNING

输入选择器不属于寄存器,相当于是ALU的门户一样
这里再详细区分一下两个暂存器数据来源的区别:

  • A暂存器特别来自 SP, PC(都是关于地址)
  • B暂存器特别来自 PSW, MDR(存主存来的数据与状态位)

ALU#

算术、逻辑运算,由微指令M, S0 ~ S3, C0

移位器#

直接传送、左移、右移

3.1.2 寄存器组#

寄存器基本结构#

寄存器都是16位,每个寄存器由16个只能存1bit的D触发器组成。要写入一个16位数据,就把16个bit分别送入16个D端,等待时钟脉冲CP到达规定的时钟边沿,然后一起将数据存入。如果使用R/S控制端,则不等待时钟,直接修改其中的值(异步置入),因此响应更快。

用于处理的寄存器:通用寄存器、暂存器#

通用寄存器组#

一个可编程访问的寄存器,在指令系统中为7个R分配了编号:R0=000,R1=001,R2=010,R3=011,SP=100,PSW(程序状态字)=101,PC=111

暂存器#

用户不能直接访问的R:

  • 暂存器C:存从主存方向来的数据与数据地址
  • 暂存器D:存目的数据与目的地址,以及ALU计算出来的中间结果

用于控制的寄存器#

指令寄存器IR#

存放先行运行的指令,在主存与IR通过数据总线单向传送(IR接收当前指令,值得注意的是当前模型机中,IR与CPU内总线没有相连),并且将IR扩充为指令队列

程序计数器PC#
程序状态字寄存器PSW#

表现现行程序的运行转态,包括:

  • 特征位:C(进位),V(溢出),Z(零),N(负),允许中断(I)
  • 编程设定位

用作主存接口的寄存器:地址寄存器MAR,数据缓冲寄存器MBR/MDR#

CPU访问主存时,首先送出地址码,然后再送出/接收数据
高电平导通,,低电平断开(三态门接口)

3.1.3 总线#

CPU内总线#

单向数据传送总线,连接CPU内部各部件

部件间总件#

芯片间连接,报刊地址线和数据线两组

系统总线#

计算机各大部件的信息交换,分为数据总线AB,数据总线DB,控制总线CB

外总线#

一台CS与其余设备的连接总线

3.2 深入信息传递#

指令的执行可以归纳为信息的传送,即控制流数据流

模型机数据通路框架

3.2.1 取指令:#

PC输入选择器ALU移位器CPU内总线MAR\text{PC} \rightarrow \text{输入选择器} \rightarrow \text{ALU} \rightarrow \text{移位器} \rightarrow \text{CPU内总线} \rightarrow \text{MAR}

取完当前指令后 PC+1

取指令

M数据总线IR\text{M} \rightarrow \text{数据总线} \rightarrow \text{IR}

3.2.2 取操作数地址#

寄存器间址(R)

RiA/B移位器CPU内总线MAR\text{Ri} \rightarrow \text{A/B} \rightarrow \text{移位器} \rightarrow \text{CPU内总线} \rightarrow \text{MAR}

自减型寄存器间址 -(R)
ALU拿到地址后,先减1再送进MAR

自增型寄存器间址 (R)+
先用R做地址,再加1,与寄存器间址寻址一样(R)

自增型双重间址 @(R)+
用R找第一个地址,R递增,再根据第一个地址找到最终的数据

第一步:送间址地址: RiMAR\text{Ri} \rightarrow \text{MAR} (化简版)

第一步结束后 R++

第二步:取操作数地址:M数总MDRBALUCPU内总C\text{M} \rightarrow \text{数总} \rightarrow \text{MDR} \rightarrow \text{B} \rightarrow \text{ALU} \rightarrow \text{CPU内总} \rightarrow \text{C}
第三步:送操作数地址:CMAR\text{C} \rightarrow \text{MAR}

变址器址 X(R)
第一步:送形式地址:PCMAR\text{PC} \rightarrow \text{MAR}
第二步:取形式地址:MMDRC\text{M} \rightarrow \text{MDR} \rightarrow \text{C}
第三步:送操作数地址:C+RiMAR\text{C} + \text{Ri} \rightarrow \text{MAR}

3.2.3 数据信息传递#

寄存器到寄存器: RiA/B, ALU, 移位, 内总Rj\text{Ri} \rightarrow \text{A/B, ALU, 移位, 内总} \rightarrow \text{Rj}

寄存器到主存主存到寄存器

主存到主存
这里感觉很诡异,先从主存到MDR,MDR经ALU到C,再从C经ALU到MDR,最后从MDR经数总到主存,如果单纯是借道ALU,便呼应了前面提到的

CPU寄存器与外围设备RiMDRRj\text{Ri} \rightarrow \text{MDR} \rightarrow \text{Rj}

3.3 微命令设置#

3.3.1 CPU内各部件的微命令#

CPU内各阶段指令步骤:进A/进B,ALU加法,移位器,寄存器分配脉冲

这里再强调一下作用于各部分的微指令:

  • A:Ri -> A, C -> A … A特别的 SP -> A, CP -> A
  • B:Ri -> B … B特别的 PSW -> B, MDR -> B
  • ALU:S0 ~ S3, M, C0
  • 移位器:DM(直传),SL(左移),SR(右移)
  • 分配脉冲除了IR,给其余寄存器在D端打入脉冲,此刻作用于寄存器上的微指令包括:CPRi, CPC, CPD, CPPC, CPPSW, CPSP, CPMAR, CPMDR

3.3.2 与系统线及主存有关的微命令#

几条系统总线的英文缩写:CB(控总),DB(数总),AB(地总)

  • EMAR:作用于MAR,把MAR的地址送到地址总线(E:Enable)
  • R:作用于CB上,读主存里对应的地址内容,写进数据总线
  • W:作用于CB上,把数据总线的内容写进主存
  • SIR:允许数据总线上的内容送进IR(取指令时用)
  • SMDR:从DB读的是普通数据就放入MDR

归纳一下,将数据读入CPU涉及的指令:EMAR, R, SIR(读指令),SMDR(读数据);将数据写入主存的指令:EMAR,W

3.4 主机与外设的信息传送控制#

NOTE

这里之后写

3.5 时序系统与时序控制方式#

周期、节拍、脉冲等信号被称为时序信号,产生时序信号的部分称为时序发生器/时序系统。时序系统的组成:一个振荡器,一组计数分频逻辑

3.5.1 时序控制方式#

操作与时序的关系

同步控制#

计算机各项操作与统一的时序信号同步。基本特征:时间分为很多周期长度固定的时钟周期,每一个周期完成一步操作(这里之前也提及过)。许多操作要求严格同步执行(如同步打入脉冲)

异步控制#

按照各项操作需要的时间长短不同来选择不同的时间,各操作间与各部件间的信息交换采取应答方式基本特征:没有统一的节拍划分,但是存在着申请、响应、回答一类的应答关系

[!noet] 这里会涉及主从设备的概念:指的是某一个部件申请使用总线,并获得批准后掌管总线控 制权的设备,称为主设备,否则为从设备。
如CPU发出请求读取数据,此时CPU(请求)是主设备,主存(回应)是从设备;当主存完成操作并回应,才能执行下一个操作,这是异步控制的核心。

3.5.2 时序层次的划分#

  • 时钟周期(节拍):是时序系统中最基本的时间分段,各段长度相同。
  • 定时脉冲(工作脉冲):打入R的时候。
  • (CPU)工作周期:在指令周期中某一个工作阶段所需时间,一般不同。
  • 指令周期:一般不作为时序的一级,读取并执行一条指令所需要的时间。

多级时序的划分#

二级时序:用在微程序控制器中,指令周期由多个时钟周期组成
三级时序:用在组合逻辑控制器中,指令周期由多个工作周期组成,每个工作周期又由多个时钟周期组成,每一个时钟周期是当前工作脉冲开始到下一个工作脉冲。

模型机按常规采用三级时序:工作周期、时钟周期、工作脉冲


第三章:中央处理器——算术逻辑运算部件#

这一节将详细讲讲运算器

3.6 加法单元#

一位全加器

Σi=(AiBi)Ci1(1)\Sigma_i = (A_i \oplus B_i) \oplus C_{i-1} \quad \text{(1)}Ci=AiBi+(AiBi)Ci1(2)C_i = A_i B_i + (A_i \oplus B_i) C_{i-1} \quad \text{(2)}

Gi=AiBiG_i = A_iB_i 进位产生函数,Pi=AiBiP_i = A_i \oplus B_i 进位传递函数(G 与 P 在后面理解进位逻辑本质用到)

不难看出,由(1)可得,当输入的 1 为奇数,本位为1
(2)则是在说明两个进位的来源

3.7 串行加法器#

每一步只求一位和,n步分成n步实现,这样的加法器被称为串行加法器 (不知道串行加速器的结构是不是要求)

3.8 并行加法器#

n位同步相加。
组成:n位加法器,进位链(串行进位链 or 并行进位链)
加法器的运算速度主要取决于进位传递的速度

串行进位链#

各级信号依赖低一级的进位信号

并行进位链#

各级进位信号是并行产生的

Cn=Gn+PnGn1+...+Pn...P1C0C_n = G_n + P_nG_{n-1}+ ... + P_n...P_1C_0

组内并行,组间并行(实则串行)的进位链#

3.9 ALU单元与多位ALU部件#

定义:若干位全加器,并行进位链,输入选择门集成在一块芯片上,构成ALU逻辑。

一位ALU逻辑的组成:一位加法器,一位输入选择器,一个公共控制门。所依赖的逻辑关系还是上面的进位逻辑关系


第三章:中央处理器——定点数的加减乘除运算#

3.10 定点数的加减运算;#

3.10.1 补码的运算本质#

前面已经提到过,减法的操作本质是将数值换成补码(取反+1),符号位一同参与运算,如果产生进位直接舍弃,并不影响结果的正确性。

NOTE

值得注意的是,对于 15 - 1 换成补码形式就是 1111 + 1111 = 0111,可以看到ALU只管无脑加就行 ,前后的 1111 表示的含义却是不一样的,前者是原码,后者是补码(符号位为1表示负数),符号位相加并舍弃进位得0,结果14也确实是正数。

3.10.2 补码的加减#

补码加减所依据的基本关系

(X+Y)=X+Y(1)(X+Y)_{\text{补}} = X_{\text{补}} + Y_{\text{补}} \quad (1)

补码的加法,符号位也参与计算,运算结果即为补码表示形式

(XY)=X+(Y)(2)(X-Y)_{\text{补}} = X_{\text{补}} + (-Y)_{\text{补}} \quad (2)
NOTE

YY_\text{补}(Y)(-Y)_\text{补}
YY_\text{补} 连同符号位一起变反,并在末尾 + 1

3.11 定点数的乘法#

符号位可采用原码乘法或补码乘法。对于后面的位,本节主要探讨通过累加、移位实现分步乘法运算,即常规加法器

3.11.1 原码一位乘法#

定义:取两个操作数的绝对值进行乘法,每一步进行一位乘法,符号位单独处理

运算逻辑#

需要三个寄存器:A, B, C:

  • A:存放部分积累加和,初始值0,双符号位00
  • B:存被乘数绝对值X,双符号位00此后的运算B中值保持不变
  • C:存乘数绝对值Y,符号位去掉。初始存放乘数Y的尾数,每乘一次,将已经处理的低位右移舍弃,同时将A右移,其末位移入C的最高位。由于C末位的乘数就是我们每次处理的乘数,因此也将这位称为判断位Cn

注意: 最后累加后还要移位一次,n次累乘移位n次

3.11.2 补码一位乘法#

3.12 定点数的除法#

NOTE

定点数的运算之后再看


第三章:中央处理器——模型机的组合逻辑控制器#

逻辑命令发生器构成:全机所有微命令需要的逻辑电路

3.13 组合逻辑控制器概述#

微命令是分时产生的,因此需要时序系统。一套完整的组合逻辑控制器还需 PC,IR,PSW,微命令发生器,译码器,地址形成部件。

组合逻辑控制器结构

NOTE

此处需要脑海里构造出整个流程图

  • 从主存读取的现行命令进入IR,操作码与寻码方式经译码器产生逻辑信号送入微指令发生器(这是产生微命令的基本逻辑依据)。同时微命令形成还要考虑各种状态信息(I/O,PSW状态等等)
  • IR 中的地址段信息送往地址形成部件产生地址,送往主存、运算器、寄存器
  • 程序顺序执行时,PC++ 以此形成后续指令;转移时,IR 的地址段信息经地址形成部件送往PC,使程序转移。

3.14 组合逻辑控制器时序系统#

回一下之前提到的,模型机常采用工作周期、时钟周期、工作脉冲三级时序

3.14.1 工作周期#

模型机设置了6种工作周期状态,其中:

  • 取指、源、目的、执行:四个工作周期用于指令正常执行
  • 中断、DMA:两个工作周期用于I/O传送控制 某个时期内,只有其中一个周期状态触发器为1,指明CPU目前的工作周期状态

下面详细讲讲6个工作周期状态:

  • 取指周期FT(Fetch):FT中完成的操作是公共性操作(即所有指令都基本要做的操作,如:PC->MAR->M 取指)
  • 源周期ST:如果需要从主存中读取源操作数(非寄存器寻址),进入ST
  • 目的周期DT:如需从主存中读取目的操作数或目的地址(非寄存器寻址),进入DT
  • 执行周期ET:取得操作数后进入ET,也是公共性操作
  • 中断周期IT:响应中断请求后到执行中断服务程序前的过渡期
  • DMA周期DMAT(Direct Memory Access):响应外设(硬盘,网卡等等)的DMA请求后,CPU进入DMAT,CPU交出系统总线控制权,MAR,MDR与系统总线断开,由此DMA控制器控制系统总线,完成外设与主存的直接数据传递。

3.14.2 时钟周期(节拍)#

模型机为了简化时序控制,将CPU内数据通路操作与访问主存操作统一了起来,即以主存访问周期为时钟周期宽度,这里设置为 1μs

3.14.3 工作脉冲#

有些操作需要同步定时脉冲进行控制,比如将数据打入寄存器、周期状态切换,模型机在每一个时钟周期末尾发一个工作脉冲P
P的前沿作为打入寄存器的定时,标志着一次数据通路操作完成,后沿作为时序转换的定时,此刻若工作周期还没结束,则对时钟周期计数器T计数,并进入新节拍;若工作周期结束,T清零,并设置新的工作周期状态标志

时钟周期与工作脉冲的打入关系

3.15 指令流程与操作时间表#

这个小板块将分两个层次对CPU执行指令的工作机制进行讨论:

  • 在寄存器传送级拟定各类指令的执行流程(以指令为线索展开)
  • 拟定操作时间表,也就是上述实现流程所需的微操作命令序列,包含维持一个时钟周期的电位型微命令以及一个短暂的脉冲型微命令。

FT#

何时进入FT:在上电初始化和复位初始化时,由R/S异步置入;程序正常执行时,DMA周期后,IT周期后,由D端同步打入

复习一下取值流程:EMAR, R, SIR(M -> IR); PC->A, A + 1, DM, CPPC (PC + 1 -> PC)

接下来进行下面三种操作:(FT做完后,根据下面三种指令类型,进入对应的工作周期状态)

  • 1 -> ST, CPST
  • 1 -> DT, CPDT
  • 1 -> ET, CPET

ST#

NOTE

之后继续,看球不懂了


第三章:模型机的微程序控制器#

3.16 基本概念与基本原理#

基本概念#

  • 微命令:构成控制信号序列的最小/最基本单位,又称微信号,直接作用于电路的命令
  • 微操作:由微命令控制实现的最基本的操作统称
  • 微周期:从控制存储器读取一条微指令并执行相应操作所需的时间,通常一个时钟周期为一个微周期
  • 微指令:每个微周期的操作所需的微命令组成一条微指令
  • 微程序:一系列微指令的有序集合,用来解释一条机器指令

一个工作周期(FT,ST等等) = 一个时钟周期 = 一个微周期 = 一条微指令的时间存在范围

微程序控制的概念#

  1. 微命令产生方式:将程序所需要的微指令,用代码的形式(0/1微码)形成微指令,存入一个ROM构成的控制存储器
  2. 微程序与机器指令间的对应关系:将各种机器指令的操作拆分成若干微操作序列。

3.17 微程序控制器的构成#

时钟周期与工作脉冲的打入关系

各部件的详细描述:

  • 控制存取器CM:存微程序,每一个单元存放一条微指令
  • 微指令寄存器μIR:从CM读取微指令,存于μIR。微指令也分为两个字段,微操作控制字段(微命令字段),顺序控制字段(它与微地址共同决定下一条微指令地址)。
  • 微地址形成电路:形成后续微地址
  • 微地址寄存器μAR:存当前要从CM中读取的那条微指令地址
NOTE

可以这样类比:μAR = PC,CM = 主存,微指令 = 机器指令

3.18 微指令的编码方式#

  • 直接控制法:每一位对应一个微命令,缺点是很浪费位
  • 分段直接编译法;将一个微指令分段,每段单独负责一类微命令(比如第一个字段 3bit,8种编码对应8种微命令),属于显式编码
  • 分段间接编译法:字段的含义不仅决定于本字段编码,还由其他字段参与解释(更节省微指令位数)

3.19 微程序的顺序控制方式#


溢出判断#

补码加减法中,只有两个同号数相加,才可能产生溢出

判断溢出的三种方法:

  • 单符号位法两个加数符号相同,且符号结果与加数不同(两正相加,符号位变为1->正溢(上溢),反之亦然)
  • 双符号位法:用两位符号位表示数(00表示正,11表示负),运算时符号位跟着数值位一起参与加法。若运算后两个符号位不一致(01或10)→ 溢出;一致(00或11)→ 未溢出。实际 ALU 设计采用的方法。
  • 进位法:设符号位产生的进位位 CsC_s,最高位产生的进位为 C1C_1溢出条件则是:CsC1=1C_s ⊕ C_1=1,这是最适合硬件的判断方法

3.2 原码一位乘法#

乘法的核心思想是手算竖式乘法的硬件化

3.3 补码的一位乘法(Booth算法)#

3.4 除法运算#


第四章:多层次存储器#

4.1 多层次存储器#

由于访存时间与CPU处理运算的时间不是在一个数量级上,于是有计算的瓶颈,为了解决这个问题,并得到容量更大、存取速度更快、成本更低的存储器,采用三级存储体系结构 结构:

寄存器(最快最小最贵),Cache(片上,SRAM),主存(DRAM),辅存(磁盘,最慢最大最便宜)

各部分要求

  • 主存:随机访问,工作速度快,具有一定的存储能力(存放当前CPU需要执行的程序
  • 外存:存放大量暂时不用的程序与数据,存取慢,容量大
  • 高速缓存:主存中的活跃副本

该分层能 work 的理论基础是程序访问的局部性原理(有点像GPU的Cache硬件优化)

  • 时间局部性:某个数据访问后还有可能在近期被访问(循环体的指令)
  • 空间局部性:某个地址被访问后,它附近的地址还有可能被访问(连续数组)

4.2 存取方式#

4.3 主存储器(SRAM vs DRAM)#

对比项SRAMDRAM
存储原理双稳态触发器(多个晶体管构成的双稳态电路)存 1bit用一个电容+一个晶体管存 1bit,靠电容电荷有无表示 0/1
是否需要刷新不需要(触发器状态稳定)需要定期刷新(电容会漏电,电荷会慢慢消失,必须周期性读出再写回)
速度慢(受刷新和电容充放电时间限制)
集成度/容量密度低(一个 bit 要好几个晶体管)高(一个 bit 只要 1 个晶体管 + 1 个电容,能做得更小更密)
价格便宜
典型用途Cache(要快,容量小可以接受)主存(要大容量,速度可以稍微牺牲)

SRAM 和 DRAM 都属于半导体存储器的 MOS 类型,另一类为双极型(ECL,TTL),存取非常快,功耗大,集成度很低。

相对于半导体存储器的有磁表面存储器,利用磁层上不同方向的磁化区域标识信息。容量大,速度慢,长期保存。以及光盘存储器

动态刷新#

  • 集中刷新:在一个固定的刷新周期内,集中抽出一段时间,把所有行全部刷新一遍,在这段时间内,CPU不能访问内存(冻结)
  • 分散式刷新

主存的扩展#

4.4 高速缓存 Cache#

基本工作原理#

跟GPU一样,先查找Cache里面有没有数据(Hit),没有(Miss)再去主存。

命中率 H 和平均访存时间的计算公式:

Tavg=H×Tcache+(1H)×TmissT_{avg} = H \times T_{cache} + (1 - H) \times T_{miss}

地址映射方式#

主存的某个块(Block)如何映射到Cache的某一行(Line)?

场景设定:主存共 2m2^m 块,Cache 共 2c2^c 行,每行/块大小为 2b2^b 字节

  1. 直接映射主存的第 i 块,只能放到Cache的第(imod2ci \text{mod} 2^c 行)
    Cache 的物理结构:一个数据块,一个Tag标记(记录来自主存的哪个大区块),一个有效位(标记这行有没有存有效数据)。
    CPU 发来了一个主存地址,结构是:块内地址(offset),行号(Index),标记(Tag)

CPU命中判断的硬件动作:

  • CPU从地址中抽出Index,去Cache的对应行数
  • 抽出 Tag,将这个Tag和Cache行内存储的Tag比较,相同为1,直接Hit;如果不同,Miss,接着清除该行的旧数据,把新数据存进来。

缺点:抖动(thrashing)
可能存在多个块得到的行是同一个,程序运行时,一会读A块,一会读B块,因为一行只能放一个,于是两个块会反复把对方挤出去,导致Cache加速失败,这就是抖动

  1. 全相联映射:主存的任何一块,都可以放到Cache的任意一行 由于块可以放到任意一行,所以必须把Cache里面的所有行的Tag同时比较,开销较大。这种方法的冲突率最低

  2. 组相联映射:Cache分为若干组,每组有若干行,主存的第i块这能放在第(i mod 组数)组,但组内的行是自由的。现代CPU的L1/L2 Cache 基本都是这种方式

主存地址的结构:标记,组号,块内地址

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

计算机组成原理学习笔记
https://www.naie-char.cc/posts/计算机组成原理/
作者
萘Naie_Char
发布于
2026-09-01
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录