总线
概述
类型:
系统总线:连接CPU、存储器、I/O控制器和其他功能设备
通信总线:连接主机和I/O设备,或连接不同的计算机系统
设计要素:
用途
- 专用总线、复用总线
仲裁
- 集中式、分布式
时序
- 同步、异步、半同步、分离事务
总线带宽和数据传输速率
总线层次结构
- 单总线、双总线、多总线
总线结构
数据线:在系统组件之间传输数据
- 数据线的数量决定了一次可以传输的数据的大小
地址线:在数据线和地址I/O端口上指定数据的来源和去向
- 地址线的数量决定了寻址空间的大小
控制线:控制对数据线和地址线的存取和使用
时钟:用于总线同步操作
总线请求:表示模块需要获得对总线的控制
总线允许:发出请求的设备已经被允许控制总线
中断请求:表示某个中断正悬而未决
中断响应:未决的中断请求被响应
存储器读:从存储器读数据到总线
存储器写:将数据从总线写入存储器
I/O读:从I/O端口读数据到总线
I/O写:将数据从总线写入I/O端口
总线上数据传输的特点:
总线可以被多个设备监听,但同一时刻只能由一个设备发送数据
如果同一时刻多个设备同时发送数据,会造成数据之间的混淆
总线被使用时,其他设备不能抢占
如果连在总线上的某个设备希望向另一个设备发送数据,需要:
获得总线的使用权
通过总线传送数据
如果连在总线上的某个设备希望向另一个组件请求数据,需要:
获得总线的使用权
通过总线向另一个设备发送请求,等待另一个设备发送数据
用途
专用总线:始终只负责一项功能,或始终分配给特定的计算机组件
复用总线:将同一线路用于多种用途
仲裁
总线仲裁:当多个设备需要与总线通信时,通过某种策略选择一个设备
平衡因素:
优先级:优先级高的设备优先被服务
公平性:优先级最低的设备不能一直被延迟
仲裁方案
集中式:由仲裁器或总线控制器负责分配总线使用权
链式查询/菊花链
计数器查询
独立请求
分布式:每个设备都包含访问控制逻辑,各设备共同作用分享总线
自举式
冲突检测
链式查询
所有的设备都是串行连接的,并允许信号从优先级最高的设备下发到优先级最低的设备
总线仲裁器收到请求后,在总线不忙的前提下,发起允许信号
如果某个设备收到了允许信号并且发起了总线请求,该设备将总线设置为繁忙状态,允许信号将不再被进一步传递
优点:
确定优先级简单
可以灵活地添加设备
缺点:
不能保证公平性
对电路故障敏感
限制总线的速度
计数器查询
将总线允许线替换为设备ID线
如果总线空闲,总线仲裁器通过设备ID线发送计数
如果当前发送请求的设备ID等于总线仲裁器当前的计数,中线仲裁器将停止计数,并将总线设置为忙
优点:
通过使用不同的初始计数,可以灵活确定设备优先级
强调优先级:从1开始
强调公平性:从下一个设备的ID开始
对电路故障不敏感
缺点:
需要添加设备ID线
需要解码和比较设备ID信号
限制总线的速度
独立请求
每个设备都有自己的总线请求线和总线允许线,且直接连接到总线仲裁器
当一个设备请求总线时,它通过总线请求线将请求信号发送给总线仲裁器
总线仲裁器决定哪个设备可以使用总线
- 固定优先级、公平链式、LRU、FIFO、$\cdots$
优点:
快速响应
可编程的优先级
缺点:
复杂的控制逻辑
更多的控制线路
自举式
每个设备在其总线请求线上发送请求,固定优先级,自行判断自己是否在请求总线地设备中优先级最高
最低优先级的设备没有请求线
箭头最少的优先级最高
冲突检测法
冲突:如果两个设备发现总线空闲,它们可能同时使用总线
在传输数据时,设备会监听总线,检查是否存在冲突
如果发生冲突,所有使用总线的设备将停止数据传输,并分别在随机间隔时间后再次请求总线
时序
确定每个总线事物的开始和结束时间
- 总线事务:地址 + 数据 + $\cdots$ + 数据
类型:同步时序、异步时序、半同步、分离事物
同步时序
时间的发生由始终决定
优点:
- 更容易实现和测试
缺点:
所有设备共享一个时钟
总线长度受到时钟偏差的限制
- 同步总线很短,不然会出现时钟混乱
数据过长会导致不同步,造成问题
异步时序
一个时间的发生取决于前一个事件的发生
分为非互锁、半互锁、全互锁三个阶段(使用握手规则)
蓝色表示先后关系,也就是“一次握手”
非互锁(第一次握手):我告诉你我准备好了
半互锁(第二次握手):我告诉你我已经收到了
- “我准备好了”信号只能在你说“我收到了”之后才能撤回
全互锁(第三次握手):我知道了你知道“收到了”之后才能撤回
优点:
- 可以灵活地协调速度不同的设备
缺点:
接口逻辑复杂
对噪声敏感
异步数据传输
CPU设置地址并设置ReadReq线
- 存储器读取相应地址
存储器读取相应地址并设置Ack线
- CPU释放地址线和ReadReq线
CPU释放地址线和ReadReq线
- 存储器释放Ack线
存储器释放Ack线
- 存储器将数据传到数据线
存储器将数据传到数据线并设置DataRdy线
- CPU读取数据
CPU读取数据并设置Ack线
- 存储器释放数据线和DataRdy线
存储器释放数据线和DataRdy线
- CPU释放Ack线
半同步时序
同步时序和异步时序相结合
为了减少噪声的影响,在异步计时中使时钟
- 准备和响应信号在时钟上升沿有效
分离事务
设备准备数据期间释放总线,将一个总线事件分离为两个过程
优点:
- 增加总线利用率
缺点:
- 增加每个总线事件地持续时间和系统复杂度
- 将两个信号之间的总线释放出来
总线带宽和数据传输速率
总线带宽:总线的最大数据传输速率
- 不考虑总线仲裁、数据传输等因素
数据传输速率:
- 考虑地址传输、握手等因素
总线宽度:组成总线的线数
数据总线越宽,一次传输的数据位数就越多
地址总线越宽,一次传输的地址位数就越多
例子:
我们假设同步总线的时钟周期为50ns,并且每一次数据传输需要一个时钟周期,异步总线每次握手需要40ns。两种总线均为32位宽,并且数据的准备时间均为200ns,计算当总线从内存中读取一个字(32位)的时候的数据传输率
同步总线:
数据传输率:$\frac{32bit}{(50 + 200 +50)ns} = 106.7Mbps$
发送指令和地址到内存:50ns
内存准备数据:200ns
将数据传输到CPU:50ns
异步总线:
数据传输率:$\frac{32bit}{(40 + 200 +120)ns} = 106.7Mbps$
步骤1:40ns
步骤2、3、4 / 数据准备:$max((40 \times 3) ns,200ns)$
步骤5、6、7:$(40 \times 3)ns$
如果把存储器的数据准备时间改为230ns,则同步总线的数据准备时间应该是250ns,异步总线仍是230ns
- 同步总线一个时间周期不可以做两件事情
不同数据块大小的数据传输速率
假设系统存在以下特征:
支持访问大小为4到16个字(每个字32位)的块
同步总线具有64位宽和200MHz时钟频率,需要1个时钟周期来传输地址或64位数据
在两个总线事务之间有2个空闲时钟周期
内存访问时准备前4个字需要200ns,后面每4个字准备需要20ns
当前面的数据在总线上传输时,内存可以同时读取后面的数据
如果读取256个字,分别计算每次传输4个字和16个字时的数据传输速率、传输时间和每秒总线事务数:
每次传输4个字
总线事务:地址 + 4个字
地址传输:1个时钟周期
数据准备:200ns(40个时钟周期)
数据传输:2个时钟周期
空闲:2个时钟周期
总共:$\frac{256}{4} \times (1+40+2+2) = 2880$ 个时钟周期
传输时间:$2880 \times 5ns = 14400ns$
每秒总线事务数:$\frac{64 \times 1s}{14400ns} = 4.44M$
乘以64是因为:计算的总时间是传输256,而非一个总线事务
数据传输速率:$\frac{256 \times 32bit}{14400ns} = 568.9Mbps$
每次传输16个字
总线事务:地址 + 16个字
地址传输:1个时钟周期
数据准备(前4个字):200ns(40个时钟周期)
数据传输:2个时钟周期(同时读取后4个字:20ns)
空闲:2个时钟周期
总共:$\frac{256}{16} \times (1+40+3 \times max(2,4)+2+2) = 912$ 个时钟周期
传输时间:$912 \times 5ns = 4560ns$
每秒总线事务数:$\frac{16 \times 1s}{4560ns} = 3.51M$
乘以16是因为:计算的总时间是传输256,而非一个总线事务
数据传输速率:$\frac{256 \times 32bit}{4560ns} =1796.5Mbps$
提高总线数据传输率
增加时钟频率
增加数据总线宽度
- 每次传输更多数据
块传输
- 传输一次地址就传输一块数据
分离总线事务
- 减少总线空闲时间
分离地址线和数据线
- 同时传输地址和数据
总线层次结构
单总线结构
CPU、存储器、I/O模块都连接到一条系统总线
优点:
- 简单,易于扩展
缺点:
连接的设备越多,总线长度越大,传输延迟也就越大
聚集的传输请求接近总线容量时,总线成为瓶颈
双总线结构I
在CPU和存储器中间增加一个存储器总线
优点:
- 增加CPU和存储器之间的传输效率,同时降低系统总线的负担
双总线结构II
将系统总线分为存储器总线、I/O总线和IOP(input/output processer)
优点:
- 降低I/O对总线的负担
多总线结构I
增加一个本地总线来连接CPU和Cache
优点:
- 分离了CPU和I/O的交互
多总线结构
将系统总线分为存储器总线、I/O总线和DMA总线
优点:
- 增加I/O效率
多总线结构III
增加一个高速I/O总线来连接高速设备
优点:
- 增加I/O交互效率