Parallele CRC-Berechnung in VHDL

CRC-Werte für die zyklische Redundanzprüfung können mit programmierbarer Logik sehr einfach mit einem rückgekoppelten Schieberegister erzeugt werden, wenn die Nutzdaten in bit-serieller Form vorliegen. Meist liegen die Daten allerdings in Form von Datenworten verschiedener Länge vor. Auch in diesen Fällen lässt sich die CRC mit programmierbarer Logik berechnen. Mit passender Kombinatorik ist das in einem Taktzyklus pro Datenwort möglich.

Der CRC-Typ ist durch folgende Parameter definiert:

- Polynomlänge = CRC Länge in Bits

- das binäre Generator-Polynom

- CRC Startwert

- Nutzdaten revers oder nicht revers

- CRC revers oder nicht revers

- CRC am Ende invertiert oder nicht

Weiterhin muss die Datenwortbreite definiert sein, wenn die Kombinatorik für die parallele CRC-Erzeugung entwickelt werden soll.

Überblick zu CRC-Typen: Catalogue of parametrised CRC algorithms

 

Für die CRC-Erzeugung aus Nutzdatenbytes hat sich die Anwendung einer VHDL-Funktion nach dem folgenden Prinzip bewährt:

crc16 <= CRC16_Initial;

loop for all data bytes

     crc16 <= NewCRC(crc16, DBYTE);

loop end

crc16 <= crc16 xor CRC16_Final;

 Die Funktion"NewCRC" enthält die Kombinatorik zur parallelen CRC-Erzeugung. Diese Funktion und die Konstanten "CRC16_Initial" und "CRC16_Final" sind abhängig vom CRC-Typ. Sie werden in einem Package definiert, welches in einem separaten File im Quellverzeichnis des Projekts liegt. Damit können sie über die Library "work" eingebunden werden. Das Package File muss zuerst compiliert werden.

 

Wie die Funktion"NewCRC" in einer State Machine verwendet werden kann sehen sie hier.

 

Wie die Kombinatorik in Abhängigkeit vom CRC-Typ erzeugt werden kann ist hier beschrieben:

Parallel CRC Generation (IEEE Micro, Vol 10 Issue 5, September 1990)

A Practical Parallel CRC Generation Method (Circuit Cellar, January 2010) 

outputlogic.com

A Systematic Approach for Parallel CRC Computations (Journal of Information Science and Engineering 17, 2001

 

Elektronik

Trennverstärker und Feldbussysteme

Messung kleinster Ströme / Strahlungssensorik

Mixed Signal Design

Isolierte Stromversorgung und Hochspannung

Programmierung + Logik

Embedded Software in C und Assembler

CPLD & FPGA Entwicklung in VHDL und Verilog

PSOC Konfiguration und Linux Bootsoftware

Simulation und Test

Service und Beratung

Entwicklung - CAD - Prototyping

Dokumentation und Fertigungsunterlagen

Test - EMV - Prüfplanung

Schulung und freiberufliche Mitarbeit