Bericht: Konzept und Umsetzung

This commit is contained in:
Matthias Biermann
2025-02-15 13:35:57 +01:00
parent e4170a43c6
commit c761e6964f
2 changed files with 81 additions and 8 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 49 KiB

+81 -8
View File
@@ -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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%