Doku: Kapitel 2 angefangen
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 97 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
@@ -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},
|
||||
}
|
||||
@online{ZyboBoard,
|
||||
title = {Digilent Reference - Zybo Z7},
|
||||
url = {https://digilent.com/reference/programmable-logic/zybo-z7/start},
|
||||
urldate = {2025-02-14},
|
||||
}
|
||||
|
||||
|
||||
+185
-9
@@ -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
|
||||
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user