总论
总线的带宽计算公式如下:
波特率 x 码元 x 通道数
总的来说,总线是整体呈现一个“供大于求”的情景,并没有很复杂的技术难题阻止总线带宽的提升,而是由于并没有那么高的带宽需求。这是因为即使总线带宽提高了,总线连接的设备并没有以相同的带宽生产数据,也是没有意义的。
此外,总线的成本也比一般的设备要高,这是因为总线是一个“媒介”生态位,大幅度修改总线就是在修改通信协议,而通信协议的调整就需要每一个参与通信的设备都进行调整,这牵扯了许多的商业利益。此外总线的修改对芯片上的 serdes,pcb 绘制,pcb 制造都有更大要求,也是成本巨大。
独占与裁决
总线的本质是一种 独占 的共享通信结构,这是它与 CrossBar 或者 NoC 的不同,其他两种通信结构都允许一定程度被共享,只有总线要求独占。
而正是因为总线是独占的,所以它的效率在多设备时,是低于其他两者的。为了实现独占,我们需要在有多个设备同时有访问需求时,裁决出谁拥有总线的唯一使用权。总线裁决要在等级性(Priority)和公平性(Fairness)中权衡。
集中式
将控制逻辑做在一个专门的总线控制器或总线裁决器中,通过将所有的总线请求集中起来利用一个特定的裁决算法进行裁决。
- 菊花链(Daisy chain):将设备按照优先度高低串联在一起,裁决器依次遍历设备,如果有请求,那么就允许
- 计数器定时查询(Query by a counter):每个设备有一个号码,裁决器有一个计数器,如果计数器的值和设备号码相同,那么允许。计数器随时间逐渐增加。
- 独立请求:每个设备在有需求的时候,会给裁决器发信号,裁决器有一个裁决电路,来判断该哪个设备独占。
分布式
没有专门的总线控制器,其控制逻辑分散在各个设备中。
- 自举分布式裁决(Self-selection):监听比自己优先级高的设备是否在占用。
- 冲突检测(Collision detection):当某个设备要使用总线时,它首先检查一下是否有其他设备正在使用总线。如果没有,那它就置总线忙 ,那它就置总线忙,然后使用总线 ,然后使用总线;若两个设备同时检测到总线空闲,则可能会同时使用总线 ,则可能会同时使用总线,此时发生冲突 ,此时发生冲突;一个设备在传输过程中,它会帧听总线以检测是否发生了冲突 ,它会帧听总线以检测是否发生了冲突;当冲突发生时,两个设备都会停止传输 ,两个设备都会停止传输,延迟一个随机时间后再重新使用总线。这种方式一般用在网络通信总线上,如:Ethernet 总线等
分类
片上总线
片上总线是指芯片片内互连使用的总线。芯片在设计时,常常要分为多个功能模块,这些功能模块之间的连接即采用片上互连总线。
系统总线
系统总线通常用于处理器与桥片的连接,同时也作为多处理器间的连接以构成多路系统。
- CPU 片间互联总线:UPI
IO 总线
设备总线用于计算机系统中与 IO 设备的连接。