Interface and Interconnect implementation

This commit is contained in:
2022-05-31 16:09:53 +02:00
parent 32dddebd11
commit 171ff9647a

View File

@@ -182,5 +182,21 @@ The implementation of a snooping protocol is a candidate for future improvements
\subsection{Trace Player Interface}
\label{sec:traceplayer_interface}
Previously, initiators could only represent one thread when connected to DRAMSys.
This, however, conflicted with the goal to develop an trace player module that internally composes of multiple threads that communicate with each other and initiate transactions to DRAMSys independently.
To be able to couple such hierarchical initiator modules with DRAMSys, a new trace player interface was developed.
The \texttt{TrafficInitiatorIF} interface requires to implement the \texttt{bindTargetSocket()} method for every top-level initiator.
A top-level initiator can either be a single thread, like in previous versions, or a more complex hierarchical module with many internal threads.
This makes it possible to polymorphically threat all initiator modules like this interface and connect them to DRAMSys with the provided bind method.
\subsection{Interconnect}
\label{sec:interconnect}
As already seen in figure \ref{fig:dbiplayer_with_caches}, interconnection modules are needed to connect the caches with each other.
While the implementation of the \textit{MultiCoupler} component is trivial as it only passes the transactions from its so-called target multi-socket to its initiator multi-socket, the \textit{MultiSimpleCoupler} is more complex because it has to internally buffer transactions.
In order to understand why this buffering needed, consider scenario where the L3 cache applies back pressure to one L2 cache.
The L2 cache is not allowed to send further requests but since the target socket of the L3 cache is occupied, this also applies to all other other L2 caches.
This information, however, is not propagated to the other caches, leading to an incorrect behavior.
To solve this problem, the MultiSimpleCoupler only forwards requests to the L3 cache when it is able to accept them.
If this is not the case, the request gets internally buffered and forwarded when an earlier request is being completed with the \texttt{END\_REQ} phase.