
SiFive TileLink 总线协议(一、二、三)
记录一下 TileLink 总线协议的学习。 RISC-V 配 TileLink,原汤化原食了属于是:)。 1.8.1 版本奥。
1. 引言
TileLink 是一种芯片级互连标准,可为多个主设备提供对内存和其他从设备的一致的 (coherent) 内存映射访问。 TileLink 被设计用于片上系统 (SoC),以连接通用多处理器、协处理器、加速器、DMA 引擎以及简单或复杂的设备,它使用快速可扩展互连以提供低延迟和高吞吐量数据搬运。
1.1. 协议 Conformance 级别
译者注:Conformance 和 Coherency 的中文对应词组均为“一致性”。为了避免混淆,我们不对 Conformance 进行翻译。
TileLink 网络可以支持多种通信代理 (agent),每个代理都支持协议的不同子集。 TileLink 规范包括附加代理的三个 Conformance 级别,表明它们必须支持的协议子集如表 1 所示。
- TL-UL: TileLink Uncached Lightweight
- TL-UH: TileLink Uncached Heavyweight
- TL-C: TileLink Cached


当 TL-C 处理器代理与 TL-UL 设备代理通信时,处理器代理应避免使用更高级的功能,或者两者之间的网络中必须有一个 TL-C 到 TL-UL 适配器。
2. 架构
TileLink 协议是根据已连接的代理 (agent) 的图形定义的。这些代理通过链路 (link) 内的点对点通道 (channel) 发送和接收消息 (message),使得 TileLink 协议能够在共享地址空间上执行操作 (operation)。
2.1. 网络拓扑结构
代理对通过链路连接。每条链路的一端连接到一个代理中的 master 接口,另一端连接到另一个代理中的 slave 接口。具有 master 接口的代理可以请求具有 slave 接口的代理执行内存操作,或请求传输和缓存数据副本的权限。具有 slave 接口的代理管理对一系列地址的许可和访问,其中它代表来自 master 接口的请求执行内存操作。
图 1 显示了一个 TileLink 网络,该网络由 master 接口和 slave 接口之间的一条链路组成,具有两个通道。为了在共享内存上执行操作, master 设备在请求通道上向 slave 设备发送请求消息,并在响应通道上等待确认消息。


TileLink 支持多种网络拓扑,但须遵守第 5.3 节中指定的限制。图 2 说明了这种拓扑的示例,其中两个模块( crossbar 和缓存)具有代理,代理在其右侧具有 master 接口,在其左侧具有 slave 接口。


需要注意的是,单个硬件模块可以包含多个独立的 TileLink 代理。图 3 显示了一个示例, crossbar 中下面那个代理用于在链路之间路由数据,上面那个代理用于被其他模块访问配置状态。


2.2. 通道优先级
在每个网络链路中, TileLink 协议定义了逻辑上独立的通道,代理可以通过这些通道发送消息。为了避免死锁, TileLink 在通道消息中指定了一个必须严格执行的优先级。大多数通道都包含事务控制信号以及交换数据的总线。通道是定向的,因为每个通道都将消息从 master 接口传递到 slave 接口,或者从 slave 接口传递到 master 接口。图 4 说明了五个通道的方向性。


执行内存访问操作所需的两个基本通道是:
- 通道 A:传输对指定地址范围执行操作、访问或缓存数据的请求。
- 通道 D:向原始请求者发送数据响应或确认消息。
最高协议 conformance 级别 (TL-C) 添加了三个额外的通道,这些通道提供了管理缓存数据块权限的能力:
- 通道 B:发送请求,要求在 master 代理缓存的地址处执行操作,访问或写回缓存的数据。
- 通道 C:传输数据或确认消息以响应请求。
- 通道 E:传输来自原始请求者的缓存块传输的最终确认,用于序列化。
跨通道消息的优先级是 A < B < C < D < E,按照优先级递增的顺序。优先级确保流经 TileLink 网络的消息永远不会进入路由或等待循环。换句话说,通过所有代理之间的所有通道的消息流保持非循环。这是 TileLink 保持无死锁的必要属性;详见第 5 节。
2.3. 地址空间属性
属性根据操作所针对的地址范围限制允许将哪些消息注入 TileLink 网络。可能归属于地址空间的属性包括: TileLink conformance 级别、内存连贯性 (consistency) 模型、可缓存性、FIFO 排序要求、可执行性、特权级别和任何服务质量 (QoS) 保证。
依靠属性, TileLink 将确定在特定地址上可能进行哪些操作的关注点与消息本身的内容分开。通过将确定操作是否合法的工作预先加载到发送发起请求消息的代理上,TileLink 能够避免来自其通道内容的各种信号。
用于描述哪些地址范围具有哪些属性以及这些属性又如何控制消息注入的特定机制超出了本文档的范围。
3. 信号描述
本章列出了 TileLink 五个通道使用的所有信号,汇总在表 2 中。结合每个通道的方向,表 3 中的信号类型决定了信号方向。这些信号的宽度由表 4 中描述的值参数化。






3.1. 信号命名约定
除时钟和复位信号外, TileLink 信号名称由通道标识符 (a-e) 后跟下划线和信号名称组成(在以下小节中列举)。
对于具有多个 TileLink 接口的设备,建议在所有 TileLink 信号名称前加上一些描述性标记和下划线。例如,a_opcode 变为 gpio_a_opcode。
3.2. 时钟、复位和电源
TileLink 是一种同步总线协议。 TileLink 链路上的 master 接口和 slave 接口必须共享相同的时钟、复位和电源。但是,拓扑内的不同链路可能具有不同的时钟、复位和电源。


3.2.1. 时钟
每个通道在时钟的上升沿对其信号进行采样。输出信号可能仅在时钟上升沿后发生变化。
3.2.2. 复位
在 deassert 复位之前, a_valid、 c_valid 和 e_valid 必须由 master 驱动为低电平,而 b_valid 和 d_valid 必须由 slave 驱动为低电平。在复位为低电平的时钟的第一个上升沿之后,有效信号可能被驱动为高电平。有效信号必须在复位时被驱动为低至少 100 个周期。
Ready、 control 和 data 信号在复位期间可以任意取值。


3.2.3. 跨电源域或时钟域
禁止 TileLink 链路的一侧断电,而另一侧通电。
如果 TileLink 必须跨电源域或时钟域,则需要一个 TileLink 到 TileLink 的适配器,它在一个域中充当 slave 设备,在另一个域中充当 master 设备。然后,该适配器的两个接口可以分别安全地上电、起时钟和进行复位。
强烈建议跨域部分与 SoC 的其余部分仔细协调,以确保在跨域的某一方复位或下电时没有未响应的 TileLink 请求。如果 TileLink 消息丢失或重复,可能会导致整个 TileLink 总线死锁。
3.3. 通道 A(强制)
通道 A 从 master 接口流向 slave 接口,携带发送到特定地址的请求消息。此通道被所有 TileLink conformance 级别使用,并且是强制性的。


译者注:手册中有笔误, "a_code" 应当改为 "a_opcode"。
3.4. 通道 B(仅限 TL-C)
通道 B 从 slave 接口流向 master 接口,携带请求消息发送到特定 master 设备持有的特定缓存数据块。此通道由 TL-C conformance 级别使用,并且在较低级别中是可选的。


3.5. 通道 C(仅限 TL-C)
通道 C 从 master 接口流向 slave 接口。它可以携带对发送到特定缓存数据块的通道 B 请求的响应消息。它还用于自愿写回脏缓存数据。此通道用于 TL-C conformance 级别,在较低级别是可选的。


3.6. 通道 D(强制)
通道 D 从 slave 接口流向 master 接口。它携带发送到特定地址的通道 A 请求的响应消息。它还带有对通道 C 自愿写回的确认。该通道被所有 TileLink conformance 级别使用,并且是强制性的。


3.7. 通道 E(仅限 TL-C)
通道 E 从 master 接口流向 slave 接口。它携带接收通道 D 响应消息的确认,用于操作序列化。此通道用于 TL-C conformance 级别,在较低级别是可选的。

