当前位置: 首页 > news >正文

26-计组-数据通路

✅ 一、数据通路基础

1. 数据通路的定义

数据通路:指令在执行过程中数据所经过的路径及其相关硬件部件的统称。

2. 数据通路包含的部件:

  • ALU(算术逻辑单元)

  • 通用寄存器组

  • PSW(程序状态字)

  • MMU(内存管理单元)

  • Cache

  • 浮点运算逻辑

  • 异常/中断处理逻辑

3. 数据通路的控制方式

控制部件发出控制信号进行控制,分为:

(1)操作元件(组合逻辑)

  • 特性:无记忆功能,输出只依赖当前输入,不受时钟控制。

  • 常见部件:加法器、多路选择器、ALU、译码器等

(2)存储元件(时序逻辑)

  • 特性:受时钟控制,有记忆功能,输入在时钟沿写入,输出随时可读。

  • 常见部件:PC、IR、通用寄存器、锁存器、特殊寄存器(含三态门、自增、清零等功能)


✅ 二、数据通路的结构分类

1. 单总线数据通路

✅ 核心部件:
  • MAR(Memory Address Register):存储器地址寄存器

  • MDR(Memory Data Register):存储器数据寄存器

✅ 工作机制:
  • CPU 通过 MAR/MDR 与主存通信

  • 所有寄存器通过 一条内总线 连接

  • 同一个时刻只能一个部件把信息送到总线

  • ALU 负责组合逻辑运算,无记忆功能

是

一、运算示例:R[R3] ← R[R1] + R[R2]

此示例描述了一条指令的执行过程,通过寄存器R1和R2的值相加,结果存入寄存器R3。以下是三个步骤的整理和说明:

1. 步骤:R1out, Yin

  • 操作:将寄存器R1中的值输出到总线,存入暂存寄存器Y。
  • 数据流:R[R1] → Y。
  • 说明
    • R1out:表示寄存器R1的内容通过数据总线输出。
    • Yin:暂存寄存器Y接收R1的值,临时存储第一个操作数。
    • 作用:为后续加法运算准备第一个操作数,Y作为临时存储器避免直接操作R1。
    • 上下文:这是执行周期的一部分,准备操作数以送入ALU(算术逻辑单元)进行运算。
  • 示例:若R1 = 10,则Y = 10。

2. 步骤:R2out, add(Zin)

  • 操作:将寄存器R2中的值输出到总线,同时触发ALU执行加法运算,结果存入暂存寄存器Z。
  • 数据流:R[R2] → ALU,Y + R[R2] → Z。
  • 说明
    • R2out:寄存器R2的内容输出到数据总线,作为加法的第二个操作数。
    • add:ALU执行加法运算,将Y中的值(R1的值)与R2的值相加。
    • Zin:加法结果存入暂存寄存器Z。
    • 作用:完成加法运算,Z临时保存运算结果,等待写入目标寄存器。
    • 上下文:仍在执行周期,ALU完成指令指定的运算(加法)。
  • 示例:若R2 = 20,Y = 10,则Z = 10 + 20 = 30。

3. 步骤:Zout, R3in

  • 操作:将暂存寄存器Z中的值输出到总线,写入寄存器R3。
  • 数据流:Z → R[R3]。
  • 说明
    • Zout:寄存器Z的内容(加法结果)通过数据总线输出。
    • R3in:寄存器R3接收总线上的数据,将结果写入R3。
    • 作用:将运算结果从临时寄存器Z存储到目标寄存器R3,完成指令的constexpr

System: R[R3]

  • 上下文:这是执行周期的最后步骤,将ALU的运算结果保存到目标位置。
  • 示例:Z = 30,写入R3后,R3 = 30。

运算示例

  • 指令:R[R3] ← R[R1] + R[R2]。
  • 完整流程
    1. R1的值存入Y(准备第一个操作数)。
    2. R2的值与Y相加,结果存入Z(执行加法)。
    3. Z的值写入R3(存储结果)。
  • 核心寄存器
    • R1, R2:源操作数寄存器。
    • R3:目标寄存器,存储结果。
    • Y, Z:临时寄存器,分别用于存储中间操作数和运算结果。
  • 关联:此过程发生在执行周期,是指令周期中完成运算的核心步骤。

1. 步骤:R1out, MARin

  • 操作:将寄存器R1中的值输出到总线,送入内存地址寄存器(MAR)。
  • 数据流:R[R1] → MAR。
  • 说明
    • R1out:寄存器R1的内容(存储操作数的地址)输出到数据总线。
    • MARin:MAR接收R1的值,存储要访问的主存地址。
    • 作用:确定主存中需要读取的数据地址(R1中存储的是操作数的地址)。
    • 上下文:这是间址周期执行周期的一部分,用于计算和传递操作数的有效地址。
  • 示例:若R1 = 1000(主存地址),则MAR = 1000。

2. 步骤:read

  • 操作:控制单元发出读命令,主存根据MAR中的地址读取数据。
  • 数据流:主存(MAR) → MDR。
  • 说明
    • read:控制单元通过控制总线向主存发出读信号,MAR中的地址通过地址总线送至主存。
    • 作用:主存根据MAR提供的地址(如1000),读取对应内存单元的数据,送入内存数据寄存器(MDR)。
    • 上下文:仍在间址周期或执行周期,获取操作数数据。
  • 示例:主存地址1000的数据(如50)读入MDR,MDR = 50。

3. 步骤:MDRout, R2in

  • 操作:将MDR中的数据输出到总线,写入寄存器R2。
  • 数据流:MDR → R[R2]。
  • 说明
    • MDRout:MDR的内容(主存读取的数据)通过数据总线输出。
    • R2in:寄存器R2接收总线上的数据,将主存数据写入R2。
    • 作用:将从主存读取的操作数存储到目标寄存器R2,完成数据加载。
    • 上下文:这是间址周期或执行周期的最后步骤,完成操作数从主存到寄存器的传递。
  • 示例:MDR = 50,写入R2后,R2 = 50。

总结:主存读取示例

  • 指令:从主存地址(R1指定的地址)读取数据到R2。
  • 完整流程
    1. R1的值送入MAR(指定主存地址)。
    2. 发出读命令,主存数据读入MDR。
    3. MDR的数据写入R2。
  • 核心寄存器
    • R1:存储操作数的地址。
    • MAR:保存主存访问地址。
    • MDR:临时存储主存读取的数据。
    • R2:目标寄存器,存储读取的数据。
  • 关联:此过程通常发生在间址周期(若R1提供间接寻址地址)或执行周期(获取操作数)。


2. 三总线数据通路

✅ 特点:
  • 拥有 3条总线:A总线、B总线、C总线(或称系统总线)

  • 允许同时读取2个操作数,写回1个结果

  • 执行指令的周期数明显减少,效率高于单总线

✅ 主要部件:

PC、通用寄存器、寄存器堆、ALU、IR、MAR、MDR


3. 单周期数据通路

✅ 特点:
  • 所有指令在一个时钟周期内完成

  • 包括取指、译码、执行、访存、写回等多个阶段操作

✅ 问题:
  • 为保证所有指令都能执行完,必须以最慢的指令决定时钟周期时间
    → 导致 时钟周期很长

  • CPI 固定为 1,但单条指令执行时间长,效率低

✅ 应用:
  • 常见于 教学CPU、RISC简易系统、嵌入式设计


✅ 三、多周期 CPU 与 CPI 分析

✅ 多周期 CPU 特点:

特性描述
执行分阶段每个阶段(IF/ID/EX/MEM/WB)分布在多个时钟周期内
CPI > 1不同指令使用的周期数不同,平均 CPI 大于 1
利用率高部件可在不同周期复用,硬件利用率更高
设计灵活不同指令可用不同周期组合优化执行效率

⏱ CPI 举例:
指令类型阶段数所需周期
add4IF, ID, EX, WB
lw5IF, ID, EX, MEM, WB
beq3IF, ID, EX

CPI 总值 = 所有指令使用的周期 × 指令比例的加权平均


🔁 总结对比:单周期 vs 多周期 CPU

项目单周期 CPU多周期 CPU
CPI固定为 1通常 >1(平均取决于指令结构)
时钟周期时间由最慢指令决定,较长每阶段独立,短周期
指令执行方式所有阶段一次性完成每个阶段一个周期,顺序进行
硬件利用率低,大部分时间闲置高,各阶段时间复用
执行效率慢(尽管 CPI=1,但周期长)更高效(周期短+灵活组合)


✅ 四、CPI ≠ 阶段数 的根本原因解释

很多人误解:一条指令经过 5 个阶段,CPI 就应该是 5,其实不是!

  • CPI(Cycles Per Instruction)是平均每条指令花费的时钟周期数,它与 CPU 结构密切相关,而不是和阶段数量直接挂钩。

  • 阶段是“做什么”,CPI 是“花多久”,不在一个维度。

举例:

  • 单周期 CPU:5 个阶段全压缩在 1 个周期 → CPI = 1

  • 多周期 CPU:每个阶段一个周期 → CPI ≈ 3 ~ 5

  • 流水线 CPU:多个指令并发交错 → CPI ≈ 1


✅ 五、主频与时钟周期关系

🔁 主频与时钟周期时间成反比:

主频(f)=1时钟周期时间(T)\text{主频(f)} = \frac{1}{\text{时钟周期时间(T)}}主频(f)=时钟周期时间(T)1​

举例:

  • T = 2ns → f = 500 MHz

  • T = 0.5ns → f = 2 GHz

时钟周期越长,主频越低,性能越差


✅ 六、结语 · 思维口诀

阶段是“干什么”,周期是“用多久”,CPI 是“平均花几拍”

多周期灵活,单周期简单,流水线高效

时钟长,主频低;CPI高,程序慢;全看结构和优化!

✅ 流水线并行执行原理

📌 一、流水线执行的基本思想

将指令执行过程划分为若干阶段,使得多条指令分阶段并行执行,从而提高指令吞吐率。


📌 二、典型五段流水线结构(以 MIPS 为例)

阶段缩写全称作用
IFInstruction Fetch(取指)从内存中取出指令
IDInstruction Decode(译码)指令译码、读寄存器
EXExecute(执行)运算/地址计算/分支判断
MEMMemory Access(访存)数据读写内存
WBWrite Back(写回)将结果写回寄存器

📌 三、流水线并行实例

假设流水线中正同时处理 5 条指令,在某一时钟周期的状态如下:

指令序号当前阶段
第 1 条指令WB(写回)
第 2 条指令MEM(访存)
第 3 条指令EX(执行)
第 4 条指令ID(译码)
第 5 条指令IF(取指)

✅ 即:5 条指令分别处于流水线的 5 个不同阶段,同时并行执行!


📌 四、流水线“流动”过程

  • 每当一个时钟周期结束:

    • 每条指令推进到下一个阶段

    • 一条新指令进入 IF 阶段

  • 整条流水线整体向前推进一“步”,如同传送带一样移动


📌 五、流水线执行结果分析

  • 每条指令仍然需要经过 5 个阶段(5 个周期)完成

  • 但由于流水线并行执行,一旦填满流水线后:

    • 每个时钟周期都会有一条指令完成(从 WB 阶段输出结果)

  • 效果是:平均每条指令仅用 1 个周期完成(CPI ≈ 1)


📌 六、关键结论

✅ 流水线的本质:并行执行多个指令的不同阶段,从而提高整体吞吐率

✅ 虽然每条指令仍需多个周期,但流水线可以“每周期输出一条指令”,极大提升 CPU 执行效率

http://www.dtcms.com/a/277495.html

相关文章:

  • 楼宇自动化:Modbus 在暖通空调(HVAC)中的节能控制(一)
  • Linux驱动开发1:设备驱动模块加载与卸载
  • java+vue+SpringBoo中小型制造企业质量管理系统(程序+数据库+报告+部署教程+答辩指导)
  • 查看Linux服务器显卡使用情况的详细教程
  • win11添加无线显示器(两个笔记本实现双屏)
  • 昇腾FAQ-A08-工具链相关
  • 小架构step系列13:测试用例的加载
  • 线性代数学习笔记
  • 求解线性规划模型最优解
  • Java行为型模式---观察者模式
  • AI基础设施展望
  • 《Mirage:首款基于实时世界模型的AI原生UGC游戏引擎,开启“边玩边生成”的游戏新时代》
  • Python实现小红书悬停框效果详解
  • 极矢量与轴矢量
  • 框架和库的区别
  • MCP4725 数据手册解读
  • 通信子网 V
  • cuda编程笔记(7)--多GPU上的CUDA
  • 黑马点评系类问题p63中ClassPathResource报错
  • Claude Code AI 编程指南
  • 在 Flow 取消时自动清理资源
  • 构建可落地的企业AI Agent,背后隐藏着怎样的技术密码?
  • vue是什么
  • 【读书笔记】《Effective Modern C++》第二章:auto
  • 改进后的 OpenCV 5.x + GStreamer + Python 3.12 编译流程(适用于 Orange Pi / ARM64)
  • 正则化-机器学习
  • Redis面试精讲 Day 2:Redis数据类型全解析
  • 内存管理概念
  • Docker安装Nginx
  • Web:JS的三种引用方式