| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 片上总线协议学习(1)——SiFive的TileLink与ARM系列总线的概述与对比 -> 正文阅读 |
|
[嵌入式]片上总线协议学习(1)——SiFive的TileLink与ARM系列总线的概述与对比 |
片上总线协议学习(1)——SiFive的TileLink与ARM系列总线的概述与对比
27 人
赞同了该文章
一、背景介绍随着超大规模集成电路的迅速发展,半导体工业进入深亚微米时代,器件特征尺寸越来越小,芯片规模越来越大,可以在单芯片上集成上百万到数亿只晶体管。如此密集的集成度使我们现在能够在一小块芯片上把以前由CPU和外设等数块芯片实现的功能集成起来,由单片集成电路构成功能强大的、完整的系统,这就是我们通常所说的片上系统。 IP复用是片上系统时代的核心技术之一。由于IP核的设计千差万别,不同的IP核间想要进行连接,就要遵守相同的接口标准。在片上系统中,处理器核和所有外设通过共享总线互通互联,因此这些IP核必须遵守相同的总线规范。总线规范定义的是IP核之间的通用接口,因此它定义了一套标准的信号类型与传输策略,以连接不同的模块,而不是试图去规范IP核的功能和接口如何实现。一个片上总线规范一般需要定义各个模块之间初始化、仲裁、请求传输、响应、发送接收等过程中驱动、时序、策略等关系。 随着多核系统的诞生与发展,总线协议也与时俱进:当面对单核情况时,一致性问题仅包括CPU缓存与内存间的读写一致性,以及一些IO设备映射地址uncachable,CPU与DMA设备间的交互等,这时总线需要提供的机制并不复杂;当延伸到多核或众核处理器应用场景,甚至异构并行架构下的一致性解决方案时,总线能否完备地支持缓存一致性协议也会成为重要考量点。 典型的片上总线标准包括ARM公司提出的AMBA总线标准,IBM提出的CoreConnect总线,Silicore推出的Wishbone总线以及Sifive公司推出的TileLink总线。目前业界使用最为广泛的是AMBA标准下的总线系列。下面将对AMBA系列总线和TileLink总线进行详细介绍。 二、TileLink整体概览TileLink是近几年由伯克利孕育的芯片初创公司SiFive提出的一种全新的芯片级总线互连标准,允许多个主设备(masters)以支持一致性的存储器映射(memory-mapped)方式访问存储器和其他从端(slave)。TileLink的设计目标,是为SoC提供一个具有低延迟和高吞吐率传输的高速、可扩展的片上互连方式,来连接通用多处理器、协处理器、加速器、DMA以及各类简单或复杂的设备。 TileLink是一个协议框架,设计为多个缓存一致性策略的基板。其目的是将通信网络的设计和缓存控制器的实现与一致性协议本身的设计分离开来。这种关注点分离改进了内存层次结构的HDL描述的模块化,同时也使各个内存系统组件更加易于验证。 总体上来说,TileLink可以定义为:
TileLink还具备以下特性:
协议扩展TileLink 支持多种类型的通讯代理模块,并定义了三个从简单到复杂的的协议扩展级别。每个级别定义了兼容该级别的通讯代理模块需要支持的协议扩展子集,如下表所示。最简单的是 TileLink 无缓存轻量级(Uncached Lightweight, TL-UL),只支持简单的单个字读写(Get/Put)的存储器操作。相对复杂的 TileLink无缓存重量级(Uncached Heavyweight,TL-UH),添加了预处理(hints)、原子访问和突发访问支持,但不支持一致性的缓存访问。最后,缓存支持级 TileLink Cached(TL-C)是最复杂,也是最完整的协议,支持使用一致性的缓存模块。
当一个处理器的TL-C通讯代理模块和一个外设的TL-UL通讯代理模块通信时,要么处理器代理避免使用更高级的特性,要么两者之间必须使用一个 TL-C 到 TL-UL 的适配器。TileLink中的各种代理可以支持一些其他特性的组合,但在TileLink的spec中只包括上述三种扩展级别。 TL基础架构Tilelink 协议适用于在代理(agent)互联拓扑图中,完成消息(message)的传递。共享地址空间的代理经由点对点的通道(channel)收发消息,来完成操作(operation),该通道被称为链路(link)。
网络拓扑TL网络的代理间通过链路(link)互相连接。每条链路的一端连接一个代理的主接口,另一端则连接另一个代理的从接口。主接口一端的代理可以向另一端代理发送请求让其执行访存操作,或者请求获取权限以传输并缓存数据副本。从接口端的代理是对应地址空间的访问和权限管理者,依据主接口发来的请求执行相应的访存操作。 最基本的 TileLink 网络操作如下图所示。两个模块(Module)通过链路相连。左侧模块内的代理包含一个主接口,右侧模块内的代理包含一个从接口。带有主接口的代理向带有从接口的代理发起请求。如果需要,从接口端的代理可能和更底层的存储器进行通信。在获取到请求的数据或权限之后,从接口端的代理则通过消息响应原始请求。 此外, TileLink 还支持多种网络拓扑。具体来说,如果将代理抽象为图论中的节点,而将链路抽象为从主接口指向从接口的有向边,那么任何有能被描述为有向无环图(DAG)的拓扑结构都可以被支持。下图展示了一个典型的拓扑结构。该拓扑中的交换器 (Crossbar)和缓存 (Cache) 模块都包含一个兼有主接口 (右端) 和从接口 (左端) 的代理节点。 优先级通道每个网络链路中,TileLink 协议定义了五个逻辑上相互独立的通道,代理可通过它们传递消息。为了避免死锁,TileLink 强制规定了这五个通道上传输消息的优先级。 大部分通道包含控制传输的信号以及实际数据的副本。通道上消息的传递是单向的,主向从接口传送消息,或从向主接口传送消息。下图标明了五个通道的方向。 任何访存操作都需要两个最基本的通道:
最高协议兼容层 TL-C 额外包含另外三个通道,具备管理数据缓存块权限的能力:
各个通道传递消息的优先级顺序是 A << B << C << D << E 。设置优先级保证了消息在TileLink 网络的传输过程中不会进入路由环路或是资源死锁。换句话说,代理间消息在所有通道上的传输过程仍然保持为有向无环图。这对 TileLink 保证无死锁来说是一个必要的特性。 TileLink Cached(TL-C)TL-C是通过给主代理(master agent)提供缓存共享数据块副本的方式构建起来的,依据具体实现过程中定义的一致性协议,这些本地副本可以保证一致性。换句话说,TL-C提供了一个基础的代理传输网络,指令与数据在网络中按照一套固定的规范进行传输,至于具体的一致性实现,需要设计者在理解了传输网络工作原理的基础上,利用TL-C提供的可用基本操作,消息和权限自行搭建。 TL-C一致性树所有基于Tilelink的一致性协议都由一系列操作组成,通过这些操作,可以完成读写数据块权限的转变。在代理响应访存指令后,对已缓存的副本执行操作之前,必须在网络中使用转换操作获得正确的权限。转换操作在网络上创建或删除副本,从而修改每个副本可以提供的权限。 代理中数据块副本的基本权限可以包括:None、Read或Read+Write。缓存架构中副本可用的权限取决于缓存层次结构中副本的当前存在情况,如下所述: 对于任何给定的地址,在给定主端和拥有该地址范围的从端之间都只会存在一个具体的路径。在TileLink DAG网络中,所有这些路径都覆盖会形成一个树,根节点上仅有一个从端节点。对于每个地址,此树包含所有针对该地址的操作执行的路径。如果我们省略了所有不能缓存数据的代理,那么就会留下一个描述所有可能缓存该地址数据的缓存代理位置的树。 在逻辑时间的任意时刻,这些代理的某些子集真正包含缓存数据的副本。这些代理形成了一致性树。TileLink一致性协议要求树在响应内存访问操作时进行提权(Grow)和降权(Shrink)操作。图中的每个节点都属于树中的位置,分为以下四类:
下图列举了几个覆盖在单一TL网络上的一致性树(TT:Trunk Tip;T:Trunk;B:Branch)
从图中可以做出如下几点分析,以帮助我们更好地理解这棵树的一致性维护方法:
下表描述哪种状态下的节点上可以执行哪些访问操作,其定义与其在树中的位置相关。另外,协议可以基于这些基本状态定义具体的一致性状态
TileLink总线规范中定义了更多具体细节,将在后续篇幅中展开论述。 三、ARM系列总线概述ARM公司的所有关键总线协议均基于AMBA(The Standard for On-Chip Communication)规范。AMBA,全称为Advanced Microcontroller Bus Architecture,是一个标准开放的,针对SoC设 计中片上互连的总线标准。AMBA总线的推出有助于开发具有大量控制器和具有总线结构的外围设备的多处理器设计。AMBA总线自从1996年由ARM提出之后,经过数十年的发展已经广泛运用于ASIC以及SoC设计之中,例如现今智能手机的SoC之中。到目前为止,AMBA总线已经发展至第五代,并在继续发展演进之中。 AMBA规范具有如下所示的特点:
下图是一张AMBA系列总线的概览图: 从图中可以看出,AMBA几乎每一代都会对原有的总线协议进行改进,同时推出具有全新针对性扩展(ACE)或者全新组织方式(CHI)的新一代总线协议。本文挑选AXI、ACE和CHI三种总线协议进行简要介绍。 AXI随着集成电路技术的发展,人们对SoC的性能要求越来越高,导致片上总线的带宽需求和时延需求也不断增加。AHB总线虽然可以使用户不断增加总线位宽来达到性能的要求,但是在如今对高能效比的极致要求下,使用极小的总线数据位宽和极低的总线时钟频率来实现数据的高吞吐量已经成为现今的发展趋势。为了顺应这种趋势,ARM公司于2003年推出了第三代AMBA总线协议簇,第一次引入了AXI(Advanced Extensible Interface)协议来满足更高数据带宽的应用需求。到现今,AXI协议已经发展到了第五代。AXI协议具有以下特征:
AXI有五个独立的事务通道,分别是:
AXI的五个通道是单向的,且读写地址和读写数据通道各自独立,这样做的好处是便于单独优化某个通道,而且当经过复杂的片上网络时,能够优化时序减少延迟。 对于读操作,主端(master)通过AR通道发送读事务地址,从端(slave)通过R通道返回给主端所需要的数据,如下图: 对于写操作,主端通过AW通道发送写事务地址,并通过W通道把数据发送给从端,而从端接收到数据后,需要通过B通道返回一个响应给主端,全过程如下: AXI内另一个较为重要的就是发送方/接收方的Valid/Ready握手机制,此处简单介绍一下: AXI协议内,为了避免死锁,发送方(发送地址/数据的一方,与主端从端概念有区别)在传输时天然受限,发送方的Valid信号必须等待逻辑靠前的信号全部完成后才能置高,且置高后不能主动置低;接收方天然自由,接收方的ready信号置高时机无限制,置高后就算没有握手成功就可主动置低,拥有较高的自由度。这一点同样体现在逻辑设计方面:发送方的逻辑不能写成等对方ready了才能valid,但是接收方的逻辑可以写成等对方valid了我再ready。 AXI支持突发(burst)传输,乱序(out-of-order)传输,大幅提高了数据吞吐能力,在满足高性能要求的同时,也减少了功耗。AXI的突发传输支持FIXED/INCR/WRAP类型,AXI4的INCR支持1-256突发传输,另两种类型支持1-16的突发传输。除此之外,AXI提供窄传输(Narrow transfers)、非对齐传输(unaligned transfer)和混合大小端(mixed-endian)传输等特殊传输类型的解决方案。 总而言之,AXI是一个功能齐全,性能强大的成熟片内总线协议,目前在超高性能和复杂SoC设计方面具有广泛的应用。 ACEACE是AXI Coherency Extensions的缩写,顾名思义,ACE就是AXI加上支持一致性的扩展。上一小节介绍的AXI总线协议纵然功能全面且强大,但是却完全不支持缓存一致性的维护,于是ACE诞生了,它在AXI协议的基础上增添了硬件层面的系统级一致性维护,允许系统组件直接共享内存,而不需要软件执行软件缓存维护以维持缓存一致性。 ACE协议通过如下方式进行拓展:
此外,ACE还提供屏障(Barrier)事务以及分布式虚拟内存(DVM——Distributed Virtual Memory)的支持,此处篇幅受限,不再详细展开。 让我们将关注重点移回ACE协议的缓存模型上,ACE协议要求,如果cache中的一个缓存行是整个系统中的唯一拷贝,那么拥有这个缓存行的处理器单元可以修改数据,同时不必通知其它主端;如果这个缓存行数据在整个系统中存在其它拷贝(副本),则拥有这个缓存行的处理器在修改数据的同时,必须通知其它处理器知晓这个改动。所以,对于缓存行来说,记录其当前状态至关重要。为此,在ACE里面提出如下所示的缓存模型:
ACE同时引入了共享域的概念,将处理器划分为多级域,每级域内需要共享一致性状态。对于inner域的所有处理器来说,一个处理器的操作会被这个域内其它处理器看到,但是不会影响别的inner域;对于outer域,可以由多个inner域组成,如果一个处理器的操作影响到outer域,那么这个操作会被outer域包含的所有inner域看到;system也比较简单了,就是整个系统。定义这么多域的作用,其实就是要确定某一个操作,需要广播到哪一个层次。 ACE增加了三个snoop通道(addr/resp/data)方便主端随时等待并响应一致性事务请求,协议采用集中控制的方式,每当主端发起读写事务时,Interconnect(ICN)会接收并包揽余下的任务(例如查询其它cache是否存在数据共享,如果存在则需要获取数据,如果不存在则需要去下级存储中查询等等),处理完毕后再将结果返回给发起事务的主端。协议拥有十余条复杂的cache事务,具体每种事务对于缓存行有何种影响则更加繁琐,读者若想了解详细的传输依赖,可以深入ACE spec探究。 CHICHI(Coherent Hub Interface)协议是AMBA的第五代协议,可以说是ACE协议的进化版,将所有的信息传输采用包packet的形式来完成,packet里分各个域段传递不同信息,本质还是用于解决多个CPU(RN)之间的数据一致性问题。基于CHI协议的系统架构可以包含独立CPU、处理器簇、图形处理器、memory控制器、I/O桥、PCIe子系统和CHI互联线,该架构主要有以下关键特性:
与以往的总线协议不同,CHI开始提出了协议分层。CHI层次按功能可以划分为:协议层(Protocal)、网络层(Network)、链路层(Link),分别对应Transaction、Packet和Flit三级信号。其中Transaction代表一次单独的读写事务;Packet是互联端点(Nodes)间的传输粒度,每个packet包含有源和目的节点的ID来保证在ICN上独立路由;Flit是最小流控单位,一个packet可以由一个或多个flits组成,对于同一个packet的所有flits在互连上传输必须遵循同样的路径。 CHI协议并不规定拓扑互连,但是该规范中包含了某些与拓扑相关的优化,以使电路实现更有效。目前常用的SoC互连有三种方式:
CHI协议中,产生、传递和接收事务的基础单元为节点(与TileLink相似),CHI的节点分为四大类:HN(Home Node)用于接收来自RN的协议transaction,完成相应的一致性操作并返回一个响应。RN(Request Node)产生协议transaction给互连,包含读和写。SN(Slave Node)用于接收来自HN的请求,完成相应的操作并返回一个响应。MN(Misc/Miscellaneous Node)用于接收来自RN的DVM操作,完成相应的操作并返回一个响应。CHI协议的一个典型连接如下图: CHI协议规定,系统中的每一个节点有且只有一个唯一的节点号(Node ID),用于帮助packets记录流动时的路径信息。 另一个值得关注的重点是CHI的coherency model,下图所示为CHI包含三个master组件的典型一致性系统,每个master组件包含一份loacl cache和一致性协议节点。CHI协议允许memory数据存放在一处或多处master cache当中。
CHI协议定义的cache state相较于ACE新增了Full/Partial两种缓存行状态,代表cacheline中全部/部分bytes有效。CHI的7状态缓存模型如下: 可以看出,相比于ACE,CHI多出了下面两个状态:
UCE态的获取:
UDP态的获取:
对于每种transaction对各节点数据大小和缓存状态的影响,可以参考CHI spec的第四章,这里就不一一列举了。 借助节点组成的拓扑网络,CHI协议将事务分割成packet,在网络中乱序传输。ICN在协议中依旧有着非常重要的作用,包括协调所有传输请求,内部节点HN处理所有事务等。CHI同时提供了超发请求处理、同一缓存行的事务排序、多核系统的操作保序等拓展功能。由于CHI的完整spec近几年才完全公开,业界对其的探索实践还并不成熟,但不可否认的是,CHI是一个充满活力和潜力的总线协议,在ACE协议的基础取得了较大的突破。 四、对比TileLink与上述三种AMBA总线协议的特点比较如下所示:
TileLink最初是SiFive公司为Rocket Chip设计的总线架构,设计人员在考察了当时业界使用广泛的几种总线协议,例如Silicore公司提出的Wishbone总线,以及使用最为广泛的ARM的AMBA系列总线(AHB/AXI/ACE/CHI)之后,认为这些总线协议都不能完全满足他们的预想。在他们看来,一个优秀且完备的RISC-V总线协议必须具有上表所示的所有特性。 AHB显然不符合要求,它虽然是开源协议,但是并不易于实现,且在缓存一致性方面没有支持;Wishbone总线是开源的,虽然在片上高速模块互联方面表现较为突出,实现也较为简单,但是和AHB一样没有缓存一致性方面的支持;AXI也存在和Wishbone相同的问题;ACE是ARM基于AXI做的一致性拓展(Coherency Extensions)版本,虽然支持缓存一致性,但是该协议的实现较为复杂,且尚不支持多级缓存一致性维护,也无法在片外进行使用,不利于长期发展;CHI总线较为特殊,它是AMBA的第五代协议,是ACE协议的进化版,支持缓存一致性,首次提出了协议分层技术,数据改为包传输等等,总体表现相较与ACE有很大提升,但是当SiFive评估各总线可行性时,在获取CHI协议的spec时受到了阻碍,最终没能成功获取,这也间接使他们下定了要自己开发一款总线协议的决心。 总而言之,TileLink是一款仍处于实验研究阶段的、轻量级的总线协议框架。类似精简指令集架构的诞生,TileLink在设计时注重轻便性与易实现性,抛弃了原有总线协议(例如ACE)的冗杂架构与事务,将总事务类型缩减至十余条,且将协议分为了三级扩展,视功能需求自行配置。TL总线协议与CHI较为相似,两者的事务处理主体均为节点,CHI协议拥有ICN总揽事务处理,TL也有Crossbar作为多节点的通路交互,但是两者对于具体一致性状态的维护和冲突处理的设计却大相径庭。 CHI对于众多事务与节点、缓存块之间的交互定义依旧非常复杂,但是TileLink却在大幅缩减交互项目和事务条数的情况下,很好地实现了预期的功能,这一点也可以从两种总线的spec页数看出(TL spec仅有100余页,但是CHI spec却多达500余页)。但是反过来说,AMBA系列的总线已经得到业界的广泛认可,较为成熟,而TileLink目前仍处于实验阶段,其轻量级总线的定义与ACE类似,但是设计理念却更加偏向于CHI,是一款颇具潜力的总线协议。 参考文献-[1]SiFive TileLink Specification
编辑于 2021-11-08 16:31
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:55:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |