Interface and Interconnect implementation
This commit is contained in:
@@ -182,5 +182,21 @@ The implementation of a snooping protocol is a candidate for future improvements
|
|||||||
\subsection{Trace Player Interface}
|
\subsection{Trace Player Interface}
|
||||||
\label{sec:traceplayer_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}
|
\subsection{Interconnect}
|
||||||
\label{sec: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.
|
||||||
|
|||||||
Reference in New Issue
Block a user