总线类型、仲裁、带宽、传输速率、层次结构
# Lecture13 - 总线
# 类型
系统总线 - io 控制器
通信总线 - io 设备
地址线和数据线可以复用
# 总线结构
# 设计要素
# 用途
专用总线: “或”
# 仲裁
# 集中式
# 链式查询
橙色 “繁忙” 的是双向箭头
在总线不忙的时候,才能发起请求,但是一个时钟周期内可能有多个设备发起请求。
总线仲裁器在总线不忙的时候,才能发起允许信号。
设备 1 优先级最高,设备 N 优先级最低。
不能保证公平性 —— 设备 N 很难拿到允许信号
对电路故障敏感 —— 后面的设备无法判断是前面的设备想使用,还是前面的设备坏了。之前的设备坏了,后面的电路都无法使用。
限制总线的速度 —— 平均要等待 n 2 / 2 的时间
# 计数器查询
与 “链式查询” 相比,绿色(串联的线)变成一条总线。
报到自己的 ID 则可以占用。
# 独立请求
每个设备都有允许线和请求线。
只要总线不繁忙,想要请求就可以请求,每个设备没有无谓的等待的时间。
# 分布式
# 自举式
自举式(自主选举式)
向上的箭头 —— 表达自己想要用的请求
向下的箭头 —— 接受优先级更高的设备是否有想用的请求
设备 3 的优先级最高
设备 0 的优先级最低,没有请求线,没有优先级更低的设备去监听请求
# 冲突检测
只要总线空闲,就立刻请求
"随机时间间隔"
# 时序
离散事件、系统动力
同步时序、异步时序、半同步是一类,分离事务是另外一个
同步时序:时钟周期
异步时序:事务的相对顺序
# 同步时序
约定好,第一个时刻取地址,第二个时刻取数据,etc……
快的迁就慢的
# 异步时序
Ready: 你可以来拿了
Ack: 我已经拿好了
都有上升沿和下降沿(在总线上放好了,撤好了)
非互锁 —— 仅表示前后顺序
半互锁 ——Ack 上升,Ready 才可以撤,可以防止 Ready 提前撤,Ready 持续等
全互锁 —— 防止 Ack 先撤,Ready 没接收到持续等
有两根 ready 线,ReadReq 和 DataRdy
1 CPU 告诉存储器,地址已经准备好
2 存储器告诉 CPU,已经读取完毕
3 CPU 收到读取完毕信号,释放 Ready
4 存储器收到释放完毕的信号,释放 Ack
5 存储器告诉 CPU,数据已经准备好
6 CPU 告诉存储器,数据已经读取完毕
7 存储器释放 Ready 信号
8 CPU 释放 Ack 信号
# 半同步时序
发生在时钟上升沿才认为是有效的
# 分离事务
中间过程释放给其他设备使用,数据需要准备时间,数据准备好再请求。
# 总线带宽和数据传输速率
区分总线带宽和数据传输速率
总线带宽更偏向于理想状态
数据传输速率偏向于实际状态(一般求的是数据传输速率)
# 例题
5 的时候,如果数据准备不好,那么就不能如期进行数据传输
同步总线需要使用整数倍的时钟周期
每次传输,一个地址。
64 位宽 —— 每次可以传输两个字
4 同步读取 并且 cache 降低
200MHz 时钟频率 ——5ns 时钟周期
要么提高数据量,要么减少所耗费的时间
块传输 —— 减少地址时间,减少后面的数据的访问时间
分离总线事务 —— 一个事务分成两个过程,中间的过程让别的事务来,节省数据准备的时间
分离地址线和数据线 —— 原先是地址和数据分别传输,现在地址和数据可以同时传输
# 总线层次结构
# 单总线结构
车越多,路越堵
# 双总线结构 I
增加存储器总线
CPU 和存储器的传输占很大的一部分负担
# 双总线结构 II
增加 IO 总线和 IOP
# 多总线结构 I
# 多总线结构 II
DMA 总线 (IO 部分会讲)