【总结笔记】CPU组成:数据通路、微操作与流水线

本部分涵盖:单总线数据通路结构、暂存器Y/Z的作用、标志位逻辑表达式、取指微操作序列、执行阶段周期计算、指令格式编码、流水线五段结构、三大冲突与解决方法、RAW冲突的停顿拍数、指令调度优化。


一、单总线数据通路结构

基本结构:所有寄存器、ALU、存储器接口均挂在一条内部总线上。

核心铁律

  • 同一时钟周期内,只能有1个部件向总线输出(一个out)
  • 多个部件可以同时从总线读入(多个in)

为什么需要暂存器Y和Z?

暂存器解决的问题工作方式
暂存器Y(A/Temp)ALU是组合逻辑,需两端同时稳定输入,但单总线一次只能送一个数第1拍:第一个操作数→Y锁存;第2拍:总线送第二个操作数,Y端稳定
暂存器Z(AC)ALU结果若直接送总线,会反馈回ALU输入端B,引发逻辑振荡ALU输出→Z锁存,下一拍再由Z送总线

标志位逻辑表达式(设最高位:输入, ,输出

加法 的溢出标志 (正+正=负,或 负+负=正,则溢出)

减法 的溢出标志 (正-负=负,或 负-正=正,则溢出)

译码器 vs 多路选择器

操作部件功能
写寄存器(rd写入)地址译码器(选通目标寄存器的写使能端
读寄存器(rs读出)多路选择器(从多个寄存器输出中选一路

控制单元CU的输入来源

CU产生所有微命令,其必须连接的寄存器:

  1. IR(指令寄存器):提供操作码,决定执行什么指令
  2. FR/PSW(标志寄存器):提供ZF/SF/OF/CF,决定条件转移是否跳转
  3. 时钟/节拍发生器:告知当前执行第几步
  4. 外部中断请求线

二、取指阶段微操作(固定模板)

取指数据通路

微操作序列

第1拍:PCout, MARin, Read    ← 发地址、启动主存读(同一拍发出)
第2~N拍:等待主存读完        ← 若主存读需N个周期,则等N-1拍
第N+1拍:MDRout, IRin        ← 数据已稳定,送入IR译码

取指周期总拍数 = 1(发命令) + N(主存读延时,含第1拍重叠) = N+1拍

注意:PCout, MARinRead可以在第1拍同时发出,不要算成N+2!


三、执行阶段周期数计算(四步法)

三大硬件铁律

  1. 总线互斥:同一拍只能1个out,但可多个in
  2. 组合逻辑单拍:ALU运算→SR移位→总线→写寄存器,是一气呵成的组合通路,仅1拍
  3. 内外总线并行:主存读取(外部总线)期间,内部总线空闲可并行其他寄存器操作

标准微操作耗时速查

操作拍数能否并行
寄存器→暂存器T(1拍可与外部主存读并行
送地址(1拍占内部总线
读主存(1拍占外部总线,内部总线空闲可并行
ALU运算并写回寄存器1拍组合逻辑一气呵成
结果写主存2拍(MDR←结果 + M(MAR)←MDR)

例:不同寻址方式的执行阶段拍数

指令类型源操作数寻址执行拍数说明
inc R1寄存器直接2拍1拍送T,1拍ALU+写回
add Rd, Rs1, Rs2(纯寄存器)寄存器直接2拍1拍送T,1拍ALU+写回
add Rd, Rs, (R2)(一个间址)寄存器间接3拍1拍送MAR+启读,1拍读MDR(并行送T),1拍ALU+写回
st (R2), Rs(写主存)寄存器直接+写存3拍1拍送T,1拍ALU/移位,1拍结果→MDR,1拍写主存…

四、括号层级与寻址方式对应

符号含义对应寻址方式
R1寄存器R1本身(编号)
(R1)R1中存储的值寄存器直接寻址
((R1)) / 汇编(R1)以R1的值为地址去主存取数据寄存器间接寻址

指令格式书写顺序操作码 目的寄存器, 源1, 源2(目的在前,源在后)

寄存器编号位数个寄存器需要位)


五、指令流水线

5.1 五段经典结构(IF/ID/EX/MEM/WB)

流水段全称主要工作
IF取指从指令Cache取指令,PC+4
ID译码/读寄存器解析操作码,读通用寄存器
EX执行ALU运算,或计算访存有效地址EA
MEM/M访存Load/Store访数据Cache/主存
WB写回写回通用寄存器

5.2 性能计算公式

流水线时钟周期(取决于最慢的段):

理想时钟周期数段,条指令):

有阻塞时钟周期数

加速比与吞吐率

5.3 三大冲突(Hazards)

冲突类型本质典型场景解决方法
结构冲突多条指令争用同一硬件IF与MEM段同时访问主存分离指令Cache和数据Cache(哈佛结构);插NOP
数据冲突(RAW)后读前写,数据未就绪ADD R1,R2 后紧跟 ADD R3,R1转发(Forwarding);硬件阻塞;指令重排
控制冲突分支/跳转导致PC不确定BEQ/BNE/JMP指令分支预测;延迟槽;清空流水线

判断控制冲突:只要看到条件转移(jle/bne等)或无条件跳转(jmp/jal),直接认定引发控制冒险

5.4 数据相关(RAW/WAR/WAW)

类型全称发生时机408考频
RAW写后读(真相关)后指令ID段读,前指令WB才写完⭐⭐⭐ 最常考
WAR读后写(反相关)仅乱序执行出现极少
WAW写后写(输出相关)仅多发射/乱序出现极少

5.5 RAW冲突停顿拍数(必背!)

关键原则:RAW相关时,后一条指令必须等前一条WB结束后的下一拍才能执行ID(读寄存器)。

场景无转发停顿有转发停顿
ALU指令紧跟ALU指令(相邻RAW)3拍0拍(EX结果直接转发回EX输入)
LOAD指令紧跟ALU指令(Load-Use)3拍1拍(MEM结束才有数据,仍需等1拍)

5.6 流水线时空图画法

无阻塞(理想)

周期:  1    2    3    4    5    6    7
I1:    IF   ID   EX   M    WB
I2:         IF   ID   EX   M    WB
I3:              IF   ID   EX   M    WB

有RAW阻塞(无转发,I2依赖I1,停3拍)

周期:  1    2    3    4    5    6    7    8    9
I1:    IF   ID   EX   M    WB
I2:         IF  [停] [停] [停]  ID   EX   M    WB

5.7 指令调度优化

核心思想:把与数据无关的独立指令填入阻塞的空气泡中,消除停顿。

优化前:LOAD R1, [a]  / ADD R2, R1  / STORE R2, [b]   → 停3拍
优化后:LOAD R1, [a]  / LOAD R3, [c](无关)/ ADD R2, R1  → 停0拍

六、页(Page)vs 块(Block)区分

概念层次大小缺失处理
页(Page)主存↔磁盘(虚存)大(4KB/8KB)缺页中断(OS介入,读磁盘,慢)
块(Block/Line)Cache↔主存小(32B/64B)Cache Miss(纯硬件调块,快)

重要推论:数据全在同一页 ≠ 全在同一Cache块!一个页通常包含数百个Cache块。


七、高频易错汇总

错误正确做法
取指周期算成N+2拍PCout,MARin,Read可同一拍发出,总计N+1拍
ALU运算和写回寄存器拆成两拍组合逻辑通路(ALU→SR→总线→寄存器)只需1拍
忽略外部访存期间的内部总线并行读主存那1拍,内部总线空闲,可并行送另一操作数到T
CU输入只连IR,忘了FRCU还需接标志寄存器FR,用于条件转移判断
rd(写)连多路选择器rd写操作需要选通使能,连译码器;rs读才连多路选择器
转发技术能消除所有RAWLoad-Use冲突即使有转发,仍需停1拍
按序流水时后续指令继续流进I2在ID阻塞时,I3的IF也必须一起停顿(按序发射)
看到条件转移不判断控制冒险只要有jxx/bxx/jmp,直接判定控制冒险
前半拍写后半拍读的题还数停顿3拍若支持”前半拍写后半拍读”,同一拍内WB可同时供ID读,少停1拍
数据在同一页就认为只占1个Cache块页和块是两个层次,同页数据可能跨多个Cache块