Home TileLink笔记(一):架构与信号描述
Post
Cancel

TileLink笔记(一):架构与信号描述

笔记基于1.7.1-draft版本,但TileLink最新版本为1.8.1,最新版本的spec可以在这里下载。笔记中的中文译文引自刘鹏等人翻译的《SiFive TileLink规格书1.7.1草案预发布版本(中文)》。

TileLink是一个芯片级互连标准,允许多个主设备,以支持一致性的存储器映射方式访问存储器和其他从设备。TileLink的设计目标是为片上系统提供一个具有低延迟和高吞吐率传输的高速、可扩展的片上互连方式,来连接通用多处理器、协处理器、加速器、DMA以及各类简单或复杂的设备。总结来说,TileLink是:

  • 免费开放的紧耦合、低延迟的 SoC 总线

  • 为 RISC-V 设计,也支持其他 ISAs

  • 提供物理寻址、共享内存的系统

  • 可用于建立可扩展的、层次化结构的和点对点的网络

  • 为任意数量的缓存或非缓存主设备提供一致性的访问

  • 支持从单一简单外设到高吞吐量的复杂多外设的所有通讯需求

同时还具备以下重要的特性:

  • 缓存一致性的内存共享系统,支持兼容MOESI的一致性协议

  • 对任何遵守该协议的SoC系统来说,可验证确保无死锁

  • 使用乱序的并发操作以提高吞吐率

  • 使用完全解耦的通讯接口,有利于插入寄存器来优化时序

  • 总线宽度的透明自适应和突发传输序列的自动分割

  • 针对功耗优化的信号译码

TileLink定义了三个从简单到复杂的的协议扩展级别,如下图所示。

1-1 TileLink协议扩展级别

架构

Tilelink 协议适用于在代理(agent)互联拓扑图中,完成消息(message)的传递。共享地址空间的代理经由点对点的通道(channel)收发消息,来完成操作(operation),该通道被称为链路(link)。

  • 操作(operation):在特定地址范围内,改动存储数据的内容、权限或是其在多级缓存 中的存储位置。

  • 代理(agent):在协议中,为完成操作负责接收、发送消息的有效参与者。

  • 通道(channel):一个用于在主(master)接口和从(slave)接口之间传递相同优先级消息的单向通信连接。

  • 消息(message):经由通道传输的控制和数据信息。

  • 链路(link):两个代理之间完成操作所需的通道组合。

网络拓扑

下图展示了最基本的TileLink网络操作,两个模块通过链路连接。

1-2 最基本的TileLink操作

TileLink支持多种网络拓扑。具体来说,如果将代理抽象为图论中的节点,而将链路抽象为从主接口指向从接口的有向边,那么任何有能被描述为有向无环图的拓扑结构都可以被支持。下图展示了一个典型的拓扑结构。该拓扑中的交换器(Crossbar)和缓存(Cache)模块都包含一个兼有主接口和从接口的代理节点。

1-3 一个更复杂的TileLink网络拓扑

1-4 包含两个代理的交换器,下侧代理有多个主和从接口,上侧代理只有一个从接口,用于配置交换器

通道优先级

TileLink协议定义了五个逻辑上相互独立的通道,下图标明了五个通道的方向。

1-5 在任意一对代理之间构成一条TileLink链路的五个通道

任何访存操作都需要两个最基本的通道:

  • 通道A:传送一个请求,访问指定的地址范围或对数据进行缓存操作。

  • 通道D:向最初的请求者传送一个数据回复响应或是应答消息。

最高协议兼容层TL-C额外包含另外三个通道,具备管理数据缓存块权限的能力:

  • 通道B:传输一个请求,对主代理已缓存的某个地址上的数据进行访问或是写回操作。

  • 通道C:响应通道B的请求,传送一个数据或是应答消息。

  • 通道E:传输来自最初请求者的缓存块传输的最终应答,用于序列化。

各个通道传递消息的优先级顺序是 A « B « C « D « E,设置优先级保证了消息在TileLink网络的传输过程中不会进入路由环路或是资源死锁。

信号描述

本节用表格的形式介绍了TileLink五个通道使用到的所有信号,汇总在第一张表。结合每个通道的方向,第二张表的信号类型决定了信号的方向。这些信号的宽度由第三张表描述的值进行参数化。

1-6 TileLink信号

需要注意的是,第二张表中的F类型信号在最新版的TileLink规范中已被移除。

通道A(强制)

通道A的传输方向是从主接口到从接口,携带请求消息发送到一个特定的地址。

1-7 通道A信号

通道B(TL-C独有)

通道B的传输方向是从接口到主接口,用于向保存一个特定缓存块的主代理发送请求消息。

1-8 通道B信号

通道C(TL-C独有)

通道C的传输方向是主接口到从接口,携带对通道B请求作为响应的消息发送给一个特定缓存数据块,也被用于自发地(voluntarily)写回脏缓存数据。

1-9 通道C信号

通道D(强制)

通道D的传输方向是从接口到主接口,携带对通道A发送到特定地址请求作出响应的消息,还携带了对于通道C自发写回的应答。

1-10 通道D信号

通道E(TL-C独有)

通道E的传输方向是主接口到从接口,携带是否收到通道D响应消息的应答信号,用作操作序列化。

1-11 通道E信号

This post is licensed under CC BY 4.0 by the author.

《内存一致性与缓存一致性》笔记(九):异构系统的内存一致性与缓存一致性

TileLink笔记(二):序列化、死锁避免、操作与消息