-
Notifications
You must be signed in to change notification settings - Fork 6
TileLink Introduction
TileLink is a chip-scale interconnect providing multiple masters with access to memory and other slave devices.
A TileLink network may support a mix communicating agents, each supporting different subsets of the protocol.
The TileLink specification includes three conformance levels for attached agents, which indicates which subset of the protocol they must support. These are:
- TileLink Uncached Lightweight (TL-UL)
- TileLink Uncached Heavyweight (TL-UH)
- TileLink Cached (TL-C)
Agent: An active participant in the protocol that sends and receives messages in order to complete operations.
Channel: A one-way communication connection between a master interface and a slave interface carrying messages.
Message: A set of control and data values sent over a particular channel
Link: The set of channels required to complete operations between two agents.
This figure shows a TileLink network consisting of a single link between a master interface and a slave interface, with two channels. To perform operation on a memory, the master sends a request message on the request channel to the slave and awaits an acknowledgement message on the response channel.
Pairs of agents are connected by links. One end of each link connects to a master interface in one agent, and the other end connects to a slave interface in the other agent.
The agent with the master interface can request the agent with the slave interface to perform memory operations.
Fig2.2: The five channels that comprise a TileLink link between any pairs of agents. |
Within each network link, there are five independent channels over which messages can be sent by the agents.
Channels are directional, in that each passes messages either from the slave interface to the master interface or from the master interface to the slave interface.
The fig2.2 illustrates the directionality of the channels.
The two basic channels required to perform memory operations are:
Channel A: Transmits a request that an operation be performed on a specified address, accessing or writing the data.
Channel D: Transmits a data response or acknowledgement message to the original requestor.
For TileLink-UL we need only these two channels so we will not be discussing the other channels here.
For more information about other channels read the complete spec here: (https://sifive.cdn.prismic.io/sifive%2Fcab05224-2df1-4af8-adee-8d9cba3378cd_tilelink-spec-1.8.0.pdf)
There are two types of operations available to the agents in TL-UL. Both are memory access operations:
Get operation: Read some amount of data from backing memory.
Put operation: Write some amount of data to backing memory.
In total there are three request message types and two response message types related to memory access operations in TL-UL.
Fig2.3: Summary of TL-UL messages. |
Fig2.4: Waveform containing Get and Put operations. PutFullData writes 0xabcd; Get reads 0xabcd; PutFullData writes 0x0000; PutPartialData writes part of 0xffff; Get reads 0x00ff. |
The message sequence charts further clears the operations in an abstract way.
Fig2.5: Overview of the Get message flow. A master sends a Get to the slave on Channel A. Having read the data, the slave responds to the master with AccessAckData on Channel D. |
Fig2.6: Overview of the Put message flow. A master sends a PutFullData to the slave on Channel A. After writing the included data, the slave responds to the master with AccessAck on Channel D. |
This is enough to know about the TileLink protocol. We will dive deeper when we explain the implementation of TL-UL in the context of our Soc.