diff --git a/Projektbericht/Bilder/Blockschaltbilder/axi_crc_dma_ip_default_view.png b/Projektbericht/Bilder/Blockschaltbilder/axi_crc_dma_ip_default_view.png index d66196c..46dfcc6 100644 Binary files a/Projektbericht/Bilder/Blockschaltbilder/axi_crc_dma_ip_default_view.png and b/Projektbericht/Bilder/Blockschaltbilder/axi_crc_dma_ip_default_view.png differ diff --git a/Projektbericht/Bilder/Blockschaltbilder/axis_crc_entity.png b/Projektbericht/Bilder/Blockschaltbilder/axis_crc_entity.png new file mode 100644 index 0000000..2494c7e Binary files /dev/null and b/Projektbericht/Bilder/Blockschaltbilder/axis_crc_entity.png differ diff --git a/Projektbericht/Bilder/Blockschaltbilder/axis_dma_entity.png b/Projektbericht/Bilder/Blockschaltbilder/axis_dma_entity.png new file mode 100644 index 0000000..8e30aae Binary files /dev/null and b/Projektbericht/Bilder/Blockschaltbilder/axis_dma_entity.png differ diff --git a/Projektbericht/Literaturverzeichnis.bib b/Projektbericht/Literaturverzeichnis.bib index e184fb3..f9919b5 100644 --- a/Projektbericht/Literaturverzeichnis.bib +++ b/Projektbericht/Literaturverzeichnis.bib @@ -1,44 +1,3 @@ -@incollection{FRENZEL201635, -title = {Chapter Four - 1-Wire}, -editor = {Louis E. Frenzel}, -booktitle = {Handbook of Serial Communications Interfaces}, -publisher = {Newnes}, -address = {Oxford}, -pages = {35-38}, -year = {2016}, -isbn = {978-0-12-800629-0}, -doi = {https://doi.org/10.1016/B978-0-12-800629-0.00004-8}, -url = {https://www.sciencedirect.com/science/article/pii/B9780128006290000048}, -author = {Louis E. Frenzel} -} - -@online{ccnblike, -title = {STM32 - 1-Wire protocol analysis \& Implementing of OneWire Protocol using UART peripheral and DMA}, -year = {2016}, -url = {https://cnnblike.com/post/stm32-OneWire/#43-principle-behind-simulating-1-wire-using-uart---rese}, -urldate = {2024-08-17}, -} - -@manual{stm32_rm, -title = {RM0351 Reference manual - STM32L47xxx, STM32L48xxx, STM32L49xxx and STM32L4Axxx advanced Arm®-based 32-bit MCUs}, -author = {{STMicroelectronics}}, -year = {2024}, -edition = {Rev 10}, -organization = {STMicroelectronics}, -url = {https://www.st.com/resource/en/reference_manual/rm0351-stm32l47xxx-stm32l48xxx-stm32l49xxx-and-stm32l4axxx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf}, -urldate = {2024-08-18}, -} - -@manual{stm32_HAL_um, -title = {UM1884 User manual - Description of STM32L4/L4+ HAL and low-layer drivers}, -author = {{STMicroelectronics}}, -year = {2021}, -edition = {Rev 9}, -organization = {STMicroelectronics}, -url = {https://www.st.com/resource/en/user_manual/um1884-description-of-stm32l4l4-hal-and-lowlayer-drivers-stmicroelectronics.pdf}, -urldate = {2024-08-18}, -} - @book{Digitaltechnik, author = {Gehrke, Winfried}, title = {Digitaltechnik : Grundlagen, VHDL, FPGAs, Mikrocontroller / Winfried Gehrke, Marco Winzker}, @@ -54,25 +13,6 @@ language = {ger}, edition = {8}, } -@manual{maxim_ds18b20, -title = {DS18B20 Programmable Resolution 1-Wire Digital Thermometer}, -author = {Maxim Integrated}, -year = {2019}, -edition = {Rev 6}, -organization = {Maxim Integrated}, -url = {https://www.analog.com/media/en/technical-documentation/data-sheets/ds18b20.pdf}, -urldate = {2024-08-18}, -} - -@manual{versuchsanleitung1_embeddedsystems, -title = {Embedded Systems Versuch 1 Inbetriebnahme}, -author = {{Wübbelmann, Jürgen}, {Uelschen, Michael}}, -organization = {Hochschule Osnabrück}, -year = {2024}, -note = {Modul: Embedded Systems}, -version = {3.0}, -} - @online{crcOnlineRechner, title = {Sunshine's Homepage - Online CRC Calculator Javascript}, url = {http://www.sunshine2k.de/coding/javascript/crc/crc_js.html}, @@ -86,15 +26,14 @@ urldate = {2024-08-28}, } @online{crcCalc, -title = {}, +title = {CRC Online Calculator}, url = {https://crccalc.com/}, urldate = {2025-02-13}, } -@manual{Projektanleitung_Digitalekomponenten, -title = {Modul "Digitale Komponenten", Themen für Abschlussprojekte}, -author = {{Prof. Dr.-Ing. Bernhard Lang}, {Dipl.-Inf. (FH) Rainer Höckmann}}, -organization = {Hochschule Osnabrück}, -year = {2024}, -note = {Modul: Digitale Komponenten}, -} \ No newline at end of file +@online{ZyboBoard, +title = {Digilent Reference - Zybo Z7}, +url = {https://digilent.com/reference/programmable-logic/zybo-z7/start}, +urldate = {2025-02-14}, +} + diff --git a/Projektbericht/content.tex b/Projektbericht/content.tex index a9022fb..8ec0748 100644 --- a/Projektbericht/content.tex +++ b/Projektbericht/content.tex @@ -2,31 +2,207 @@ \subsection{Projektbeschreibung und Zielsetzung} +Dieses Projekt umfasst die Konzeptionierung und Implementierung eines IPs zur Berechnung einer 32 Bit Cyclic Redundancy Check (CRC)-Prüfsumme. +Die Verarbeitung erfolgt paketweise, wobei die Daten aus dem Speicher gelesen, verarbeitet und mit angehängter Prüfsumme wieder zurückgeschrieben werden. +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. +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} + +Die Anforderungen an das Projekt und an das zu erstellende IP umfassen folgende Punkte: + +\begin{itemize} + \item Implementierung eines \textbf{CRC-Berechnungsmoduls} als \textbf{IP-Core} + \item \textbf{Paketweises Einlesen} von Daten aus dem Speicher über einen \textbf{Full-AXI-Master} + \item Berechnung einer korrekten CRC-Prüfsumme mit \textbf{konfigurierbaren Parametern} (InitialValue, Polynomial, FinalXOR, Input/OutputReflected) + \item \textbf{Anfügen der Prüfsumme} an das ursprüngliche Datenpaket + \item \textbf{Zurückschreiben} der Daten über einen \textbf{Full-AXI-Master} + \item Unterstützung von \textbf{Interrupts} zur Synchronisation mit der CPU + \item Validierung der Hardwareimplementierung durch \textbf{Simulation und Messungen} + \item Implementierung eines \textbf{Testprogramms} zur Überprüfung der Funktionalität + \item Möglichst hoher \textbf{Datendurchsatz} bei einer Frequenz von \qty{100}{\MHz} +\end{itemize} + +\subsection{CRC- Theoretische Grundlagen} + +Der Cyclic Redundancy Check (CRC) ist ein Verfahren zur Fehlererkennung, welches in der Regel in digitalen Kommunikationssystemen eingesetzt wird. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Technische Spezifikation} +\section{Konzept und Umsetzung des CRC-DMA-IP} + +Im Rahmen dieses Projektes wurde ein IP-Block entwickelt, welcher die komplette CRC-DMA Funktionalität beinhaltet. +Dieser kann anschließend in ein größeres System eingebunden werden, um die CRC-Prüfsummen von Datenpaketen zu berechnen und diese wieder zurückzuschreiben. +Die Einbindung in ein Gesamtsystem wird in Abschnitt~\ref{sec:Einbindung} beschrieben. + +Alle im Folgenden dargestellten Blockschaltbilder und VHDL-Quelldateien befinden sich im Vivadprojekt \texttt{axi\_crc\_dma} in den beigefügten Dateien. + +\subsection{Entity / Schnittstellen} + +\begin{figure}[H] + \centering + \includegraphics[width=0.6\textwidth]{Blockschaltbilder/axi_crc_dma_ip_entity.png} + \caption{Entity des IP \texttt{axi\_crc\_dma\_ip}} + \label{fig:CRC_DMA_IP_Entity} +\end{figure} + +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. + +Ü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. + +\begin{table}[H] + \centering + \begin{tabular}{|c|l|l|} + \hline + \textbf{Adresse} & \textbf{Registername} & \textbf{Beschreibung} \\ \hline + \multirow{3}{*}{0x00} & \multirow{3}{*}{\texttt{Control}} + & [0] Run \\ \cline{3-3} + & & [1] Interrupt Enable \\ \cline{3-3} + & & [31:2] Reserved \\ \hline + + \multirow{2}{*}{0x04} & \multirow{2}{*}{\texttt{Interrupt Status}} + & [0] Interrupt Status \\ \cline{3-3} + & & [31:1] Reserved \\ \hline + + \multirow{1}{*}{0x08} & \texttt{Read Address} + & [31:0] Startadresse der zu lesenden Datenpakete \\ \hline + + \multirow{1}{*}{0x0C} & \texttt{Write Address} + & [31:0] Zieladresse für Daten + Prüfsumme \\ \hline + + \multirow{2}{*}{0x10} & \multirow{2}{*}{\texttt{Packet Size}} + & [15:0] Paketgröße Minus 1 in Worte \\ \cline{3-3} + & & [31:16] Reserved \\ \hline + + \multirow{2}{*}{0x14} & \multirow{2}{*}{\texttt{Number Packets}} + & [15:0] Anzahl der Pakete Minus 1 \\ \cline{3-3} + & & [31:16] Reserved \\ \hline + + \multirow{1}{*}{0x18} & \texttt{Polynomial} + & [31:0] Generatorpolynom für CRC-Berechnung \\ \hline + + \multirow{1}{*}{0x1C} & \texttt{Initial Value} + & [31:0] Initialwert der CRC-Berechnung \\ \hline + + \multirow{1}{*}{0x20} & \texttt{Final XOR} + & [31:0] Wert für Finale XOR-Verknüpfung \\ \hline + + \multirow{3}{*}{0x24} & \multirow{3}{*}{\texttt{InOutReflected}} + & [0] Input Reflected \\ \cline{3-3} + & & [1] Output Reflected \\ \cline{3-3} + & & [31:2] Reserved \\ \hline + + \multirow{3}{*}{0x28} & \multirow{3}{*}{\texttt{AxCache}} + & [3:0] M\_AXI AWCache \\ \cline{3-3} + & & [7:4] M\_AXI ARCache \\ \cline{3-3} + & & [31:8] Reserved \\ \hline + \end{tabular} + \caption{Registerübersicht der CRC-DMA IP} + \label{tab:crc_dma_registers} +\end{table} + +Mit dem Register \texttt{Control} kann das IP gesteuert werden. +Um die CRC-Berechnung zu starten, muss Bit 0 gesetzt werden. +Solange das IP aktive ist, bleibt das Bit 0 gesetzt. +Das Löschen des Bit 0 hat keine Wirkung. +Ein gestarteter Vorgang kann also nicht vorzeitig abgebrochen werden. + +Mit dem Register \texttt{Interrupt Status} kann der Status des Interrupts ausgelesen werden. +Wenn der Interrupt aktiviert ist, wird dieser gesetzt, sobald die CRC-Berechnung abgeschlossen ist. +Zeitgleich wird der Interruptausgang des IPs auf High gesetzt. +Bevor das IP erneut gestartet werden kann, muss der Interrupt durch das Löschen des Bits 0 zurückgesetzt werden. + +Die Register \texttt{Read Address} und \texttt{Write Address} dienen zur Konfiguration der Speicheradressen, von denen die Daten gelesen und wieder zurückgeschrieben werden. +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. + +Die Register \texttt{Polynomial}, \texttt{Initial Value}, \texttt{Final XOR} und \texttt{InOutReflected} dienen zur Konfiguration der CRC-Berechnung. + +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. + +\subsection{Architecture} + +\begin{figure}[H] + \centering + \includegraphics[width=1.0\textwidth]{Blockschaltbilder/axi_crc_dma_ip_interfaces_view.png} + \caption{Architecture des IP \texttt{axi\_crc\_dma\_ip} im Interfaces-View} + \label{fig:CRC_DMA_IP_ArchitectureInterfaces} +\end{figure} + +In Abbildung~\ref{fig:CRC_DMA_IP_ArchitectureInterfaces} ist der grundlegende Aufbau des IPs \texttt{axi\_crc\_dma\_ip} dargestellt. +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. + +\subsubsection{DMA Komponente - axis\_dma} + +\begin{figure}[H] + \centering + \includegraphics[width=0.5\textwidth]{Blockschaltbilder/axis_dma_entity.png} + \caption{Entity des der Komponente \texttt{axis\_dma}} + \label{fig:AxisDMA_entity} +\end{figure} + +Die Komponente \texttt{axis\_dma} ist die steuernde Komponente in diesem System. +Sie ist für das Lesen und Schreiben der Daten aus dem Speicher über die \emph{M\_AXI} Schnittstelle zuständig. +Dabei werden die gelesenen Datenpakete zunächst an einen FIFO-Speicher über die \emph{M\_AXIS} Schnittstelle weitergegeben. +Über die \emph{M\_AXIS} Schnittstelle werden die Datenpakete mit angehängter Prüfsumme wieder angenommen und zurück in den Speicher geschrieben. + +Die Komponente arbeitet bei den Speicherzugriffen über die \emph{M\_AXI} Schnittstelle immer mit möglichst großen Burstlängen, um möglichst effiziente Speicherzugriffe zu gewährleisten. +Um sicherzustellen, dass das System dabei genug Daten aufnehmen kann bzw. zur Verfügung stellen kann, werden zwei FIFO-Speicher verwendet. +Die maximale Burstlänge in diesem System beträgt 16 Worte. +Die FIFO-Speicher haben eine Tiefe von 256 Worten, um ausreichend Daten puffern zu können, damit bei Verzögerungen der \emph{M\_AXI} Lesezugriffe die CRC-Berechnungskomponente trotzdem ununterbrochen Daten verarbeiten kann. + +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. + +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. + +\begin{figure}[H] + \centering + \includegraphics[width=1.0\textwidth]{Blockschaltbilder/axi_crc_dma_ip_default_view.png} + \caption{Architecture des IP \texttt{axi\_crc\_dma\_ip}} + \label{fig:CRC_DMA_IP_Architecture} +\end{figure} + +\subsubsection{CRC-Berechnung} + + + +\subsection{Einbindung in ein Gesamtsystem} \label{sec:Einbindung} + \newpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Hardware-Design} +\section{Konzept und Umsetzung der Software} + + + +\newpage +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Testkonzept und Ergebnisse} \newpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Simulationen und Tests} +\section{Fazit und Ausblick} \newpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Software} - -\newpage - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %Anhang im ZIP-Ornder außer Litaratur diff --git a/Support/ES-Bewertungshinweise.pdf b/Support/ES-Bewertungshinweise.pdf new file mode 100644 index 0000000..f484f71 Binary files /dev/null and b/Support/ES-Bewertungshinweise.pdf differ