>> >> >> Reference << << << <<<<<<Ref>>>>>>
>> >> >> Indexer << << << <<<<<<Idx>>>>>>
Matched: 0

Tags

    Categories

      Types

        Top Results

          Bus
          M: 2026-04-15 - ljf12825

          概念与定义

          总线(Bus),是在计算机内部,用来传输信息的公共通道

          计算机里有很多组件:CPU,内存,硬盘,外设等;这些组件的交流就是通过总线

          类比城市公共交通系统

          • 道路和轨道:就像总线,它提供了车辆行驶的物理路径
          • 车站:就像计算机中的各个部件(CPU,内存,硬盘等),它们分布在总线的不同点上
          • 乘客和数据:乘客需要从A站到B站,就像数据需要从CPU到内存
          • 交通规则:所有车辆必须遵守红绿灯、停靠规则等,就像所有连接在总线上 的设备都必须遵守统一的通信协议

          总线就是计算机内部和各种设备之间传输数据的公共通道。它是一组信号线的集合,各个部件都连接到这组公共线上,通过它来交换数据、地址和控制信息

          总线的三个核心功能部分

          一条总线通常由三组不同的线路组成,负责三种不同的工作:

          1. 数据总线(Data Bus)
            • 功能:负责在实际部件间传输数据。比如CPU从内存读取指令,或者将运算结果写入硬盘,这些实际的数据都通过数据总线流动
            • 特点:它的宽度(位数)非常重要,直接决定了单位时间内能传输的数据量。通常说的“32位”,“64位”CPU,指的是通用寄存器宽度+地址计算能力,总线宽度越宽地址空间相对越宽,现代CPU架构大都不相等
          2. 地址总线(Address Bus)
            • 功能:负责指定数据在内存中的来源或目的地(地址)。CPU要读写内存时,首先通过地址总线发出一个地址信号,告诉内存“我要找的是XX位置的数据”
            • 特点:它的宽度(位数)决定了系统的寻址能力,即CPU的最大能使用多大的内存。例如,32位地址总线可以寻址2^32 = 4GB的内存空间。这就是为什么老的32位操作系统最大只支持4GB内存的原因
          3. 控制总线(Control Bus)
            • 功能:负责传输管理计算机操作的控制信号。这些信号协调各个部件之间的同步和操作,比如:是读操作还是写操作?设备是否准备好?是否需要中断当前任务?
            • 特点:它是一组不同的控制信号的集合,每条线都有其特定的功能(如读/写线、中断请求线、时钟线等)

          总线的层次结构(分级)

          现代计算机系统通常慈爱用多总线结构,就像城市有高速路、城市主干道、小区街道一样,不同速度的设备使用不同级别的总线,以提高效率

          1. 内部总线(芯片级总线)
            • 位于CPU内部,总线是蚀刻在硅晶圆上的、纳米级别的微型电路。用于在CPU的寄存器、ALU(运算逻辑单元)、控制器等各个部件之间传输数据。速度极快,用户不可见
          2. 系统总线(板级总线/前端总线-FSB)
            • 这是主板上最重要的总线,用于连接CPU、内存和北桥芯片(在老式架构中)等核心高速部件。是主板PCB版层之间的印刷电路。它的速度直接影响了整个系统的性能
          3. 扩展总线(I/O总线)
            • 用于连接各种外部设备和接口,如显卡、硬盘、网卡、USB设备等
            • 常见的扩展总线标准有:
              • PCI/PCIe:用于显卡、声卡、网卡等高速设备。PCIe是当前绝对的主流,采用点对点串行连接,速度极快
              • SATA:专门用于连接硬盘、光驱等存储设备
              • USB:通用串行总线,用于连接各种外设设备,如键盘、鼠标、U盘、打印机等,支持热插拔,非常方便

          Bus的本质

          Shared Medium(共享介质)

          这是总线的物理本质

          总线的“线”是稀缺资源。无论是并行的PCI走线还是单根的CAN双绞线,所有节点在电气上直接并联

          • 电气约束:同一时刻,只能有一个发送器驱动总线电平。如果两个设备同时强驱动相反电平(比如一个拉高,一个拉低),会导致总线冲突,轻则数据错误,重则烧毁IO口(短路电流)
          • 好处与代价
            • 好处:连线极少,扩展方便(并联拓扑)
            • 代价:带宽是所有设备分时复用的,且距离越长、挂载的设备越多,寄生电容越大,频率越上不去

          Arbitration(仲裁)

          既然只能一个说,那就得选个“老大”或定个规矩决定谁说。仲裁机制直接决定了总线的实时性和复杂性

          仲裁模式本质逻辑典型例子特点
          主从轮询只有一个老大(Master)点名,其他人(Slave)闭嘴SPI(片选CS)、I2C(时钟由主控发出)无冲突,无仲裁逻辑,效率取决于主控勤快与否
          CSMA/CD先听再说,边听边说。一旦发现冲突,双方闭嘴退让传统以太网、CAN总线(无损部分)带冲突检测,CAN里叫“线与”逻辑,优先级高的自动胜出且不破坏数据
          令牌环/时隙只有一个拿着令牌的人能说,说完传给下一个PROFIBUS, ARINC 429(固定时隙)确定性极强,知道醉话情况下的延迟,但灵活差
          集中仲裁专门搞一个裁判(Arbiter),谁申请批准谁PCI/PCIe(总线仲裁器)硬件复杂,需要额外的请求/应答信号线

          Protocol(协议)

          这是总线的语义本质;有了介质和顺序,最后是比特流如何翻译成指令。协议层定义了

          • 寻址方式:是像I2C那样在数据头里喊名字(器件地址),还是像PCIe那样点对点路由(ID路由),亦或是像CAN那样广播消息(谁爱听谁听)
          • 帧结构:起始位、地址位、读写控制位、数据位、ACK应答位、校验位、结束位
          • 电气与时间契约:比如I2C规定时钟高电平期间数据必须稳定,变化只能在时钟低电平(否则会被误判为Start/Stop信号)

          为什么需要Bus

          为什么不能点对点连接所有设备

          这叫全连接拓扑,在芯片内部或极小规模电路里是可行的,但在系统级会遭遇连线平方律爆炸

          • 数学灾难:假如有N各个设备需要两两通信
            • 点对点需要N(N-1)/2条物理链路
            • 举例:8各设备需要拉28组线;64个设备需要拉2016组线。PCB版变成织布机
          • 引脚瓶颈:CPU作为核心,如果每个外设都独占一组I/O口,CPU的引脚数会随外设数量线性甚至超线性增长,导致芯片封装成本失控(一颗200个腿的CPU一大半腿都在接外设,不经济)

          为什么早期必须共享总线

          在70s ~ 80s,制约电路设计的不是想象力,而是PCB层数、逻辑门成本、以及EMI控制能力

          • PCB工艺限制:当时的单层或双层板,最大的问题是过孔。走线必须在平面上绕,全拉你接拓扑根本布不通。总线只需要一根线从头穿到尾,类似“冰糖葫芦串”,极大简化Layout
          • 逻辑门昂贵:点对点意味着每个设备都需要独立的收发控制器。共享总线允许设备侧做的很傻(比如只监测总线上有没有喊自己名字),逻辑门数量少,成本低
          • 背板结构刚需:大型机或工控机采用背板+插卡形式。如果每块卡之间都需要点对点飞线,插拔维修根本不可能。总线就是一条公共走廊,插进槽位就等于连上了所有邻居

          总线解决了什么工程问题

          总线不是为了高性能而生的(它反而是性能瓶颈),它是为了工程可制造性而生的

          工程痛点没有总线时有总线时
          硬件扩展性加个外设要重新画板子、飞线、甚至换CPU标准接口与热插拔(如USB, PCI插槽)。只要协议对,插上就用
          信号标准化不同厂家设备电压、时序各异,互联就要加电平转换芯片堆成山定义统一的电气与逻辑标准,降低设计耦合
          故障隔离点对点连线,一个设备短路可能直接把CPU引脚烧掉总线通常有缓冲/隔离电阻或专用收发器,坏一个设备不至于让整条总线瘫痪(CAN总线的强项)
          调试可观测性信号在私密链路上跑,想抓波形要割线逻辑分析仪往总线上一挂,所有数据一目了然

          深层次的工程哲学:复用(Multiplexing)

          总线本质是用时间换空间

          • 空间上:把N条线压成1条(或一组)线,解决了布线复杂度
          • 代价是时间上:同一时刻只能有一对通信,大家都在排队(带宽瓶颈)

          演进与反思

          当PCB层数变多(8层、12层随便用)、SerDes串行技术成熟后,又开始消灭总线:

          • PCIe点对点:看似是插槽,其实内部是树状交换网络,每个槽是独占链路到Root Complex,不再是电气上的共享介质
          • NVLink/CXL:就是告诉点对点直连

          总结:总线是物理空间有限、引脚成本高昂时期的伟大妥协;一旦扇出(Fan-out)成本低于布线成本,人类就会毫不犹豫地用交换机代替总线

          工作机制

          一个总线周期要活起来,靠的就是仲裁定顺序、时序卡节拍、冲突是意外、周期是闭环

          Contention(冲突)

          在Shared Medium中,冲突不是Bug,是物理结构的必然产物

          • 物理定义:两个或以上设备在同一电气窗口内向总线注入电流
          • 后果分层
            • 逻辑错误:读回来的电平既不是0也不是1,数据无效
            • 电气损伤:强0强1对抗(如推挽输出对推挽输出)会形成从VCC到GND的低阻通路,几十毫安的短路电流流过MOS管,瞬间发热甚至烧毁引脚

          Arbitration(总线仲裁)

          仲裁机制的本质区别在与:我是说话之前发现有人比我嗓门大,还是打起来了再停手

          仲裁策略核心机制典型场景如何应对冲突
          集中仲裁独立请求线/应答线,裁判说了算PCI总线(REQ#/GNT#)、老式DMA预防式:没得到许可绝不出声。零冲突
          分布式仲裁(CSMA/CD)先听再发,发时监听CAN总线、传统以太网无损竞争:CAN利用线与逻辑,显性覆盖隐性,ID小的自动赢且毫秒极恢复
          分布式仲裁(CSMA/CA)先听后发,发时不听(无线听不见自己)WiFi, I2C 多主模式回避+重试:发现冲突后随机退避,代价是丢包重传
          主从轮训不存在仲裁,只有点名SPI, I2C(单主)压根没有冲突,但极度依赖主控不宕机

          Timing(时序)

          仲裁决定了谁有资格,时序决定了数据能不能被听懂。总线的时序问题核心在于建立时间和保持时间的窗口博弈

          • 同步总线(如SPI, PCI):大家共用同一个Clock线
            • 关键约束:时钟偏斜。如果时钟线太长,距离远的设备看到的时钟沿比近的晚,数据可能采错。所以频率高了必须用源同步时钟或差分对
          • 异步/自同步总线(如UART, CAN)
            • 本质:没有时钟线,靠波特率约定和起始位的下降沿来同步内部计数器
            • 细节:UART的16倍于波特率的的时钟去扫描起始位,找到中点,以抵抗两边晶振的微小误差

          Bus Cycle(总线周期)

          这是从上位机指令(如MOV [1000H], AX)到硬件波形的一次原子操作映射

          一个典型的同步总线读周期包含4个不可分割的节拍(以经典的8086总线为例)

          节拍(T-State)总线动作对应机制本质
          T1-地址输出Master把地址放到总线上,同时拉低ALE(地址锁存使能)寻址
          T2-状态切换地址撤销,总线进入高阻转折期(Turnaround Cycle)避免冲突(Contention 控制)
          T3-数据采样Slave把数据放到数据总线上,Master在时钟沿锁存数据时序(Timing)窗口
          T4-周期结束Master读走数据,释放总线控制权,进入Idle仲裁(Arbitration)准备

          示例

          假设CPU要从内存读取一个字节,同时DMA也要往硬盘写一个字节,机制如何联动

          1. T0时刻(Arbitration):CPU和DMA同时申请总线。仲裁器比较优先级,发现DMA优先级更高(硬盘缓冲区要溢出了)
            • 结论:CPU被Hold, CPU引脚进入高阻态,释放总线
          2. T1时刻(Contention预防):CPU引脚变高阻后,DMA接管总线前,有一个死区时间。防止DMA驱动和CPU驱动残余电压打架(总线冲突保护)
          3. T2-T3(Bus Cycle):DMA执行内存写周期
            • 地址期:DMA发出内存地址
            • 数据期:DMA发出硬盘数据
          4. T4(Timing):内存芯片必须在规定Access Time 内把数据锁存好。如果DMA时钟太快,内存来不及反应,读出的就是乱码
          5. T5(Arbitration释放):DMA交还令牌,CPU接着干活

          现代演化

          总线的演化史,本质上是一部从“全村共用一条水管”到“每家每户独立光纤”的拓扑革命史。随着芯片频率突破 GHz,PCB 走线从集总参数电路变成了分布参数传输线,传统并行总线的物理极限暴露无遗。

          现代演化主要沿着三条路径展开:SerDes 串行化、包交换网络化、以及芯片内总线外延化

          1. 并行总线的死亡与串行总线的胜利

          根本原因:比特级的“齐步走”走不齐了。

          • 并行困境:老式 PCI 总线 32 根数据线并排跑。在 133MHz 时,线长差 1cm 就会导致时钟和数据错位(信号偏移)。想跑得快只能把线画得绝对等长(蛇形绕线),这导致 PCB 面积巨大且 EMI 辐射像天线阵。
          • 串行解药SerDes(串行器/解串器) 技术。
            • 做法:把 8bit 并行数据拼成 10bit(8b/10b 编码),用一根差分对以 10 倍频率发出去。
            • 优势:只有两根线,不需要对齐任何线长。时钟藏在数据跳变沿里(时钟数据恢复 CDR)。

          典型代际更替

          传统并行总线现代串行替代核心差异
          PCI (133MB/s, 共享)PCIe (64GB/s x16, 点对点)从共用背板变成内部交叉开关矩阵
          ATA (宽排线)SATA / NVMe排线干扰大,串行差分抗干扰强
          SCSI (菊花链终结)SAS带宽独占,不再需要终端电阻匹配

          2. 从“仲裁”到“交换”——拓扑结构的扁平化

          传统总线有个核心痛点是一人说话,全员静默。现代演化用矩阵开关取代了总线裁判

          • 传统总线:CPU 问一句,所有设备听着,看是不是叫自己。
          • 现代结构
            • PCIe 架构:CPU 内部有个 Root Complex,它实际上是一个高速路由交换机
            • 仲裁消失:CPU 和 GPU 说话走 x16 专用链路;NVMe 硬盘说话走 x4 专用链路。两者可以同时全速收发,互不干扰。

          这种演化的本质是空间换时间:用更多的晶体管(交换机逻辑)和更密的连线(PCB 层数),换取了不再需要排队等待的总线周期。

          3. 物理介质的泛化:从“印制线”到“一切皆总线”

          现代总线定义已经模糊了“板内走线”和“外部线缆”的界限,追求的是协议统一,介质无关

          • PCIe over Cable:用标准的 PCIe 协议,跑在光纤或铜缆上(如 NVMe-oF 存储网络)。
          • CXL(Compute Express Link)建立在 PCIe 物理层之上的缓存一致性总线。它把原本只存在于 CPU 内部的总线协议(缓存监听)放到了机箱外面,让多颗 CPU 和 GPU 以为它们焊在同一块主板上。
          • USB4 / Thunderbolt隧道化。线缆里跑的不再是单纯的 USB 数据,而是 PCIe 数据包 + DisplayPort 视频流 混在一起打包。总线不再是单一用途的。

          4. 片上总线的逆袭:AMBA 与 NoC

          当你把视角缩小到芯片内部,总线的演化走了个否定之否定

          • 第一阶段:共享总线(老)。ARM 的 AHB 总线,CPU 和 DMA 抢一根线,仲裁器是瓶颈。
          • 第二阶段:多级矩阵(新)。ARM 的 AXI,分离读写通道,支持多主多从并行通信。
          • 第三阶段:片上网络 NoC(未来)
            • 在指甲盖大的芯片上,几十个核心之间通信如果还靠总线仲裁,效率极低。
            • NoC 借鉴了互联网路由器的思想。芯片内部像一个小城市,每个核心有个门牌号(地址),数据打包成微片,由内部路由器转发。
            • 总线仲裁机制彻底消亡,演化为路由算法(XY 维序路由)。

          5. 演化遗留的“活化石”:CAN 与 I2C

          尽管现代计算核心已经进入点对点交换时代,但低速、高可靠、长距离领域,传统总线思维依然强势。

          • CAN FD / CAN XL:汽车里线束成本重于一切。哪怕到了 10Mbps,双绞线+分布式仲裁依然是绝对主流,因为它天生支持多主、强实时、故障隔离。现代演化只是把仲裁段缩短,把数据段带宽拉大。
          • I3C:I2C 的现代改良版。保留了两线制的简洁拓扑,但加入了带内中断动态地址分配,解决了 I2C 从机死锁拉死总线的顽疾。

          总结对照表

          维度经典总线 (PCI, ISA)现代点对点网络 (PCIe, CXL)
          信号形式并行单端 (TTL/GTL)串行差分 (LVDS/CML)
          仲裁机制集中/分布仲裁器基于信用的流控
          冲突处理退避重试 / 线与优先级物理上不可能冲突
          拓扑限制多点连接,需终端匹配树状/网状,P2P 独占

          一句话总结现代演化的核心: 总线已经从一个物理概念(一群设备并联的电线)演变成了一个逻辑协议栈(一种数据交换的语法)。只要协议握手是 AXI 或者 PCIe 的风格,哪怕中间隔着十万八千里光纤,我们依然称之为“Bus”。