上学时学点电的专业的都应该有学过总线这个东西,我提一个最简单的:两根线广播线,凡是挂入这两根广播线的设备都可以收、发电平信号,信号的规则就是这个总线的协议。比如MODBUS、CANBUS之类。类似我画的图这样:

这种简单的总线中,大家都是对等的,所有人的通讯都是跑上来踩这两条线。满足我对总线最朴素的想象。

翻车式拐弯:那么一个SOC上面的总线如AMBA家族的AXI系列,AXI扩展的ACE,CHI这些,大家都叫总线,它们的线也是把所有节点都用线连在一起的吗?只是,,,更多了几根?

很明显这只是我一个比较低智的疑问,在高速总线上,节点可能还会很多,还要高频,大家都来踩信号线,要想竞争握手抢到发言权都会是一场灾难,可能有些节点很久也抢不到一次;更不必说还要自己区分一段信号的目标是不是自己,不断地做信号解码分析的耗费也是十分巨大。

简单读一下AXI总线的规范,所有上总线的节点似乎都是想发就发,没有在总线上抢使用权,也没有尝试监听别的节点的信号来分析目标是不是自己。

所以,这中间隐藏着我一直没有注意的点,叫做总线互联结构,抽象一下,这是与两根线式总线中,那两根线处于一个层次的东西,就是一个总线结构中节点之间连接的方式。我举例几个说明一下:

1. 两根线式总线互联结构,就看开篇第一个图里面的两根走所有信号线就行了。

2. 星型总线互联结构,如下图。咦?看起来似乎有点像小时候学的互联网拓扑结构?对滴,差不多少。

3. 环形结构(ring结构) ,图很土,但是确实长这样。

4.  全连接结构简单的讲就是所有节点都能直达。

看到没有,各种乱七八糟的结构都可以是总线互联,那么问题就来了,除了2线式的总线,其他总线本质上都是些点对点传输的组合(不能做广播信号和全总线监听),也就是说,不是能够通过简单的直连金属导线能解决的,就如同互联网需要交换机一样,这需要总线中的所有节点都有一个类似交换机的东西。这个东西在SOC的总线中普遍叫做router,换句话说,这个总线是活的,它知道根据某种规则将一个节点发出的数据转到指定节点。说到这里应该已经把总线互联这个东西解释清楚了,它是一个能做总线中指定两点,做点对点传输的东西。这其实是总线协议背后的东西,有的结构叫crossbar(类似全连接),有的叫NOC(Network on chip,就是一种网,渔网见过吗,跟那差不多,手残懒得画),也有的叫ring(上面说的环形结构)。

对比着最简单的2线式总线,SOC上的总线已经大概说清楚了,这张总线是活的,其中有类似交换机的router,用来路由各个节点发出的数据,那么问题就来了:挑出ring总线来说,假设router转发一次数据需要1ns(纳秒,随意说的,跟实际soc无瓜葛),各个节点之间的通讯距离是不是一样的?我重新画一个节点多的ring结构:

这里面1-2节点之间的距离是1ns(1向2发送数据按照上面说的1router只需要1ns),1-4之间的距离无论经过2-3到4还是经过6-5到4都需要3ns,这就带来节点之间数据延迟不一致的问题。另外,1-4的数据很明显需要2-3或5-6的router来参与数据传输,而如果这时候2-3/5-6自己有数据要走,1-4的数据很明显是要被停滞的。换句话说,在总线互联中,各个router的数据传输压力是不相同的:如果1-3之间数据交互极其频繁的话,2节点就算没有数据传输也会很忙。进一步的,如果总线互联设计与数据负载不匹配,可能会出现其中的某个router过度繁忙造成总线数据带宽瓶颈;有人可能说采用全连接最好,谁也不干涉谁;确实是这样,crossbar是最快的总线互联结构,但是(重点),家里装修的时候还知道连线多了费电线(费钱)呢,soc中又何尝不是?


愚夫拙见,行文亦是不畅,看官须得且看且骂且吐槽之。


另外,对标题做一下回答:活的总线,也是总线;谁让人不另外起名呢~

本文用于自我科普,也不想去拉扯一些怎么设计合理呀~各种拓扑结合一起呀~2维结构不够用上3维呀。但是读者还是应该搜索一下这些拓扑,比如说麒麟、骁龙、联发科、苹果之类的soc,看一下他们总线互联是怎么做的,更甚至Intel多核间、各种主板、PCIe其实里面都是一些活的总线。

SOC上的总线真的是总线?相关推荐

  1. linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  2. 计算机内部总线和外部总线,科学网-怎样将计算机内部总线扩展为外部网络?-姜咏江的博文...

    怎样将计算机内部总线扩展为外部网络? 姜咏江 透明计算公示成果的第一条就是"将原来计算机的内部总线扩展为外部网络".现在我们来谈谈能不能将计算机内部总线扩展成外部网络. 1.什么是 ...

  3. 总线与接口(内部总线、系统总线、外部总线)

    这种分类方式是根据离芯片远近等级分类的. 1.1 内部总线 内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连. 1.1.1 I2C总线 I2C(Inter-IC)总线10多年前由Ph ...

  4. 微型计算机常用的总线类型,常见总线有哪些类型

    1.总线定义 计算机和设备之间传输信息的公共数据通道,是连接计算机硬件内多种设备的通信线路.它实现了总线上所有设备共享. 2.总线的分类 2.1数据总线(DB) 用来传递数据信息,双向的.数据总线的宽 ...

  5. 10 计算机组成原理第六章 总线 总线的概念与分类 总线性能指标 总线仲裁 总线操作和定时 总线标准

    文章目录 1 总线的概念与分类 1.1总线的定义 1.2 总线的特点 1.3 总线的特性 1.4 总线的分类 1.4.1 串行总线与并行总线 1.4.2 按总线功能分类 1.5 系统总线的结构 1.6 ...

  6. Cortex-M3 I-Code,D-Code,系统总线及其他总线接口

    Cortex-M3 的总线接口 下图是Cortex-M3的连接方式样板图,大家可以根据需求自行更改, CM3 处理器的总线接口是基于 AHB-Lite 和 APB 协议.下图中总线复用器的作用是,让指 ...

  7. 微型计算机没什么总线,微型计算机系统总线包括什么?

    2014-01-02 计算机系统总线分为哪几类? 一.什么是冯诺依曼体系结构?它的主要内容是什么? 20世纪30年代中期,德国科学家冯诺依曼提出,抛弃十进制,采用二进制作为数字计算机的数制基础.同时, ...

  8. [工业互联-2]:工业有线互联总线之CAN总线

    目录 第1章 CAN总线概述 1.1 概述 1.2 CAN总线的优点 1.3 应用广泛 1.4 CAN总线的发展历史 1.5 传输距离与传输速度的关系 第2章 CAN总线的网络拓扑 2.1 总线拓扑 ...

  9. 详解CAN总线:CAN总线通信优先级机制

    目录 1.数据帧和遥控帧的优先级 2.标准格式和扩展格式的优先级 在详解CAN总线:CAN总线报文格式-数据帧文章中,讲解到仲裁段.仲裁段用于写明需要发送到目的CAN节点的地址.确定发送的帧类型(当前 ...

最新文章

  1. flask基础(上篇)
  2. 贝叶斯多元Logistics回归理论基础
  3. 一个悄然成为世界最流行的操作系统诞生!
  4. WinUI 3 试玩报告
  5. 如何提高个人博客的访问量
  6. WIN10+Ubuntu16.4 双系统,遇到的坑
  7. 可以十倍地提高.NET 应用程序的速度集群存储器对象缓存控件NCache
  8. java IEnumerator_获取实现接口的所有类型
  9. 用JPEXS软件实现swf反编译-逆向调试方法
  10. grads 相关系数_GrADS实习报告6
  11. 虚拟机Linux下如何查看自己的IP地址
  12. JAVA中计算五子棋平局的算法_输入五子棋棋盘判断输赢或平局—程序设计(C语言)...
  13. 在UBUNTU中使用北通USB游戏手柄
  14. CNS可增值积分区块链应用剖析如何区分真伪区块链
  15. 《下班后开始新的一天》阅读笔记
  16. goaheadlinux移植_web服務器goahead移植到Linux開發板
  17. matlab罗朗展式,用MATLAB求留数
  18. [杭州衡泰]软件测试面经
  19. qcc304x笔记之led配置(五)
  20. linux内核 list.h,Linux内核list.h链表分析

热门文章

  1. 已经有了阿里云OSS还需要开通CDN吗?
  2. 基于libevent的http客户端,并可以请求https
  3. JAVA:二进制与十进制转换
  4. vue项目中加载使用腾讯地图
  5. 思维导图怎么画?原来思维导图还可以这样绘制
  6. PhotoSweeper X (重复照片清理工具)
  7. 交叉谱分析——Python
  8. ORACLE EBS常用表查询语句
  9. SpringMVC里拦截器preHandle里的参数意思
  10. G-sensor的两种使用方式