Anwendung von CRC-Hard-Blöcken verringert Entwicklungsaufwand Fehlererkennung in FPGAs

Mit steigender Kommunikationsbandbreite und Vernetzung gewinnen wirksame Methoden zur Fehlererkennung an Bedeutung. Für Kommunikationsbausteine in FPGAs stehen deshalb erprobte Hardware-Makros...

Anwendung von CRC-Hard-Blöcken verringert Entwicklungsaufwand

Mit steigender Kommunikationsbandbreite und Vernetzung gewinnen wirksame Methoden zur Fehlererkennung an Bedeutung. Für Kommunikationsbausteine in FPGAs stehen deshalb erprobte Hardware-Makros zur Verfügung, die den Entwicklungsaufwand für derartige Fehlersicherungsmechanismen drastisch senken und damit die Marktreife erheblich beschleunigen.

Ein prinzipielles Problem der Datenübertragung und Speicherung ist die mögliche Veränderung von Daten. Immer, wenn Daten über einen Kanal geschickt werden, gibt es eine endliche Wahrscheinlichkeit, dass Fehler auftreten können. Daher ist es wichtig, dass das Empfängermodul zwischen einer fehlerhaften und einer fehlerfreien Nachricht unterscheiden kann. Zur Erkennung von Fehlern dienen unterschiedlichste Methoden, wobei die meisten Fehlererkennungsprogramme für diesen Zweck redundante Bits einführen. Weit verbreitete Methoden zur Fehlererkennung bei der Datenkommunikation sind Paritäts-Bits, Hamming-Codes und die zyklische Redundanzprüfung CRC (Cyclic Redundancy Check), die hauptsächlich verwendet wird.

Zunächst erfolgt eine Berechnung der CRC für einen gegebenen Datensatz, die erst an das Ende des Daten-Frame angehängt und dann gesendet oder gespeichert wird. Beim Empfang dieser Frames wird deren Gültigkeit durch erneute Berechnung der CRC aus dem Inhalt des Frame überprüft und damit die Fehlerfreiheit der Daten sichergestellt.

Theoretische Grundlagen der CRC-Prüfung

Addition und Subtraktion basieren auf einer Modulo-2-Arithmetik, die nichts anderes ist als eine Exklusiv-Oder-Verknüpfung (XOR). Eine Addition von zwei Zahlen in Polynom-Arithmetik erfolgt in der gleichen Weise wie bei der üblichen Binär-Arithmetik mit dem Unterschied, dass hier kein Übertrag auftritt.

So wird beispielsweise der binäre Nachrichtenstrom 11001011 durch ein Polynom x7 + x6 + x3 + x + 1 repräsentiert. Die Sende- und Empfangsstellen beziehen sich auf ein festes Polynom, das als Generator-Polynom bezeichnet wird und als Schlüsselparameter der CRC-Berechnung gilt.

Bild 3 zeigt eine Anwendungsumgebung des CRC-Hard-Blocks. Der CRC-Wert wird berechnet und im Sender an das Datenpaket angefügt. Auf der Empfängerseite wird der CRC-Wert über das gesamte empfangene Datenpaket mit der vom Sender angehängten CRC-Prüfsumme noch einmal berechnet. Dann wird die Gültigkeit des empfangenen Pakets durch die Residuen-Methode festgestellt. Für das CRC-32-Polynom wird das Residuum zu 1CDF4421 in hexadezimaler Notation berechnet, das bit-invertiert und byte-reversiert C704DDB7 ergibt (Bild 4).

Bild 5 zeigt den Zeitablauf für den normalen CRC-Betrieb. Unterstützt wird der Anwender durch einen Logi-CORETM-CRC-Assistenten (Wizard), der eine LocalLink-Ankopplung für das CRC-Hard-Makro im Baustein der Reihe Virtex-5 bereitstellt. Der Core bietet auch ein Design-Beispiel für die Anwendung des CRC-Hard-Blocks und weitere Optionen wie Pipeline-Betrieb, Komplementierung und Transposition [1].