Computer Organization: Datapath Control
/ 7 min read
Table of Contents
Course index · Previous: Formats and Logic · Next: Cache
Pipelining for Performance
对比上一页,左侧的电路图发生了一个极其关键的变化:在加法器 (+) 和移位器 (Shifter) 之间,被强行插入了一个新的寄存器 reg2。
- 原来的状态: 数据必须在 1 个时钟周期内,一口气跑完“加法器 + 移位器”全程,导致时钟节拍必须打得很慢。
- 现在的状态: 这条漫长的路被
reg2拦腰截断,分成了两个独立的流水线阶段 (Stages): - Stage 1: 从
reg1到reg2(只包含加法器)。 - Stage 2: 从
reg2到reg3(只包含移位器)。
核心优势一:时钟频率飙升 (Higher clock frequency)
看右侧时序图 (Timing) 的第一行 CLK。你会发现,现在的时钟波形比上一页密集得多(周期变短了,频率变高了)。
- 为什么能变快? 因为现在时钟周期不再受制于“加法+移位”的总延迟。它现在只需要等待两个阶段中较慢的那一个算完即可(比如假设加法器比移位器慢,那么时钟周期只要略大于加法器的延迟就行了)。
- 这就好比原本要求工人一天内造完一整辆车;现在把流水线拆分,A 工人只负责造底盘,B 工人只负责装外壳,交接节奏(时钟频率)自然可以大幅加快。
核心优势二:吞吐量大爆发 (More outputs per second)*
这是流水线技术真正的威力所在,也是右侧时序图最想展示的并发 (Concurrency) 过程:
让我们追踪一下数据 (i) 和紧随其后的数据 (i+1) 的轨迹:
- 第 1 个时钟周期: 数据
(i)进入加法器进行计算,算完的结果Si停在reg2门口等待。 - 第 2 个时钟周期(高光时刻!): * 数据
(i)的加法结果被reg2抓取,进入移位器继续处理。 - 与此同时,加法器并没有闲着!新的数据
(i+1)进入了加法器开始计算。 - 结果: 此时此刻,加法器和移位器在同时工作,分别处理两条不同的数据。
在此之后,每一个时钟周期(虽然周期变短了),
reg3都会稳定地吐出一个最终结果(Ri,Ri+1,Ri+2…)。整体产出数据的速度(吞吐量)几乎翻倍!
Finite State Machines
Combinational Logic
Single-Cycle CPU
这个register file读写方式是,当write enable=1时才能写,在RW输入寄存器编号,busW中输入存储的数值。RA、RB中输入读取的寄存器编号,busA和busB输出RA、RB中的数值 并且可以发现,可以同时写1个,读2个
R-Type Add Datapath
sub
Datapath With Immediates
Supporting Loads
- ALU 算出的物理地址直接顺着导线连到了 DMEM (数据内存) 的
addr端口。 - 控制大脑发出
MemRW = Read(读使能信号)。 - DMEM 收到地址和读命令后,从它浩瀚的存储阵列中找到对应的数据,并把它吐到
DataR线上。
store
上图为立即数生成器设计
Branches
不同之处是PC不一定➕4,可能是加一个offset(立即数)
Adding JALR to Datapath
jal也是类似:
Adding U-Types
让 ALU 执行一个叫 Pass B (直接透传 B 端口数据) 的特殊操作
立即数生成器需要在数字末尾补12个0
最终:
Control and Status Registers
我们之前拼命折腾的 x0-x31 被称为通用寄存器 (GPR),它们是给程序员和 ALU 算数用的。而 CSR 是一套完全独立的寄存器系统,它们不在那个拥有 32 个坑位的寄存器堆里
上图的表格展示了 RISC-V 如何利用这几条基础的 CSR 指令,通过不同的参数组合,来实现对“仪表盘”(CSR 寄存器)的只读、只写或读写操作
CSR Instruction也是使用cpu的data path执行
Datapath Control
=* 代表无关项
Timing:
Cache
问题引入:CPU比DRAM快很多怎么办
Course index · Previous: Formats and Logic · Next: Cache