Bericht: Konzept und Umsetzung
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 49 KiB |
@@ -8,7 +8,7 @@ Der Speicherzugriff erfolgt über eine AXI-Master-Schnittstelle.
|
||||
|
||||
Nach Implementierung der Hardware erfolgt die Erstellung von Software, welche die Konfiguration und Steuerung des IP-Cores übernimmt.
|
||||
Der Softwarepart dieser Arbeit besteht aus zwei Programmen.
|
||||
Beim ersten handelt es sich um ein C-Programm, welches "bare metal" auf dem Mikroprozessor des hier verwendeten Entwicklungsboards \cite{ZyboBoard} ausgeführt wird.
|
||||
Beim ersten handelt es sich um ein C-Programm, welches ohne Betriebssystem auf dem Mikroprozessor des hier verwendeten Entwicklungsboards \cite{ZyboBoard} ausgeführt wird.
|
||||
Das zweite Programm wird im Kontext eines Linux Betriebssystems ausgeführt und beinhaltet die Implementierung eines ausführlichen Testprogramms, welches die Funktionalität des IP-Cores überprüft.
|
||||
|
||||
\subsection{Anforderungen}
|
||||
@@ -27,7 +27,7 @@ Die Anforderungen an das Projekt und an das zu erstellende IP umfassen folgende
|
||||
\item Möglichst hoher \textbf{Datendurchsatz} bei einer Frequenz von \qty{100}{\MHz}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{CRC- Theoretische Grundlagen}
|
||||
\subsection{CRC - Theoretische Grundlagen}
|
||||
|
||||
Der Cyclic Redundancy Check (CRC) ist ein Verfahren zur Fehlererkennung, welches in der Regel in digitalen Kommunikationssystemen eingesetzt wird.
|
||||
|
||||
@@ -52,7 +52,7 @@ Alle im Folgenden dargestellten Blockschaltbilder und VHDL-Quelldateien befinden
|
||||
|
||||
In Abbildung~\ref{fig:CRC_DMA_IP_Entity} ist die Entity des IPs \texttt{axi\_crc\_dma\_ip} dargestellt.
|
||||
|
||||
Die AXI Master Schnittstelle \emph{M\_AXI} dient zum Lesen und Schreiben der Daten aus dem Speicher.
|
||||
Die AXI-Master Schnittstelle \emph{M\_AXI} dient zum Lesen und Schreiben der Daten aus dem Speicher.
|
||||
|
||||
Über die \emph{S\_AXIL} Schnittstelle kann das IP gesteuert und konfiguriert werden.
|
||||
In Tabelle~\ref{tab:crc_dma_registers} sind die dafür zur Verfügung stehenden Register aufgelistet.
|
||||
@@ -123,11 +123,12 @@ Die Register \texttt{Read Address} und \texttt{Write Address} dienen zur Konfigu
|
||||
Die Register \texttt{Packet Size} und \texttt{Number Packets} dienen zur Konfiguration der Paketgröße und der Anzahl der zu verarbeitenden Pakete.
|
||||
Das IP arbeitet wort-weise.
|
||||
Es können keine einzelnen Bytes adressiert werden.
|
||||
Das heißt, das die konfigurierten Adressen word-aligned sein müssen und die Paketgröße und -anzahl in Worten angegeben werden müssen.
|
||||
Das heißt, dass die konfigurierten Adressen word-aligned sein müssen und die Paketgröße und -anzahl in Worten angegeben werden müssen.
|
||||
|
||||
Die Register \texttt{Polynomial}, \texttt{Initial Value}, \texttt{Final XOR} und \texttt{InOutReflected} dienen zur Konfiguration der CRC-Berechnung.
|
||||
Während eine CRC-Berechnung aktiv ist, dürfen diese Register nicht geändert werden, da es sich direkt auf die CRC-Berechnung auswirkt.
|
||||
|
||||
Mit dem Register \texttt{AxCache} können die Werte für die \emph{ARCache} und \emph{AWCache} Signale der AXI Master Schnittstelle konfiguriert werden.
|
||||
Mit dem Register \texttt{AxCache} können die Werte für die \emph{ARCache} und \emph{AWCache} Signale der AXI-Master Schnittstelle konfiguriert werden.
|
||||
Das Verändern dieses Registers ist nicht notwendig, da der Standartwert bereits eine korrekte Funktionalität des IPs gewährleistet.
|
||||
Es kann im Folgenden vernachlässigt werden.
|
||||
|
||||
@@ -141,6 +142,7 @@ Es kann im Folgenden vernachlässigt werden.
|
||||
\end{figure}
|
||||
|
||||
In Abbildung~\ref{fig:CRC_DMA_IP_ArchitectureInterfaces} ist der grundlegende Aufbau des IPs \texttt{axi\_crc\_dma\_ip} dargestellt.
|
||||
Es ist als Block-Design in Vivado unter der Bezeichnung \emph{axi\_crc\_dma\_ip} zu finden.
|
||||
Das IP besteht aus insgesamt vier Komponenten, die untereinander über AXI-Stream Schnittstellen kommunizieren und Daten weitergeben.
|
||||
In den folgenden Abschnitten werden die einzelnen Komponenten genauer beschrieben.
|
||||
|
||||
@@ -149,7 +151,7 @@ In den folgenden Abschnitten werden die einzelnen Komponenten genauer beschriebe
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.5\textwidth]{Blockschaltbilder/axis_dma_entity.png}
|
||||
\caption{Entity des der Komponente \texttt{axis\_dma}}
|
||||
\caption{Entity der Komponente \texttt{axis\_dma}}
|
||||
\label{fig:AxisDMA_entity}
|
||||
\end{figure}
|
||||
|
||||
@@ -166,8 +168,45 @@ Die FIFO-Speicher haben eine Tiefe von 256 Worten, um ausreichend Daten puffern
|
||||
Die Eingänge \emph{S\_AXIS\_NUM\_AVIL} und \emph{M\_AXIS\_NUM\_FREE} dienen zur Überwachung der Füllstände der FIFO-Speicher.
|
||||
Abhängig davon, ob genug Daten zum Schreiben oder genug freier Speicher zu Verfügung steht, werden die \emph{M\_AXI} Zugriffe gestartet.
|
||||
|
||||
Beim Ausgeben des Datenstroms über die \emph{M\_AXIS} Schnittstelle markiert das \emph{M\_AXIS\_TLAST} Signal das letzte Datenwort eines Pakets.
|
||||
|
||||
Die Komponente ist bei Schreib- und Lesebursts in der Lage, 4kB-Adressgrenzen zu erkennen und passt entsprechend die Burstlängen und die Adressen des nächsten Zugriffs an.
|
||||
|
||||
Die Schreib- und Leseburst sind in zwei separaten Prozessen bzw. endlichen Automaten aufgeteilt, die weitgehend unabhängig voneinander arbeiten.
|
||||
Daher kann die Komponente parallel Daten lesen und schreiben.
|
||||
|
||||
Des Weiteren hält diese Komponente alle AXIL-Register des IPs, wofür sie eine \emph{S\_AXIL} Schnittstelle besitzt.
|
||||
Die Register, welche zur Konfiguration der CRC-Berechnung dienen, sind als Ausgänge nach Außen geführt.
|
||||
|
||||
\subsubsection{CRC-Berechnungskomponente - axis\_crc}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.5\textwidth]{Blockschaltbilder/axis_crc_entity.png}
|
||||
\caption{Entity der Komponente \texttt{axis\_crc}}
|
||||
\label{fig:AxisCRC_entity}
|
||||
\end{figure}
|
||||
|
||||
In Abbildung ist die Entity der Komponente \texttt{axis\_crc} dargestellt.
|
||||
Die Eingänge \emph{initialValue}, \emph{polynomial}, \emph{finalXOR} und \emph{inOutReflected} dienen zur Konfiguration der CRC-Berechnung.
|
||||
Sie fließen in die Kombinatoriken der CRC-Berechnung ein.
|
||||
|
||||
Die Berechnung der CRC-Prüfsumme erfolgt wort-weise.
|
||||
Der Datenstrom von 32-Bit Worten wird über die \emph{S\_AXIS} Schnittstelle eingelesen und wieder über die \emph{M\_AXIS} Schnittstelle ausgegeben.
|
||||
Dabei kann maximal alle 3 Takte ein Wort eingelesen werden, welches in die Berechnung der CRC-Prüfsumme einfließt.
|
||||
Das Ende eines Datenpaketes wird durch das \emph{S\_AXIS\_TLAST} Signal markiert.
|
||||
Wenn die Komponente dieses Signal erhält, beendet sie die CRC-Berechnung und gibt das berechnete CRC-Wort über die \emph{M\_AXIS} Schnittstelle aus.
|
||||
Die CRC-Prüfsumme wird dadurch an den Datenstrom des ursprünglichen Datenpakets angehängt.
|
||||
Das \emph{LAST}-Signal wird nicht mehr beim letzten Wort des Datenpakets, sondern bei der CRC-Prüfsumme gesetzt.
|
||||
|
||||
Nachdem die CRC-Prüfsumme ausgegeben wurde, wird intern das CRC-Register wieder mit dem Initialwert initialisiert.
|
||||
Die Komponente ist dann wieder bereit, eine neue CRC-Prüfsumme zu berechnen.
|
||||
|
||||
Intern efolgt die Berechnung der CRC-Prüfsumme mithilfe eines endlichen Automaten.
|
||||
Um keine Timingprobleme zu verursachen, wurde so die Berechnung der CRC-Prüfsumme auf drei Takte aufgeteilt.
|
||||
|
||||
\subsection{AXI-CRC-DMA-IP}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=1.0\textwidth]{Blockschaltbilder/axi_crc_dma_ip_default_view.png}
|
||||
@@ -175,12 +214,37 @@ Die Komponente ist bei Schreib- und Lesebursts in der Lage, 4kB-Adressgrenzen zu
|
||||
\label{fig:CRC_DMA_IP_Architecture}
|
||||
\end{figure}
|
||||
|
||||
\subsubsection{CRC-Berechnung}
|
||||
In Abbildung~\ref{fig:CRC_DMA_IP_Architecture} ist die Gesamtarchitektur des IPs \texttt{axi\_crc\_dma\_ip} im Detail dargestellt.
|
||||
Da die Bestandteile des IPs in den vorherigen Abschnitten beschrieben wurden, erfolgt hier noch eine kurze Erläuterung der Gesamtarchitektur des CRC-DMA-IPs.
|
||||
|
||||
Die Komponente \texttt{axis\_dma} ist für das Lesen und Schreiben der Daten aus dem Speicher zuständig.
|
||||
Sie liest so viele Daten, wie zuvor über die AXIL-Register \texttt{Packet Size} und \texttt{Number Packets} konfiguriert wurde.
|
||||
Die Daten, die aus dem Speicher gelesen werden, werden als AXI-Stream-Datenstrom an das erste FIFO weitergegeben.
|
||||
Dieses puffert den Datenstrom und gibt ihn an die CRC-Berechnungskomponente \texttt{axis\_crc} weiter, wo aus dem Datenstrom eine bzw. mehrere CRC-Prüfsummen berechnet werden.
|
||||
Die CRC-Prüfsumme wird an den Datenstrom angehängt und über das zweite FIFO an die DMA-Komponente \emph{axis\_dma} zurückgegeben, um sie zurück in den Speicher zu schreiben.
|
||||
|
||||
Sobald alle Datenpakete verarbeitet und wieder in den Speicher geschrieben wurden, wird ein Interrupt ausgelöst, um die CPU zu informieren, dass die CRC-Berechnung abgeschlossen ist.
|
||||
|
||||
|
||||
\subsection{Einbindung in das Gesamtsystem} \label{sec:Einbindung}
|
||||
|
||||
\subsection{Einbindung in ein Gesamtsystem} \label{sec:Einbindung}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=1.0\textwidth]{Blockschaltbilder/axi_crc_dma_syn_default_view.png}
|
||||
\caption{Block-Design des Gesamtsystems: \emph{axi\_crc\_dma\_syn\_1}}
|
||||
\label{fig:GesamtsystemDefaultView}
|
||||
\end{figure}
|
||||
|
||||
Um das CRC-DMA-IP in ein Gesamtsystem einzubinden, müssen die AXI-Lite und Full-AXI Schnittstellen mit dem Processing System (PS) des Zynq-SoC verbunden werden.
|
||||
Im hier erstellten Gesamtsystem wurde die Full-AXI-Master Schnittstelle mit der ACP-Schnittstelle verbunden.
|
||||
Da Speicherzugriffe auf das SDRAM mit der ACP-Schnittstelle über den Cache erfolgen, sind die Daten so stets mit der CPU snychronisiert.
|
||||
|
||||
Die GP-Master-AXI Schnittstelle ist mit der AXIL-Slave Schnittstelle des IPs verbunden.
|
||||
Damit ist die CPU in der Lage, die Konfigurationsregister des IPs zu schreiben und das IP zu starten.
|
||||
|
||||
Die Interuptleitung des IPs ist mit dem Interrupt-Controller des Zynq-SoC verbunden.
|
||||
|
||||
Dieses Gesamtsystem kann nun synthetisiert und implementiert werden.
|
||||
|
||||
\newpage
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
@@ -194,6 +258,15 @@ Die Komponente ist bei Schreib- und Lesebursts in der Lage, 4kB-Adressgrenzen zu
|
||||
|
||||
\section{Testkonzept und Ergebnisse}
|
||||
|
||||
Das komplette Testkonzept dieser Arbeit kann in drei Teile unterteilt werden.
|
||||
|
||||
\subsection{Verifikation der CRC-Berechungskomponente}
|
||||
|
||||
Essentiell
|
||||
|
||||
\subsection{Verifikation des CRC-DMA-IPs}
|
||||
|
||||
\subsection{Verifikation des Gesamtsystems}
|
||||
|
||||
\newpage
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
Reference in New Issue
Block a user