![](https://lar-blog.oss-cn-nanjing.aliyuncs.com/gallery/gallery/%E9%A3%8E%E5%85%89/5D4F56FB9E1CB22675B95332AE79BE23.png)
计算机组成原理-学习笔记13-总线
计算机组成原理-学习笔记13-总线
1.基础
1.类型
• 芯片内部总线:连接芯片内部的各个部分
• 例:CPU中连接寄存器、ALU等部分(计基讲的)
• 系统总线:连接CPU、存储器、IO控制器和其他功能设备(本节课重点)
• 通信总线:连接主机和I/O设备,或连接不同的计算机系统
2.结构
- 数据线:在系统组件之间传输数据
- 数据线的数量决定了一次可以传输的数据的大小。正常每次只能传1位
- 地址线:在数据线和地址I/O端口上指定数据的来源和去向
- 地址线的数量决定了寻址空间的大小(存地址的位数2^n)
- 可能可以传2次,达到更大寻址空间
- 控制线:控制对数据线和地址线的存取和使用
• 时钟(clock):用于总线同步操作
• 总线请求(bus request):表示模块需要获得对总线的控制,处理冲突
• 总线允许(bus grant):发出请求的设备已经被允许控制总线
• 中断请求(interrupt request):表示某个中断正在悬而未决
• 中断响应(interrupt ACK):未决的终端请求被响应
• 存储器读(memory read):从存储器读数据到总线
• 存储器写(memory write):将数据从总线写入存储器
• I/O读(I/O read):从I/O端口读数据到总线
• I/O写(I/O write):将数据从总线写入I/O端口
3.特点
可以被多个设备监听,但同一时刻只能由一个设备发送数据
- 混淆例子:走廊喊话
- 不能抢夺
如果连在总线上的某个设备希望向另一个设备发送数据,需要:
- 1.获得总线的使用权
- 2.通过总线传送数据
如果连在总线上的某个设备希望向另一个组件请求数据,需要:
- 获得总线的使用权
- 通过总线向另一个设备发送请求,等待另一个设备发送数据
2.设计要素
用途
- 专用(dedicated)总线:始终只负责一项功能,或始终分配给特定的计算机组件
- 优点:高吞吐量,减少总线冲突
- 缺点:增加了系统的规模和成本
- 复用(multiplexed)总线:将同一线路用于多种用途
- 优点:使用的布线数量少,节省空间和成本
- 缺点:每个模块需要更复杂的控制电路,且共享可能会降低性
仲裁
- 通过某种策略选择一个设备
- 平衡因素
- 优先级:优先级高的设备优先被服务
- 公平性:优先级最低的设备不能一直被延迟
仲裁方案
集中式(centralized):由仲裁器(arbiter)或总线控制器(bus controller)负责分配总线使用权
链式查询 / 菊花链(daisy chain)
image-20221129174524495
串行连接,将允许信号从优先级最高的设备下发到优先级
最低的设备
如果某个设备收到了允许信号并且发起了总线请求,该设备将总线设置为繁忙状态,允许信号将不再被进一步传递
优点:灵活,容易确定优先级
缺点:不能保证公平性,对故障敏感
计数器查询(query by a counter)
image-20221129174517949
将总线允许线替换为设备ID(地址)线
总线空闲时,总线仲裁器的计数器开始计数,计数值通过设备ID线发向各个部件
如果当前发送请求的设备ID等于裁决器当前的计数,裁决器将停止计数,
设备将总线设置为繁忙
优点:灵活地确定设备优先级,既可从1开始(优先级)也可从下一个设备ID开始(公平性)
缺点:需要解码和比较设备ID信号
独立请求(independently request)
image-20221129174509347
- 每个设备都有自己的总线请求线和总线允许线
- 总线仲裁器决定哪个设备可以使用总线
- 确定策略:固定优先级,公平链式,LRU,FIFO
- 优点:可编程
- 缺点:复杂
分布式(distributed):每个设备都包含访问控制逻辑,各设备共同作用分享总线
- 自举式(self selection)
- 固定优先级
- 每个设备自行判断自己是否在请求总线的设备中优先级最高(3最高)
image-20221129174500223
- 冲突检测(collision detection)
- 当一个设备想要使用总线时,它会检查总线是否繁忙
- 如果总线空闲,设备使用总线
- 冲突:如果两个设备发现总线空闲,它们可能同时使用总线
- 在传输数据时,设备会监听总线,检查是否存在冲突。如果发生冲突,所有使用总线的设备将停止数据传输,并分别在随机时间间隔后再次请求总线
- 当一个设备想要使用总线时,它会检查总线是否繁忙
- 自举式(self selection)
时序
- 目的:确定每个总线事务的开始和结束时间
- 总线事务:地址 + 数据 + … + 数据
- 类型
同步时序(时钟信号):时钟信号来同步
- 共享同一个时钟(快受慢拖累)
image-20221204225949092
异步时序(顺序):一个事件的发生取决于前一个事件的发生
image-20221204230401684
- Ready提供数据,ack接收
- 1.均为上升沿
- 2.Ready下降沿,否则ready不知道ack收到
- 3.ack下降沿,否则ack不知道ready撤了
- (1开始后开始传输,即设置到数据/地址线上)
- (读完后2开始握手通知)
- (3开始后收回悬置,即释放数据/地址线)
image-20221204231730077
- 123和567:三次握手。4:释放和过渡
半同步:同步和异步相结合
- 准备和响应信号仅在上升沿有效
- 去除噪声
事件分离:准备数据时释放总线
- 即在4时利用总线,将一个总线事件分离为两个过程
- 缺点:增加了每个总线事件的时间
image-20221204233008616
总线带宽和数据传输速率
- 总线带宽(bus bandwidth):总线的最大数据传输速率(理想)
- 不要考虑总线仲裁、地址传输等因素
- 数据传输速率
- 考虑地址传输、握手等因素(实际)
- 总线宽度(bus width):组成总线的线数
- 数据总线越宽,一次传输的数据位数就越多
- 地址总线越宽,一次传输的地址位数就越多、
计算题例子
Mbps是Million(10^6 = 2^20) bits per second的缩写
时钟周期和频率:1GHz=10^3MHz=10^6KHz=10^9Hz 1000的数量级
GHz对应的T(s)=1/(10^9Hz)=10^-9 s =1ns
1s=10^3 ms=10^6 us=10^9 ns
同步总线
image-20221204234131244
- 记住:准备数据【上取整】,一个时钟周期只能做一件事
image-20221204234347579
异步总线
- 第一次握手后开始准备数据
- 数据准备后才能开始传输
image-20221204234032663
复杂例子
image-20221204235521515
image-20221204235530559
image-20221204235556052
- 每次读 == 每次总线时间
- 需要考虑最后一次空闲
- 读1-4/5-8/9-12个字时,同时传输(2)和准备(4)。最后一次只传输,故为2
提高传输率
万变不离其宗:数据量 / 耗费时间
- 提高时钟频率,变相缩短时钟周期(时钟周期数不变的情况下)
- 增加数据总线宽度
- 每次传输更多位的数据(成本:更多的总线线路)
- 块传输
- 传输一次地址就传输一块数据(成本:高复杂性)
- 分离总线事务
- 减少总线空闲时间(成本:复杂性高,增加每个事务的持续时间)
- 分离地址线和数据线
- 同时传输地址和数据(成本:更多的总线线路)
总线层次结构
单总线结构
CPU、存储器和 I/O 模块都连接到一条系统总线
优点:简单,易于扩展
缺点:
• 连接的设备越多,总线长度越大,传输延迟也就越大
• 聚集的传输请求接近总线容量时,总线成为瓶颈
双总线结构1
- 在CPU和存储器中间增加一个存储器总线
- 增加CPU和存储器之间的传输效率
双总线结构2
- 将系统总线分为存储器总线、I/O 总线 和 IOP (input/output processer)
- 降低I/O对总线的负担
image-20221205000947107
多总线结构1
- 增加一个 本地总线(local bus)来连接 CPU 和 cache
image-20221205001159332
多总线结构2
- 将系统总线分为存储器总线、I/O 总线和 DMA 总线
image-20221205001149715
多总线结构3
- 增加一个 高速 I/O 总线 来连接高速设备
image-20221205001315388