Loading

Diplomatic Design Patterns: A TileLink Case Study

文章地址: Diplomatic Design Patterns: A TileLink Case Study (carrv.github.io)

一,简介

Diplomacy是一种基于Scala语言的编程框架。在Chisel硬件描述语言构建的CPU核心设计中,单纯使用Chisel无法完成复杂的连线和参数传递工作。因此开发了Diplomacy用于辅助SOC架构和集成。

相关代码在:rocket-chip/src/main/scala/diplomacy at master · chipsalliance/rocket-chip (github.com)

其主要在设计中承担以下内容:

  • 在整个SOC范围内对每一个具有互联关系的模块之间的进行参数传递,协商或修改。这些参数包含但不限于:线宽,访问地址,访问权限,协议类型,方法。
  • 对于模块间的互联逻辑进行例化。但是需要指出的是,用户必须通过对Diplomacy提供的抽象成员进行实例化的方式提供实际的连线类型和宽度来进行连线。实例化的类型可以是一种通用总线协议例如TileLink或者AXI4,或者是中断甚至是时钟和复位信号。
  • 实例化位于每一个子模块内部的Chisel代码,产生模块内的逻辑电路。
  • Diplomacy实际上延后了每一个Chisel模块的例化时刻,在这之前进行参数协商和传递工作。每个模块有自己需要认可的参数,例如总线位宽等。

Diplomacy is a parameter negotiation framework for generating parameterized protocol implementations. 

TileLink is a highly- parameterized chip-scale shared-memory interconnect standard.

The implementation of TileLink in the Rocket chip generator exploits Diplomacy to specialize the interconnect to different levels of protocol conformance.

二,Diplomacy 

基于diplomacy的chisel设计在编译生成时分为两步:第一步进行参数协商,并生成拓扑图,每个节点自动协商每条边的值。第二步是进行具体的硬件生成。以此保证互联参数的正确性。

参数协商本身由两个独立的过程组成,1,从源节点开始,参数传递直到到达所有汇节点。2,从所有汇节点开始,另一些参数传递直到源节点,因此每条边接受到两组参数。

因此,该协议的基础是用来表示电路连接关系的拓扑图。节点(Nodes)是设计中需要用到互联参数来生成具体电路的模块。边(edge)表示主从节点的配对,因此其有源节点和汇节点,并承担参数协商的作用。一个模块可以具有多个节点,并且一个节点可以具有多条边。协商参数可以从节点指定或者从节点间的协商中得到。diplomacy希望用户描述一个由nodes组成的有向无环图。

以rocketchip的diplomatic为例,

 注意到在一个典型的rocketsystem中tilelink和axi4协议均有所采用。axi4用于外部通信,而tilelink用于内核内部。故examplerocketsystem的接口是axi接口。

一个例子:(3条消息) rocket diplomacy学习-CSDN博客

三,Tilelink

TileLink 协议是根据已连接的代理 (agent) 的图形定义的。这些代理通过链路 (link) 内的点对点通道 (channel) 发送和接收消息 (message),使得 TileLink 协议能够在共享地址空间上执行操作 (operation)。其缓存一致性由MOESI类似的协议来保证,下图是一个tilelink网络拓扑图,其与diplomacy网络拓扑十分接近

 而一个tilelink接口有五个channel,每个channel基于解耦合的ready-valid握手协议。代理对通过链路连接。每条链路的一端连接到一个代理中的 master 接口,另一端连接到另一个代理中的 slave 接口。具有 master 接口的代理可以请求具有 slave 接口的代理执行内存操作,或请求传输和缓存数据副本的权限。具有 slave 接口的代理管理对一系列地址的许可和访问,其中它代表来自 master 接口的请求执行内存操作。如下所示:

 为了避免死锁, TileLink 在通道消息中指定了一个必须严格执行的优先级。大多数通道都包含事务控制信号以及交换数据的总线。通道是定向的,因为每个通道都将消息从 master 接口传递到 slave 接口,或者从 slave 接口传递到 master 接口。优先级A « B « C « D « E。

执行内存访问操作所需的两个基本通道是:

  • 通道 A:传输对指定地址范围执行操作、访问或缓存数据的请求。
  • 通道 D:向原始请求者发送数据响应或确认消息。

最高协议 conformance 级别 (TL-C) 添加了三个额外的通道,这些通道提供了管理缓存数据块权限的能力:

  • 通道 B:发送请求,要求在 master 代理缓存的地址处执行操作,访问或写回缓存的数据。
  • 通道 C:传输数据或确认消息以响应请求。
  • 通道 E:传输来自原始请求者的缓存块传输的最终确认,用于序列化。

 下表是tilelink五个channel的描述汇总:

 下表是tilelink信号类型,其决定了信号的流通方向:

 下表是tilelink每条链路的参数:

 下面分析tilelink必须实现的A和D channel。

 通道 A 从 master 接口流向 slave 接口,携带发送到特定地址的请求消息。

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

参考资料:

Diplomacy机制详解(二)框架 - 知乎 (zhihu.com)

(3条消息) rocket diplomacy学习-CSDN博客

rocket-chip/src/main/scala/diplomacy at master · chipsalliance/rocket-chip (github.com)

Seventh Workshop on Computer Architecture Research with RISC-V (CARRV 2023) | carrv.github.io

SiFive TileLink 总线协议(一、二、三) - 知乎 (zhihu.com)

posted @ 2023-04-18 21:57  Haowen_Zhao  阅读(224)  评论(0编辑  收藏  举报