16_总线

Charlie

1. 总线结构

  • 数据线:在系统组件之间传输数据
    • 数据线的数量决定了一次可以传输的数据的大小
  • 地址线:在数据线和地址I/O端口上指定数据的来源和去向
    • 地址线的数量决定了寻址空间的大小
  • 控制线:控制对数据线和地址线的存取和使用
    msedge_951_547.png

2. 总线上数据传输的特点

  • 总线可以被多个设备监听,但同一时刻只能由一个设备发送数据;如果同一时刻多个设备同时发送数据,会造成数据之间的混淆

  • 使用总线进行数据传输

    • 如果连在总线上的某个设备希望向另一个设备发送数据,需要:
      • 获得总线的使用权
      • 通过总线传送数据
    • 如果连在总线上的某个设备希望向另一个组件请求数据,需要:
      • 获得总线的使用权
      • 通过总线向另一个设备发送请求,等待另一个设备发送数据
  • 当总线在被使用过程中,其它设备不可以抢占

3. 设计要素

3.1. 用途

  • 专用总线dedicated:始终只负责一项功能,或始终分配给特定的计算机组件
    • 优点:高吞吐量,减少总线冲突
    • 缺点:增加了系统的规模和成本
  • 复用总线multiplexed
    • 优点:使用的布线数量少,节省空间和成本
    • 缺点:每个模块需要更复杂的控制电路,且共享可能会降低性能

3.2. 仲裁

仲裁方案

  • 集中式:由仲裁器(arbiter)或总线控制器 (bus controller)负责分配总线使用权
    • 链式查询 / 菊花链(daisy chain)
    • 计数器查询(query by a counter)
    • 独立请求(independently request)
  • 分布式(distributed):每个设备都包含访问控制逻辑,各设 备共同作用分享总线
    • 自举式(self selection)
    • 冲突检测(collision detection)

3.2.1. 链式查询

  • 所有的设备都是串行连接的,并将允许信号从优先级最高的设备下发到优先级最低的设备

  • 总线仲裁器收到请求后,在总线不忙的前提下,发起允许信号

  • 如果某个设备收到了允许信号并且发起了总线请求,该设备将总线设置为繁忙状态,允许信号将不再被进一步传递

  • 优点

    • 确定优先级简单
    • 可以更灵活地添加设备
  • 缺点

    • 不保证公平性
    • 对电力故障敏感
    • 限制总线速度

msedge_1071_318.png

3.2.2. 计数器查询

  • 将总线允许线替换为设备ID线

  • 如果总线空闲,总线仲裁器通过设备ID线发送计数

  • 如果当前发送请求的设备ID等于裁决器当前的计数,裁决器将停止计数,设备将总线设置为忙

  • 优点

    • 通过使用不同的初始计数,可以灵活地确定设备优先级
      • 强调优先级:从1开始
      • 强调公平性:从下一个设备的ID开始
    • 对电路故障不敏感
  • 缺点

    • 需要添加设备ID线
    • 需要解码和比较设备ID信号
    • 限制总线的速度

msedge_1018_314.png

3.2.3. 独立请求

  • 每个设备都有自己的总线请求线和总线允许线
  • 当一个设备请求总线时,它通过总线请求线将请求信号发送给总线仲裁器
  • 总线仲裁器决定哪个设备可以使用总线
    • 确定策略:固定优先级,公平链式,LRU,FIFO,…
  • 优点
    • 快速响应
    • 可编程的优先级
  • 缺点
    • 复杂的控制逻辑
    • 更多的控制线路

msedge_990_325.png

3.2.4. 自举式

  • 固定优先级
  • 每个设备在其总线请求线上发送请求
    • 最低优先级的设备没有请求线,使用Busy线
  • 每个设备自行判断自己是否在请求总线的设备中优先级最高

msedge_1089_331.png
优先级:0<1<2<3

3.2.5. 冲突检测

  • 当一个设备想要使用总线时,它会检查总线是否繁忙
    • 如果总线空闲,设备使用总线
  • 冲突:如果两个设备发现总线空闲,它们可能同时使用总线
    • 在传输数据时,设备会监听总线,检查是否存在冲突
    • 如果发生冲突,所有使用总线的设备将停止数据传输,并分别在随机间隔时间后再次请求总线

3.3. 时序

确定每个总线事务的开始和结束时间
总线事务:地址+数据+…+数据

3.3.1. 同步时序

  • 同步时序:事件的发生由时钟决定
  • 优点
    • 跟容易实现和测试
  • 缺点
    • 所用设备共享一个时钟
    • 总线长度受到时钟偏差影响

msedge_530_521.png

3.3.2. 异步时序

  • 异步时序:一个事件的发生取决于前一个事件的发生

  • 握手策略
    msedge_1057_220.png

  • 异步数据传输
    msedge_1029_602.png

  • 优点

    • 可以灵活协调不同设备
  • 缺点

    • 逻辑接口复杂
    • 对噪声敏感

3.3.3. 半同步时序

  • 半同步:同步时序和异步时序相结合。为了减少噪声的影响,在异步计时中使用时钟
    • 准备和响应信号在时钟上升沿有效

msedge_1094_403.png

3.3.4. 分离事务

  • 分离事务:设备准备数据期间释放总线,将一个总线事件分离为两个过程
  • 优点
    • 增加总线利用率
  • 缺点
    • 增加每个总线事件的持续时间和系统复杂度

msedge_830_424.png

3.4. 总线带宽和数据传输速率

  • 总线带宽(bus bandwidth):总线的最大数据传输速率。理想化。
  • 传输速率:考虑地址传输,握手等。
  • 总线宽度(bus width):组成总线的线数
    • 数据总线越宽,一次传输的数据位数就越多
    • 地址总线越宽,一次传输的地址位数就越多
  • 单位:Mbps
    • M为,形容bps
    • 只有在表示存储时才用mb,kb
    • k m g t p

3.4.1. 例:同步总线和异步总线的数据传输速率

msedge_1076_555.png
msedge_1055_628.png

msedge_1092_515.png

3.4.2. 例:不同数据块大小的数据传输速率

msedge_1035_608.png
msedge_890_602.png
msedge_1036_606.png

3.5. 提高总线的数据传输率

  • 提高时钟频率
  • 增加数据总线宽度
    • 每次传输更多的数据(成本:更多的总线线路)
  • 块传输
    • 传输一次地址就传输一块数据(成本:高复杂性)
  • 分离总线事务
    • 减少总线空闲时间(成本:复杂性高,增加每个事务的持续时间)
  • 分离地址线和数据线
    • 同时传输地址和数据(成本:更多的总线线路)

3.6. 层次结构

3.6.1. 单总线结构

  • CPU、存储器和 I/O 模块都连接到一条系统总线
  • 优点:简单,易于扩展
  • 缺点
    • 连接的设备越多,总线长度越大,传输延迟也就越大
    • 聚集的传输请求接近总线容量时,总线成为瓶颈

NVIDIA_Share_962_272.png

3.6.2. 双总线结构I

  • 在CPU和存储器中间增加一个存储器总线
  • 优点:增加CPU和存储器之间的传输效率,同时降低系统总线的负担

NVIDIA_Share_968_328.png

3.6.3. 双总线结构II

  • 将系统总线分为存储器总线、I/O 总线 和 IOP (input/output processer)
  • 优点:降低I/O对总线的负担
    NVIDIA_Share_1041_401.png

3.6.4. 多总线结构I

  • 增加一个 本地总线(local bus)来连接 CPU 和 cache
  • 优点:增加 I/O 效率
    NVIDIA_Share_1007_447.png

3.6.5. 多总线结构II

  • 将系统总线分为存储器总线、I/O 总线和 DMA 总线
  • 优点:增加 I/O 效率
    NVIDIA_Share_1025_321.png

3.6.6. 多总线结构III

  • 增加一个 高速 I/O 总线 来连接高速设备
  • 优点:增加 I/O 交互效率
    NVIDIA_Share_1032_469.png
  • 标题: 16_总线
  • 作者: Charlie
  • 创建于 : 2023-02-24 16:40:00
  • 更新于 : 2024-07-05 12:55:04
  • 链接: https://chillcharlie357.github.io/posts/1badac07/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论