基本概念
- 定义:总线是一组能为多个部件分时和共字的公共信息传送线路。
- 特点:分时和共享(分时可以理解为是时分复用的发送,共享可以理解为共享收到的信息)
- 总线设备:根据对总线有无控制功能可分为主设备和从设备两种。
- 主设备:发出总线请求且获得总线控制权的设备
- 从设备:能响应从主设备发来的各种总线命令的设备
- 主设备:发出总线请求且获得总线控制权的设备
- 缺点:总线带宽限制了整条总线的吞吐量
总线的类型
- 片内总线:芯片内部总线,用于CPU芯片内部各寄存器之间与ALU的链接
- 系统总线:计算机系统内各功能部件(CPU、主存、IO按口)之间相互连接的总线。按系统总线传输信息内容的不同,又可分为3类:数据总线、地址总线和控制总线。
- I/O总线:主要用于连接中低速的IO设备,通过IO接口与系统总线相连接,目的是将低速设备与高速总线分高,以提升总线的系统性能,常见的有USB、PC1总线。
- 通信总线:计算机系统之间或计算机系统与其他系统(如远程通信设备、测试设备)之间传送信息的总线。 (不考)
系统总线
结构
- 单总线结构:将CPU、主存、IO设备都挂载到一组总线上,允许两两之间直接交换信息。
- 优点:结构简单,成本低廉,易于拓展
- 缺点:带宽低,负载重,不支持并发传送
- 优点:结构简单,成本低廉,易于拓展
- 双总线结构:两条总线,一条用于主存、CPU和通道之间传送数据用。另一条是IO总线,用于在外部设备和通道之间传送数据。可以理解为是将内部和外部通过通道分开了
- 优点:将低速IO设备从原单总线上分离出来,实现了存储器总线和IO总线分离。
- 缺点:需要买通道的硬件
- 优点:将低速IO设备从原单总线上分离出来,实现了存储器总线和IO总线分离。
- 三总线结构:一条主存总线,用于CPU和内存通信;一条IO总线,用于CPU和外设通信;一条DMA总线,用于高速外设通信
- 优点:提高了IO性能
性能指标
- 总线宽度:数据线条数,并行性
- 总线带宽:每秒传输最大字节数
- 总线工作频率:总线周期的倒数,指指1秒内传送几次数据
- 总线定时协定:包括同步方式、异步方式、半同步方式、分离方式
- 信号线数:地址线、数据线和控制线的总和
- 总线负载能力
总线最主要的性能指标为总线宽度、总线工作频率、总线带宽
总线事务
- 请求阶段。主设备(CPU 或
DMA)发出总线传输请求,并且获得总线控制权。
- 仲裁阶段。总线仲裁机构决定将下一个传输周期的总线使用权授予某个申请者。
- 寻址阶段。主设备通过总线给出要访问的从设备地址及有关命令,启动从模块。
- 传输阶段。主模块和从模块进行数据交换,可单向或双向进行数据传送。
- 释放阶段。主模块的有关信息均从系统总线上撤除,让出总线使用权。
总线接口
串行传送
- 使用一条传输线进行传输
- 优点:成本低
- 缺点:慢
- 优点:成本低
并行传送
- 每一个数据位都需要一个单独的数据线。
- 地址和数据时分复用传输线
总线仲裁
总线中的角色
- 主设备:发出控制命令和读写地址
- 从设备:被读/写的设备
仲裁
仲裁流程
- 总线主设备在使用总线之前发出总线请求
- 得到授权后,总线主设备使用总线
- 使用完毕后,主设备应归还总线并通知仲裁器
仲裁方式
集中仲裁:
- 链式查询方式
- 计数器定时查询
- 独立请求方式
分布仲裁
链式查询方式 (Daisy-Chaining Arbitration)
工作原理
链式查询方式通过串行连接的方式来确定总线使用权的归属。其核心思想是总线授权信号(Bus Grant, BG)沿着一个链条依次传递。
- 总线请求: 任何模块需要使用总线时,通过将总线请求线
/BR
置为低电平(有效)来发出请求。
- 总线仲裁:
总线仲裁器收到请求后,如果总线当前空闲(总线忙信号
/BB
为高电平),则发出总线授权信号BG=1
。
- 授权传递:
BG
信号首先到达距离仲裁器最近的模块1。- 若模块未请求总线: 该模块会将授权信号
BG
向下游(下一个模块)传递,即BGo = BGi
。
- 若模块已请求总线:
该模块获得总线控制权。它会截断授权信号,即设置其输出
BGo = 0
,防止信号继续向下游传递。同时,该模块会占用总线,并将总线忙信号/BB
置为0,表示总线已被占用。
- 若模块未请求总线: 该模块会将授权信号
- 总线释放:
获得总线使用权的模块在完成数据传输后,会释放总线,即将
/BB
重新置为1。
- 优先级: 离总线仲裁器越近的模块,优先级越高。这是一种固定的优先级方案。
优点
- 实现简单: 仅用少数几根控制线(
BG
,/BR
,/BB
)即可实现优先级控制。
- 易于扩展: 增加新的设备模块比较方便,总线控制器的结构与设备数量无关。
缺点
- 对电路故障敏感:
链中的任何一个模块发生故障,都可能导致其下游的所有模块无法正常工作。
- 仲裁速度慢:
BG
信号是串行传递的,设备越多,仲裁时间越长。
- 优先级固定: 优先级低的设备有可能长时间得不到响应,产生“饿死”现象。
计数器定时查询方式 (Counter Timer Polling Arbitration)
工作原理
这种方式通过一个计数器来轮询各个设备,以决定总线授权给谁。
- 总线请求: 任何设备需要使用总线时,通过
/BR
线发出请求。
- 计数查询:
中央仲裁器接到请求信号后,在总线空闲(
BS
线为”0”)的情况下,启动内部计数器。计数值通过一组地址线发送给所有设备。
- 设备响应:
当某个也发出了总线请求的设备,其地址与地址线上的计数值相符时,该设备就获得总线使用权。
- 总线占用: 获得总线权的设备将
BS
线置”1”,此举有两个作用:一是向所有设备宣告总线已被占用,二是通知仲裁器暂停计数。
- 优先级:
- 固定优先级: 如果计数器每次都从 “0”
开始计数,则设备地址小的优先级高,与链式查询的优先级是固定的情况类似。
- 循环优先级 (Round-Robin):
如果计数器从上一次被暂停的计数值开始计数,那么每个设备使用总线的优先级相等。
- 动态优先级: 计数器的初值也可以通过程序来设置,从而实现动态改变各设备间的优先级。
- 固定优先级: 如果计数器每次都从 “0”
开始计数,则设备地址小的优先级高,与链式查询的优先级是固定的情况类似。
特点
- 优点:
优先级设置非常灵活,可以从固定优先级变为公平的循环优先级,甚至动态调整。
- 缺点: 相较于链式查询,增加了额外的地址/计数线,成本更高。
独立请求方式 (Independent Request Arbitration)
工作原理
这种方式为每个模块都分配了独立的请求和授权线路,实现了并行仲裁。
- 独立请求:
每个模块都有一条专用的总线请求线(
总线请求n
)和一条专用的总线允许线(总线允许n
),直接连接到总线仲裁器。
- 并行仲裁:
当多个模块同时请求总线时,总线仲裁器内部的优先级编码器/排队器会根据预设的优先级策略,判断哪个请求的优先级最高。
- 独立授权:
仲裁器只向优先级最高的那个模块发送总线允许信号(在其对应的
总线允许n
线上发出信号)。
- 总线占用: 获得授权的模块使用总线,并通过公共的
总线忙
线通知所有其他设备。
优点
- 响应速度快:
所有请求是并行发送给仲裁器的,仲裁逻辑可以很快做出判决,响应时间与设备数量无关。
- 优先级控制灵活:
优先级逻辑在仲裁器内部实现,可以通过程序或硬件逻辑轻松更改。
- 对故障不敏感: 某个模块的故障不会影响到其他模块的请求和授权。
缺点
- 控制线数量多:
每个设备都需要两条专用线,设备增多时,总线控制线数量会急剧增加。
- 电路复杂: 仲裁器内部逻辑较前两种方式复杂。
- 不易增加设备: 增加新设备需要增加相应的控制线和仲裁逻辑,扩展性较差。
分布式仲裁方式 (Distributed Arbitration)
工作原理
分布式仲裁方式没有中央仲裁器,而是将仲裁逻辑分布到总线上的各个设备模块中。当多个设备需要使用总线时,它们通过相互竞争来决定总线使用权。
- 发出申请:
当一个或多个设备需要使用总线时,它们会将自己唯一的仲裁号
(Arbitration Number, CN)
发送到共享的仲裁总线(
AB
线)上。
- 并行比较:
- 所有设备同时在仲裁总线上比较各自的仲裁号。这个比较过程通常是从仲裁号的最高位(Most
Significant Bit, MSB)开始逐位向低位进行的。
- 仲裁总线利用 “线与” (Wired-AND) 或 “线或”
(Wired-OR) 逻辑。例如,如果某条仲裁线
ABi
上的电平为1,则表示所有参与竞争的设备的CNi
位都为1(或根据具体逻辑,表示至少有一个为1)。
- 所有设备同时在仲裁总线上比较各自的仲裁号。这个比较过程通常是从仲裁号的最高位(Most
Significant Bit, MSB)开始逐位向低位进行的。
- 确定胜者:
- 在比较的每一位上,如果一个设备发现自己的仲裁号位低于总线上显示的仲裁号位(例如,自己的
CNi
为0,但总线ABi
显示有更高优先级的1存在),它就会退出竞争。
- 这个过程逐位进行,不断有设备退出竞争。
- 最终,只有仲裁号最大的那个设备没有在任何一位上“输掉”比较,它将赢得总线控制权。
- 在比较的每一位上,如果一个设备发现自己的仲裁号位低于总线上显示的仲裁号位(例如,自己的
- 获得总线: 赢得竞争的设备获得总线使用权。它的仲裁号会继续保留在仲裁总线上,作为状态标识,直到它释放总线。
特点
- 优点:
- 可靠性高:
由于没有中央控制器,因此不存在单点故障问题,系统的可靠性更高。
- 扩展性较好:
理论上可以在总线允许的范围内方便地增删设备。
- 可靠性高:
由于没有中央控制器,因此不存在单点故障问题,系统的可靠性更高。
- 缺点:
- 设备逻辑复杂:
每个设备内部都需要一套完整的裁决电路,硬件实现较为复杂。
- 仲裁线数量: 需要一定数量的仲裁线来表示仲裁号,占用了总线的物理空间。
- 设备逻辑复杂:
每个设备内部都需要一套完整的裁决电路,硬件实现较为复杂。
总线定时
总线定时是指总线在双方交换数据的过程中需要时间上配合关系的控制,这种控制称为总线定时,其实质是一种协议或规则,主要有同步、异步、半同步和分离式四种定时方式。
同步定时方式 (Synchronous Timing)
同步定时方式是指系统采用一个统一的时钟信号来协调发送方和接收方的数据传输。所有事件的发生都必须在时钟信号的特定边沿(上升沿或下降沿)上。
- 工作原理:
- 总线上所有模块共享一个公共的时钟信号。
- 一次数据传输发生在一个或多个“总线周期”内,而一个总线周期由固定数量的时钟周期构成。
- 发送方和接收方的所有操作,如发送地址、发送/接收数据、发出/接收控制信号等,都在固定的时钟周期开始或结束。
- 总线上所有模块共享一个公共的时钟信号。
- 优点:
- 速度快:
由于有统一的时钟控制,总线周期固定,传输速度较快,具有较高的传输速率。
- 控制逻辑简单:
时序关系明确,总线控制电路的设计相对简单。
- 速度快:
由于有统一的时钟控制,总线周期固定,传输速度较快,具有较高的传输速率。
- 缺点:
- 缺乏灵活性:
主从设备属于强制性同步,必须在固定的时间内完成操作,无法兼容速度差异较大的设备。
- 可靠性较差:
无法及时进行数据通信的有效性检验,因为系统默认从设备能在规定时间内响应。
- 适用场景: 适用于总线长度较短、总线所接部件存取时间比较接近的系统。
- 缺乏灵活性:
主从设备属于强制性同步,必须在固定的时间内完成操作,无法兼容速度差异较大的设备。
异步定时方式 (Asynchronous Timing)
在异步定时方式中,没有统一的时钟,也没有固定的时间间隔。它完全依靠发送方和接收方之间相互制约的“握手 (Handshake)”信号来实现定时控制。
工作原理:
- 通信双方没有公共时钟,而是通过“请求 (Request)”和“应答
(Acknowledge/Reply)”信号进行联络。
- 主设备发起操作时,先发出“请求”信号。
- 从设备完成相关操作后,返回“应答”信号给主设备。
- 主设备收到“应答”信号后,才继续下一步操作或结束本次传输。
- 通信双方没有公共时钟,而是通过“请求 (Request)”和“应答
(Acknowledge/Reply)”信号进行联络。
三种握手类型:
- 不互锁 (Non-interlocked):
主设备发出“请求”信号后,经过一段时间便自动撤销,不等待从设备的“应答”。从设备在收到请求后发出“应答”,经过一段时间后也自动撤销。双方没有依赖关系。
- 半互锁 (Semi-interlocked):
主设备发出“请求”后,必须在接到从设备的“应答”信号后才撤销“请求”信号。但从设备发出“应答”后,经过一段时间便会自动撤销,==不确认主设备是否已收到==。
- 全互锁 (Fully-interlocked):
主设备发出“请求”后,必须等从设备的“应答”到来后才撤销“请求”。从设备发出“应答”后,必须等待主设备的“请求”信号撤销后,再撤销自己的“应答”信号。这是最可靠的方式。
- 不互锁 (Non-interlocked):
主设备发出“请求”信号后,经过一段时间便自动撤销,不等待从设备的“应答”。从设备在收到请求后发出“应答”,经过一段时间后也自动撤销。双方没有依赖关系。
优点:
- 可靠性高:
保证了主从设备之间的信息交换能自动适应时间的配合,能可靠地与速度差异很大的部件进行信息交换。
- 可靠性高:
保证了主从设备之间的信息交换能自动适应时间的配合,能可靠地与速度差异很大的部件进行信息交换。
缺点:
- 速度较慢:
每次传输都需要“请求-应答”的握手过程,增加了时间开销。
- 控制逻辑复杂: 相较于同步方式,控制电路更复杂。
- 速度较慢:
每次传输都需要“请求-应答”的握手过程,增加了时间开销。
半同步定时方式 (Semi-synchronous Timing)
这是一种结合了同步与异步特点的方式。它保留了同步定时方式的特点,即所有地址、命令、数据的发出时间都严格参照系统时钟,但同时增加了一条“等待 (Wait)”响应信号线,以允许不同速度的设备和谐工作。
- 工作原理:
- 通信过程由系统时钟控制,主设备在某个时钟沿开始发起总线请求。
- 如果从设备速度较慢,无法在规定的时钟周期内准备好数据,它就会通过“Wait”信号线通知主设备。
- 主设备检测到“Wait”信号有效时,会插入一个或多个“等待周期”(空闲的时钟周期),暂停数据传输,直到检测到“Wait”信号变为无效,再继续执行数据传输。
- 通信过程由系统时钟控制,主设备在某个时钟沿开始发起总线请求。
- 优点:
- 可靠性较高:
控制方式比异步简单,同时能在系统时钟的控制下同步工作。
- 灵活性好:
允许速度差异较大的各类设备在系统中工作。
- 可靠性较高:
控制方式比异步简单,同时能在系统时钟的控制下同步工作。
- 缺点:
- 速度受限: 整体系统的工作速度不是很高,因为需要迁就慢速设备,且系统时钟频率不能太高。
分离式定时方式 (Split-cycle Timing)
分离式定时方式将一次完整的总线事务(如读操作)分解为两个独立的子过程:请求过程和应答过程。在两个过程之间,总线可以被释放给其他设备使用。
- 工作原理:
- 请求子过程:
主设备A获得总线使用权后,将命令、地址等信息发到总线上,从设备B接收。此过程占用总线的时间很短,主设备A一旦发送完毕,立即释放总线。
- 总线空闲期:
在从设备B准备数据(例如从内存中读取)的阶段,总线被释放,可接受其他设备的请求并为其服务。
- 应答子过程:
当从设备B准备好数据后,它会申请总线使用权(此时它变为主设备)。一旦获准,设备B将相应的数据送到总线上,由设备A接收。
- 请求子过程:
主设备A获得总线使用权后,将命令、地址等信息发到总线上,从设备B接收。此过程占用总线的时间很短,主设备A一旦发送完毕,立即释放总线。
- 优点:
- 总线利用率高:
在不传送数据时释放总线,总线可接受其他设备的请求,不存在空闲等待时间,极大地提高了总线的效率和吞吐量。
- 总线利用率高:
在不传送数据时释放总线,总线可接受其他设备的请求,不存在空闲等待时间,极大地提高了总线的效率和吞吐量。
- 缺点:
- 控制复杂,开销大:
每个设备都需要更复杂的总线控制逻辑,并且都能申请成为主设备。
特别的,其实分离式定时方式和前面三种定时方式并不冲突,它只是一个总线占用的“中断”方法罢了
- 控制复杂,开销大:
每个设备都需要更复杂的总线控制逻辑,并且都能申请成为主设备。
总线数据传送
1. 读、写操作 (Read, Write Operations)
这是最基本的数据传送模式,构成了所有复杂操作的基础。
- 读操作 (Read): 数据从从方 (Slave)
传送到主方 (Master)。
- 流程通常是:主方先发送地址和读命令,经过一段等待时间(等待从方准备数据),然后从方将数据发送到总线上,由主方读取。
- 流程通常是:主方先发送地址和读命令,经过一段等待时间(等待从方准备数据),然后从方将数据发送到总线上,由主方读取。
- 写操作 (Write): 数据从主方
(Master) 传送到从方 (Slave)。
- 流程通常是:主方将地址、写命令和要写入的数据一并发送到总线上,由从方接收。
要点:
为了提高总线利用率,主方可以在完成寻址(发送地址)的总线周期后,暂时让出总线控制权,让其他主方执行更紧迫的操作。之后再重新竞争总线,完成数据传送的总线周期。这体现了“分离式定时”的思想。
2. 块传送操作 (Block Transfer Operation)
这是一种高效的、用于连续传送一块数据的方式。
- 工作原理:
主方只需给出数据块的起始地址,然后总线会自动地对固定块长度的数据进行逐一地读取或写入,而不需要为每个数据单元都发送一次地址。
- 突发式传送 (Burst Transfer):
- 这是块传送的一种常见形式,尤其用于CPU(主方)与存储器(从方)之间。
- 其数据块长度一般固定为数据线宽度的整数倍(如PPT中提到的4倍)。
- 示例:
一个64位数据线的总线,一次突发式传送可以传送256位的数据。
- 这是块传送的一种常见形式,尤其用于CPU(主方)与存储器(从方)之间。
- 应用: 这种模式在填充高速缓存(Cache)或在超标量流水线中预取指令时非常有用,能显著提高数据吞吐率。
3. 写后读、读修改写操作 (Combined Operations)
这是两种组合操作,特点是在一次总线控制权的占用中,对同一个地址连续进行两次操作,以保证操作的原子性(不可分割性)。
- 共同点:
- 只给出一次地址。
- 主方在整个操作完成之前,会一直掌管总线,防止被其他设备中断。
- 只给出一次地址。
- 两种类型:
- 写后读 (Write-after-Read):
先向一个地址写入数据,然后立即从中读出数据。常用于对写入结果进行校验。
- 读修改写 (Read-Modify-Write): 先从一个地址读出数据,在内部进行修改,然后将新数据写回同一地址。这对于多道程序系统中保护共享资源(如信号量)至关重要。
- 写后读 (Write-after-Read):
先向一个地址写入数据,然后立即从中读出数据。常用于对写入结果进行校验。
4. 广播、广集操作 (Broadcast and Broadcall)
这两种模式涉及一个主方与多个从方进行交互。
- 广播 (Broadcast):
- 一种“一对多”的写操作。
- 一个主方可以将同样的数据同时写入到多个从方。
- 一种“一对多”的写操作。
- 广集 (Broadcall):
- 一种“多对一”的读操作。
- 主方从多个选定的从方接收数据。这些从方的数据在总线上通过“线与”或“线或”的逻辑组合起来。
- 应用: 常用于检测多个中断源,例如,中断控制器可以通过一次广集操作来判断是否有任何一个设备请求了中断。
- 一种“多对一”的读操作。
PCI 总线(大概了解即可)
PCI总线主要特点
- 独立于处理器:
PCI卡可插入不同主频和类型的计算机中。
- 高性能:
- 总线时钟频率: 33.3MHz 或 66.6MHz。
- 总线宽度: 32位,可扩充到64位。
- 最大数据传输率: 32位、33MHz时为 133MB/s。
- 总线时钟频率: 33.3MHz 或 66.6MHz。
- 关键技术:
- 支持突发 (Burst) 传送模式。
- 采用同步定时方式。
- 支持即插即用 (Plug and
Play),能自动识别和配置外设。
- 地址线和数据线多路复用,减少了引脚数。
- 支持多个主设备 (Bus Master)。
- 支持突发 (Burst) 传送模式。
- 总线仲裁:
- 采用集中式仲裁方式。
- 每个PCI主设备都有独立的请求线 (REQ#) 和授权线 (GNT#) 与中央仲裁器相连,仲裁器(通常在桥芯片中)根据请求进行总线授权。
- 采用集中式仲裁方式。
PCI vs. PCI Express (PCIe)
随着技术发展,PCI的共享并行结构再次成为瓶颈,PCI Express 应运而生。
PCI:
- 并行总线,所有设备共享同一组数据线。
- 类似于一条多车道的公路,所有车都在上面跑,容易拥堵。
- 并行总线,所有设备共享同一组数据线。
PCI Express (PCIe):
- 串行、点对点连接,每个设备都有专用的数据通道与交换中心(如Root
Complex或IO Hub)连接。
- 类似于为每家每户修建专用车道,互不干扰。
- 采用全双工通信,数据可以同时收发。
- 串行、点对点连接,每个设备都有专用的数据通道与交换中心(如Root
Complex或IO Hub)连接。
PCIe从根本上改变了连接方式,由“共享总线”模型演变为“交换网络”模型,极大地提升了I/O性能和可扩展性。
如果您喜欢我的文章,可以考虑打赏以支持我继续创作.