DE10105626A1 - Berechnung von M CRC-Bits zu einem zeitpunktfür Daten mit einer Bitlänge, die kein Vielfaches von M beträgt - Google Patents

Berechnung von M CRC-Bits zu einem zeitpunktfür Daten mit einer Bitlänge, die kein Vielfaches von M beträgt

Info

Publication number
DE10105626A1
DE10105626A1 DE10105626A DE10105626A DE10105626A1 DE 10105626 A1 DE10105626 A1 DE 10105626A1 DE 10105626 A DE10105626 A DE 10105626A DE 10105626 A DE10105626 A DE 10105626A DE 10105626 A1 DE10105626 A1 DE 10105626A1
Authority
DE
Germany
Prior art keywords
crc
input sequence
max
bits
last
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE10105626A
Other languages
English (en)
Other versions
DE10105626B4 (de
Inventor
Jeffrey H Derby
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE10105626A1 publication Critical patent/DE10105626A1/de
Application granted granted Critical
Publication of DE10105626B4 publication Critical patent/DE10105626B4/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • H03M13/091Parallel or block-wise CRC computation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/615Use of computational or mathematical techniques
    • H03M13/616Matrix operations, especially for generator matrices or check matrices, e.g. column or row permutations

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)

Abstract

Ein Verfahren und ein System zur Durchführung des Verfahrens zur Berechnung des zyklischen Blockprüfungscodes (CRC) für die Verwendung in einem Übertragungsdatenstrom mit M Bits zu einem Zeitpunkt für eine Eingabefolge u(n), deren Länge kein Vielfaches von M ist. Das Verfahren beinhaltet (i) die Darstellung eines zu schützenden Datenrahmens als Eingabefolge; (ii) die Bestimmung eines zyklischen Blockprüfungscodes (CRC) für die Eingabefolge mit M Bits zu einem Zeitpunkt aus einem Zustandsvektor, bis der letzte Block der Eingabefolge erreicht ist; (iii) wenn der letzte Block der Eingabefolge voll ist, dann die Bestimmung des CRCs als ein vollständiger CRC; und (iv) wenn der letzte Block der Eingabefolge nicht voll ist, dann die Ausführung dreier Funktionen. Das Verfahren kann des Weiteren umfassen (v) das Anhängen des vollständigen CRCs als eine Rahmenprüfbitfolge (framecheck sequence, FCS) an den Übertragungsdatenstrom zur Erkennung durch ein Empfangsgerät. Die drei Funktionen sind (a) gleich null Setzen einer Anzahl der letzten Bits des letzten Blocks; (b) das Verarbeiten des letzten Blocks, der mit der Anzahl der letzten Bits gleich null aufgefüllt wurde, gemäß den Schritten (i) und (ii), um einen neuen CRC (y¶CRC¶) zu bestimmen; und (c) in der Zeit Rückwärtslaufenlassen des Zustandsvektors, um einen vollständigen CRC zu bestimmen.

Description

Verweise
Auf die folgenden Verweise, die hier durch die Bezugnahme in ihrer Gesamtheit Bestandteil der vorliegenden Patentanmeldung sind, wird im restlichen Patentdokument verwiesen:
[1] ISO 3309, Information processing systems - Data communication - High level data link control procedures - Frame structure, 1984.
[2] W. W. Peterson und D. T. Brown, "Cyclic codes for error detection", Proc. IRE, Bd. 49, Seiten 228-235, Januar 1961.
[3] R. E. Blahut, Theory and Practice of Error Control Codes, Reading, MA: Addison-Wesley, 1983.
[4] IBM Corporation, Synchronous Data Link Control - Concepts, GA27-3093-3, Juni 1986.
[5] A. M. Patel, "A multi-channel CRC register", in: AFIPS Conference Proceedings, Bd. 38, Seiten 11-14, Frühjahr 1971.
[6] A. Perez, "Byte-wise CRC calculations", IEEE Micro, Bd. 3, Seiten 40-50, Juni 1983.
[7] G. Albertengo und R. Sisto, "Parallel CRC generation", IEEE Micro, Bd. 10, Seiten 63-71, Oktober 1990.
[8] T-B. Pei und C. Zukowski, "High-speed parallel CRC circuits in VLSI", IEEE Trans. Commun., Bd. 40, Seiten 653-657, April 1992.
[9] R. J. Glaise und X. Jacquart, "Fast CRC calculation", in Proc. 1993 IEEE Intl. Conf. on Computer Design: VLSI in Computers and Processors, Cambridge, MA, Seiten 602-605, Oktober 1993.
[10] S. L. Ng und B. Dewar, "Parallel realization of the ATM cell header CRC", Computer Commun., Bd. 19, Seiten 257-263, März 1996.
[11] M. Braun et. Al., "Parallel CRC computation in FPGAs", in Proc. 6th Intl. Workshop on Field Programmable Logic and Applications, Darmstadt, Germany, Seiten 156-165, September 1996.
[12] S. Li und J. A. Pasco-Anderson, Efficient CRC remainder coefficient generation and checking device and method, U. S. Pat. 5,619,516,8 April 1997.
[13] R. J. Glaise, "A two-step computation of cyclic redundancy code CRC-32 for ATM networks", IBM J. Res. Devel., Bd. 41, Seiten 705-709, November 1997.
[14] ITU-T Rec. I.432, B-ISDN User-Network Interface - Physical Layer Specifications, Seiten 16-20, März 1993.
[15] J. J. D'Azzo und C. H. Houpis, Linear Control System Analysis and Design. New York: McGraw-Hill, 1981.
[16] K. Hoffmann und R. Kunze, Linear Algebra. Englewood Cliffs, NJ: Prentice Hall, 1971.
Das folgende, verwandte Patentdokument von gemeinsamen Abtretungsempfänger und Erfinder ist durch die Bezugnahme in seiner Gesamtheit Bestandteil der vorliegenden Patentanmeldung:
US-Patentantrag mit dem Titel "Method and Apparatus for High-Speed CRC Computation Based on State-Variable Transformation", beantragt am 3. März 2000, Attorney Docket No. IBM RAL9-99-0060 (LA No. A-21573).
HINTERGRUND DER ERFINDUNG Gebiet der Erfindung
Die folgende Erfindung bezieht sich im Allgemeinen auf Fehlererkennung in einem Telekommunikationsumfeld und insbesondere auf eine Beschleunigung von zyklischen Blockprüfungscode-Berechnungen (cyclic redundancy code, CRC) zur Beschleunigung der Fehlererkennung.
Zugrundeliegende Technik
Die Verwendung einer zyklischen Blockprüfung oder eines CRC (cyclic redundancy check) stellt ein Standardverfahren zur Fehlererkennung in Telekommunikationsnetzen dar. Ein Block oder Rahmen (frame) von binären Daten, der geschützt werden soll, wird als ein Polynom über GF(2), dem Feld der ganzen Zahlen mit modulo 2, dargestellt. Die Berechnung des CRCs ist durch die Division dieses Polynoms durch ein sogenanntes Erzeugerpolynom (generator polynomial) definiert, wobei die Division unter Verwendung der Arithmetik in GF(2) ausgeführt wird. Der CRC wird an den Datenrahmen vor der Übertragung als eine Rahmenprüfbitfolge (frame-check sequence, FCS) angehängt und wird am Empfangsende unter Verwendung eines im Wesentlichen identischen Polynomdivisionsprozesses überprüft.
Eine formale Definition des CRCs, wie sie in der Datenübertragung verwendet wird, ist in einigen Kommunikationsstandards gegeben. Die ISO-Definition, aus [1] entnommen, wird hier umschrieben:
Die K-Bit-Rahmenprüfbitfolge sei das Einser-Komplement der Summe (modulo 2) zu: (a) dem Rest von zNUo(z) dividiert (modulo 2) durch das Erzeugerpolynom G(z), wobei die Anzahl der Bits in der Eingabefolge, die durch den CRC geschützt werden soll, gleich N ist, und U0(z) ein Initialisierungspolynom eines Grades kleiner K ist; und (b) dem Rest von zkUp(z) dividiert (modulo 2) durch das Erzeugerpolynom G(z), wobei Up(z) das Polynom ist, das die Eingabefolge, die durch den CRC geschützt werden soll, darstellt.
Zum Zweck dieser Offenlegung wird der Begriff "CRC" verwendet, um sich auf die Summe der zwei Reste zu beziehen, auf die sich in der obigen Definition bezogen wurde. Die FCS, die an den Datenrahmen angehängt wird, ist gleich dem Einser-Komplement von dem, was wir als CRC bezeichnen. Anzumerken ist, dass in GF(2) das Finden des Einser- Komplements einer Zahl gleich der Addition von 1 zu dieser Zahl ist.
Wenn man die Eingabefolge als eine Zeitreihe u(n) betrachtet, die die Werte 0 oder 1 annimmt und deren Zeitindex n mit 0 beginnt (sodass u(0) das erste zu verarbeitende Bit ist), dann ist die Polynomdarstellung, auf die in der CRC-Definition Bezug genommen wird
Das Erzeugerpolynom G(z) ist ein Polynom K-ten Grades. Die ISO-Standard-Erzeugerpolynome für K = 16 und K = 32 sind
G16(z) = z16 + z12 + z5 + 1
G32(z) = z32 + z26 + z23 + z22 + z16 + z12 + z11 + z10 + z8 + z7 + z5 + z4 + z2 + z + 1 (2)
Das Initialisierungspolynom ist im Allgemeinen entweder null oder das Polynom vom Grad K - 1, dessen Koeffizienten alle gleich 1 sind.
Die Fehlererkennungseigenschaften des CRCs hängen von den Eigenschaften des Polynoms über das Feld GF(2) ab, sind sehr gut bekannt (siehe z. B. [2]) und sind nicht Gegenstand dieser Offenlegung. Es geht hier vielmehr um effiziente Mittel zur Hochgeschwindigkeits-CRC-Berechnung.
Die gewöhnliche Referenzimplementierung zur Berechnung des CRCs wird aus einem Schaltkreis zur Polynomdivision abgeleitet, der ein Umschaltregister mit Rückkopplung (shift register with feedback) (siehe z. B. Abschnitt 6.2 in Referenz [3]) verwendet. Eine Form dieser Referenzimplementierung, aus Referenz [4] verallgemeinert, ist in Fig. 1 dargestellt. Die mit z-1 bezeichneten Blöcke sind Einheitsverzögerungselemente, die das Umschaltregister darstellen; für den Block, dessen Ausgabe z. B. xk(n) ist, ist die Eingabe gleich xk(n + 1). Die Maßstabsfaktoren der Verstärkungselemente sind die Koeffizienten des Divisorpolynoms G(z), d. h.
wobei angenommen wird, dass die Koeffizienten mit gK = 1 normalisiert sind. Die Eingabefolge u(n) enthält den Block der zu schützenden Daten mit einer endlichen Länge, für n = 0, 1, . . ., N - 1. Nachdem das letzte Element der Eingabefolge verarbeitet worden ist, d. h. bei n = N, enthält das Umkehrregister den Rest der Division, der durch die CRC- Definition erforderlich ist. Genauer:
Sei das Umkehrregister initialisiert, sodass es eine Darstellung des Initialisierungspolynoms Uo(z) enthält, d. h. falls
dann setze xk(0) = uok für k = 0, 1, . . ., K - 1. Dann stellen die Inhalte des Umkehrregisters für n = N die Summe des Rests von zNUo(z) dividiert durch G(z) dar und den Rest von zKUp(z) dividiert durch G(z), wobei Up(z) die Polynomdarstellung der Eingabedatenfolge gemäß Gleichung (1) ist. Mit anderen Worten, sei RT(z) die Summe der beiden Reste, wobei
dann genügen die Koeffizienten von diesem Polynom, die den CRC darstellen:
rTk = xk(N); k = 0, 1, . . ., K - 1 (6)
Es ist zu beachten, dass wenn der CRC über GF(2) wie in der Standarddefinition berechnet wird, die richtige Arithmetik verwendet wird. Somit führen die Summierblöcke in Fig. 1 modulo 2-Addition aus und die negativen Vorzeichen in der Figur sind irrelevant (da jedes Element in GF(2) sein eigenes additives Inverses darstellt). Bei der Addition, da die Koeffizienten von G(z) alle entweder 0 oder 1 sind, wären die Verstärkungselemente, die in der Figur dargestellt sind, entweder als eine geschlossene Verbindung (für eine 1) oder als ein offener Schaltkreis (für eine 0) ausgeführt.
Die Verarbeitung der Eingabefolge in Fig. 1 kann durch die Differenzengleichung beschrieben werden:
x(n + 1) = Ax(n) + bu(n) (7)
mit dem K-dimensionalen Zustandsvektor x(n)
x(n) = [x0(n) x1(n) . . . xK-1(n)T (8)
A ist eine KxK-Matrix der Form
und b ist die Kx1-Matrix
b = [(-g0)(-g1) . . . (-gK-1)]T (10)
wobei das Superscript "T" die Transposition anzeigt. Die Anfangsbedingung für die Differenzengleichung (7) ist durch das Initialisierungspolynom bestimmt; mit Uo(z) wie in Gleichung (4):
xk(0) = uok; k = 0, 1, . . ., K - 1 (11)
Wenn wiederum der CRC über GF(2) berechnet wird, erfolgt die Berechnung in Gleichung (7) unter Verwendung von modulo 2- Arithmetik, und die negativen Vorzeichen in der Matrix A in Gleichung (9) und der Matrix b in Gleichung (10) sind überflüssig. Hervorzuheben ist ebenso, dass das Umkehrregister den CRC enthält. Mit anderen Worten, der Zustandsvektor des Systems, der durch die Zustandsgleichung (7) beschrieben ist, ist gleich dem CRC, nachdem das letzte Eingabeelement bei n = N verarbeitet worden ist.
Es ist zu beachten, dass Gleichung (7) einmal für jedes Element der Eingabefolge u(n) (d. h. für jedes Bit des Eingabebitstroms) ausgeführt wird. Eine Vielzahl von Techniken sind entwickelt worden, um den CRC durch parallele Verarbeitung einer Anzahl von Bits (d. h. Elemente der Eingabesequenz u(n)) effizienter zu berechnen. Diese erhöhte Effizienz hat sich bei der CRC-Berechnung sowohl für Hardware als auch Software nützlich erwiesen. Die parallele CRC-Berechnung wurde ursprünglich von Patel [5] beschrieben. Perez [6] zeigt ein frühes Beispiel ihrer Implementierung in Software. Die Verweise [7] bis einschließlich [13] zeigen andere Beispiele von Hardware-Implementierungen paralleler CRC-Berechnung. Ein begleitendes Offenlegungsdokument, der US-Patentantrag mit dem Titel "Method and Apparatus for High-Speed CRC Computation Based on State-Variable Transformation" (oben im Abschnitt Verweise aufgelistet, hier in seiner Gesamtheit durch Verweis enthalten und ab hier mit "begleitendes Patentdokument" darauf Bezug genommen), beschreibt eine höchsteffiziente (im Sinne von Durchsatz relativ zur Schaltkreisgeschwindigkeit) Hardware- Implementierung.
Die Basis aller angeführten Techniken für die parallele CRC- Berechnung kann durch die formale Beschreibung der blockorientierten Version der Systemzustandsgleichung (7) erreicht werden. Seien die Elemente der Eingabefolge u(n) in Blöcken der Länge M gruppiert, sodass die Eingabe an das blockorientierte System nun ein Vektor uM(m) ist mit
uM(m) = [u(mM + M - 1) u(mM + M - 2) . . . u(mM + 1) u(mµ)]T; m = 0, 1 . . ., (N/M) - 1 (12)
wobei angenommen wird, dass N ein ganzzahliges Vielfaches von M ist. Es ist wohl bekannt, dass die Zustandsgleichung (7) auch wie folgt geschrieben werden kann:
x(m + 1) = AMx(m) + BMuM(m) (13)
wobei der Index m für jeden Block der M Eingabeelemente um eins erhöht wird. Die KxK-Matrix AM in Gleichung (13) ist gleich Matrix A in Gleichung (9), die mit sich selbst M-mal multipliziert wird. Die Matrix BM ist eine KxM-Matrix, deren Spalten durch Multiplikation des Vektors b in Gleichung (7) mit sukzessiv höheren Ordnungen von A gefunden werden; für M ≦ K sind die Spalten von BM die M rechten Spalten von AM. Die Anfangsbedingung für die Differenzengleichung (13) ist durch Gleichung (11) gegeben; sie ist identisch mit der Anfangsbedingung für die ursprüngliche Differenzengleichung. Zusätzlich enthält der Zustandsvektor den CRC, nachdem der letzte Block von M Eingabeelementen verarbeitet worden ist, unter der Annahme, dass N ein ganzzahliges Vielfaches von M ist.
Alle Techniken, auf die verwiesen wurde, arbeiten direkt mit der blockorientierten Zustandsgleichung (13) oder sie arbeiten mit einer modifizierten oder transformierten Version dieser Gleichung. Mit anderen Worten, sie alle verarbeiten Blöcke, die aus M Eingabeelementen bestehen, d. h. Gruppen von M Bits von der Eingabedatenfolge. Somit besteht in allen diesen Techniken eine implizite (oder möglicherweise explizite) Annahme, dass N, die Zahl der Bits in der Eingabedatenfolge, ein ganzzahliges Vielfaches von M ist.
Zugleich steigt für die meisten, wenn nicht alle Techniken, auf die verwiesen wurde, die Effizienz mit M an. Dies ist z. B. offensichtlich aus den Ergebnissen, veröffentlicht von Pei und Zukofsky in [8], dass, zumindest für ihre hardwarebasierte Technik, der Zuwachs an Durchsatz für eine gegebene Schaltkreistaktgeschwindigkeit ungefähr linear mit M ansteigt. Ebenso ist der Durchsatz für die hardwarebasierte Technik, die in dem begleitenden Patentdokument beschrieben ist, in der Tat M mal der einer Einzel-Bit-CRC-Berechnung bei der gleichen Schaltkreistaktgeschwindigkeit.
In den meisten praktischen Datenübertragungssystemen ist die Länge N der Datenfolgen, für die CRCs berechnet werden, ein ganzzahliges Vielfaches von 8 Bits, sodass M = 8 ein gebräuchlicher Wert für die Block-CRC-Berechnung ist. Da nicht sichergestellt ist, dass N im Allgemeinen ein ganzzahliges Vielfaches einer beliebigen größeren Zahl (z. B. 16) ist, erfordert die Verwendung eines Werts größer 8 für M einige Nachbearbeitung, um die Berechnung des CRCs zu vervollständigen. Diese Nachbearbeitung ist für alle bekannten Techniken erforderlich wie auch für die im begleitenden Patentdokument beschriebene Technik. Während einige Referenzen Ergebnisse für M < 8 vorgestellt haben (vergleiche z. B. [8]), so hat keine die für diese Fälle erforderliche Nachbearbeitung erörtert.
In der Tat erscheint es, dass es kein explizit beschriebenes, bekanntes Verfahren zur Berechnung der M CRC- Bits für den Fall, dass M nicht ein ganzzahliges Vielfaches von N ist, gibt. Es lässt sich jedoch ein Satz von Nachbearbeitungsschritten als eine einfache Erweiterung von fast jeder Technik für parallele CRC-Berechnung, auf die verwiesen wurde, entwickeln. Betrachte z. B. ein Beispiel mit M = 32 und N ein ganzzahliges Vielfaches von 8. Konstruiere für eine bekannte Technik, z. B. die aus [8], eine Implementierung mit M = 8 zusätzlich zu der mit M = 32. Verarbeite alle 32-Bit-Blöcke der Eingabeelemente, außer den letzten Block, mit der Implementierung mit M = 32. Offensichtlich enthält der letzte Block von zu verarbeitenden Eingabeelementen entweder 8, 16, 24 oder 32 Bits. Wenn der letzte 32-Bit-Block vollständig ist, verarbeite ihn mit der Implementierung mit M = 32. Ansonsten verarbeite den letzten Block mit der Implementierung mit M = 8 entweder als ein, zwei oder drei 8-Bit-Blöcke. Diese Handhabung des letzten Eingabeblocks stellt die gewünschte Nachbearbeitung dar.
Dass die beschriebene Nachbearbeitung im Grunde genommen zwei getrennte Implementierungen der parallelen CRC- Berechnung erfordert, z. B. zwei Schaltkreisgruppen, ist nicht notwendigerweise ein Nachteil. Es kann sein, dass der erhöhte Durchsatz, der durch die Verwendung von M = 32 für alle bis auf den letzten Block von Eingabeelementen statt M = 8 für die gesamte Eingabedatenfolge erreicht wird, die komplexere Lösung rechtfertigt. Wenn jedoch maximaler Durchsatz das Hauptanliegen ist, leidet diese bekannte Nachbearbeitung unter einem nennenswerten Nachteil, nämlich dass sie nach dem Ende eines Eingabedatenrahmens eine Nachbearbeitungszeit ungleich null erfordert, bevor die Verarbeitung des nächsten Eingabedatenrahmens beginnen kann. Mit anderen Worten, sie erfordert eine Zwischenrahmenleerlaufzeit auf der Übertragungsverbindung, von der die Daten empfangen werden oder auf die die Daten übertragen werden. Um dies zu sehen, betrachte man ein Hardware-Design, das für maximalen Durchsatz unter Verwendung der in dem begleitenden Patentdokument beschriebenen Technik optimiert ist. Die Technik im begleitenden Patentdokument ist am effektivsten, da die Zeit, die zur Verarbeitungen von M Bits mit jeweils M Bits zu einem Zeitpunkt erforderlich ist, von M unabhängig ist. Unter der Annahme eines optimierten Designs ist die Zeit, um 32 Bit mit M = 32 zu verarbeiten, ungefähr gleich 32 Bit- Zeiten, während die Zeit, um 8 Bit mit M = 8 zu verarbeiten, ebenfalls gleich 32 Bit-Zeiten ist. Mit anderen Worten, die Ausführung des oben beschriebenen Nachbearbeitungsverfahrens könnte sich bis hin zu 64 Bit-Zeiten über das Ende des Datenrahmens, der gerade verarbeitet wird, erstrecken. Ob dies ein Problem darstellt oder nicht, hängt von den Eigenschaften der Übertragungsschnittstelle ab, insbesondere von der minimalen Zahl von Bit-Zeiten zwischen den Enden zweier aufeinander folgender Datenrahmen. (Es gibt hier noch einen weiteren Faktor, nämlich die minimale Zahl von Bit- Zeiten zwischen dem Ende eines Datenrahmens und dem Anfang des nächsten Datenrahmens. Hier wurde angenommen, dass das erste Bit eines beliebigen Datenrahmens an einem Ende mit dem M-Bit-Block ausgerichtet ist, d. h. am rechten Ende, unter Verwendung der Notation von Gleichung (12). Für weitere Anmerkungen bezüglich dieser Annahme und dem Grund, warum sie erfolgte, siehe die folgenden Erörterungen.) LAN- Rahmenformatierung erfolgt so, dass immer mehr als 128 Bit- Zeiten zwischen dem Ende von einem Rahmen und dem Ende des nächsten liegen. Mit HDLC-Rahmenformatierung (bitorientierte Datenübertragungssteuerung, high-level data link control) jedoch können nur 40 Bits zwischen dem Ende eines Rahmens und dem Ende des nächsten liegen. (Die Zahl hier beinhaltet die Bit-Zeiten, die für Übertragung oder Empfang des CRC- Felds selbst benötigt werden.)
Was gebraucht wird, ist eine neue Nachbearbeitungstechnik, die leicht im Pipelinesystem so verarbeitet werden kann, dass sie parallel mit der CRC-Berechnung für den nächsten zu bearbeitenden Rahmen funktionieren kann wie auch mit der Nachbearbeitung des nächsten Rahmens, wenn dieser zufälligerweise extrem kurz sein sollte. Im Grunde genommen sollte sie in der Lage sein, mit einer Null- Zwischenrahmenleerlaufzeit selbst für HDLC-Rahmen minimaler Länge zu funktionieren. Wenn diese Technik mit der im begleitenden Patentdokument beschriebenen Technik für parallele CRC-Berechnung kombiniert wird, würde sie eine im höchsten Grad effiziente Lösung zur Berechnung des CRCs mit M Bits zu einem Zeitpunkt für Datenrahmen, deren Länge nicht ein ganzzahliges Vielfaches von M Bits ist, ermöglichen.
ÜBERBLICK ÜBER DIE ERFINDUNG
Die vorliegende Erfindung betrifft ein Verfahren und ein System zur Berechnung des zyklischen Blockprüfungscodes (cyclic redundancy code, CRC) zur Verwendung in einem Übertragungsdatenstrom mit M Bits zu einem Zeitpunkt für eine Eingabefolge u(n), deren Länge kein Vielfaches von M ist. Das Verfahren beinhaltet (i) Darstellung eines zu schützenden Datenrahmens als die Eingabefolge; (ii) Bestimmung eines zyklischen Blockprüfungscodes (CRC) für die Eingabefolge mit M Bits zu einem Zeitpunkt aus einem Zustandsvektor, bis ein letzter Block von der Eingabefolge erreicht ist; (iii) wenn der letzte Block der Eingabefolge voll ist, dann Bestimmung des CRCs als einen vervollständigten CRC; und (iv) wenn der letzte Block der Eingabefolge nicht voll ist, dann Durchführung dreier Funktionen. Das Verfahren kann des Weiteren das Anhängen des vervollständigten CRCs als eine Rahmenprüfbitfolge (frame check sequence, FCS) an den Übertragungsdatenstrom zur Erkennung durch ein Empfangsgerät beinhalten. Die drei Funktionen sind (a) eine Anzahl der letzten Bits des letzten Blocks gleich null setzen; (b) Verarbeiten des letzten Blocks, aufgefüllt mit der Anzahl der letzten Bits gleich null, gemäß Schritt (i) und (ii), um einen neuen CRC (yCRC) zu bestimmen; und (c) den Zustandsvektor in der Zeit rückwärts laufen lassen, um einen vervollständigten CRC zu bestimmen.
Die Eingabefolge u(n) kann im Feld der ganzen Zahlen modulo 2 (GF(2)) definiert werden. Schritt (1) kann des Weiteren die Gruppierung der Elemente der Eingabefolge in Blöcke der Länge M beinhalten; und die Darstellung der Eingabefolgen in einer blockorientierten Weise als uM(mmax) = [u(mM + M - 1) u(mM + M - 2). . . u (mM + 1 u(mM)]T, mit m = 0, 1, . . ., mmax, mit mmax gleich (N/M) - 1.
Der Zustandsvektor kann durch x(m + 1) = AM x(m) + BM uM(m) dargestellt werden, wobei m eine ganze Zahl ist; wobei A eine KxK-Matrix ist, die die Koeffizienten eines CRC- Erzeugerpolynoms enthält; wobei x(m) ein K-dimensionaler Zustandsvektor ist, der als [x0(m) x1(m) . . . xK-1(m)]T definiert ist; wobei BM eine KxK-Matrix ist, deren Spalten durch Multiplikation von b mit den nachfolgenden höheren Potenzen von A bestimmt sind; und wobei b ein K-dimensionaler Vektor ist, der einen oder mehrere Koeffizienten eines CRC- Erzeugerpolynoms enthält.
Der letzte Block kann als uM(mmax) dargestellt werden, wo, ob die Folge voll ist, durch die Bestimmung, ob N/M eine ganze Zahl und r2 = 0 ist, bestimmt wird; wobei N die Länge der Eingabefolge ist; wobei R der größte gemeinsame Teiler von M ist; und wobei die letzten (r2)(R) Bits des letzten Blocks uM(mmax) Nullen sind.
Schritt (iv)(a) kann das gleich null Setzen von (r2)(R) Bits des letzten Blocks beinhalten. Der neue CRC (yCRC) kann den CRC der Eingabefolge enthalten, an seinem Ende um r2R Nullen erweitert, wobei R der größte gemeinsame Teiler von M ist, und r2 durch die Tatsache definiert ist, dass die letzten (r2)(R) Bits des letzten Blocks Nullen sind.
Schließlich kann der Schritt (iv)(c) die Ausführung von x'(r - 1) = A-R x'(r) für r2 Iterationen beinhalten, bis x'(r - 1) = x'(N/R), was gleich dem vervollständigten CRC ist, wobei R der größte gemeinsame Teiler von M ist, und wobei r2 durch die Tatsache definiert ist, dass die letzten (r2)(R) Bits des letzten Blocks Nullen sind; wobei r anfänglich als (r2 + (N/R)) definiert ist; und wobei x'(r2 + (N/R)) gleich dem neuen CRC (yCRC) ist.
KURZE BESCHREIBUNG DER FIGUREN
Die vorliegende Erfindung wird mit Bezug auf die beiliegenden Zeichnungen beschrieben, in denen:
Fig. 1 eine Referenzimplementierung zur Berechnung eines zyklischen Blockprüfungscodes (CRC) illustriert;
Fig. 2A und 2B die Matrix A illustrieren, die Verstärkungskoeffizienten für einen CRC-Schaltkreis als ihre rechten Elemente und A-R, was A-1 hoch dem Exponenten R ist, als ein Beispiel des Standard-32-Bit-CRCs und mit R = 8 hat;
Fig. 3 ein Implementierungsdiagramm des Nachbearbeitungsverfahrens illustriert;
Fig. 4 eine Implementierung einer transformierten Berechnung pro Programmabschnitt illustriert;
Fig. 5 eine Implementierung der Nachbearbeitungstechnik illustriert, die transformierte Gleichungen verwendet;
Fig. 6A und 6B eine Transformationsmatrix T bzw. ihre inverse Matrix T-1 illustrieren, die zur Berechnung der CRC- Bits mit M Bits zu einem Zeitpunkt für Daten, deren Länge in Bits kein Vielfaches von M ist, verwendet werden.
In den Figuren zeigen gleiche Bezugsnummern im Allgemeinen identische, funktionell ähnliche und/oder strukturell ähnliche Elemente an. Die Figur, in der ein Element zum ersten Mal erscheint, wird durch die linke(n) Zahl(en) in der Bezugsnummer angezeigt.
DETAILLIERTE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSARTEN I. Überblick über die vorliegende Erfindung
In der folgenden Beschreibung der bevorzugten Ausführungsarten wird auf die beiliegenden Zeichnungen, die einen Teil dieses Patenantrags darstellen, verwiesen, und in denen durch Illustration spezifischer illustrativer Ausführungsarten gezeigt ist, wie die Erfindung verwendet werden kann. Diese Ausführungsarten sind detailliert genug beschrieben, um Fachleuten die Verwendung der Erfindung zu ermöglichen, und es versteht sich, dass andere Ausführungen verwendet werden können und dass logische, mechanische und elektrische Änderungen gemacht werden können, ohne dass vom Sinn und Geltungsbereich der vorliegenden Erfindung Abstand genommen wird. Die folgende detaillierte Beschreibung darf somit nicht in einem begrenzenden Sinn verstanden werden.
Referenzimplementierungen von CRC-Berechnungen basieren auf einem Verschieberegister mit Rückkoppelung (shift register with feedback), das die Eingabedaten bitweise verarbeitet. Sowohl Hardware- wie Software-Implementierungen sind beschrieben worden, die durch die parallele Verarbeitung von M Bits der Eingabedaten zu einem Zeitpunkt eine höhere Effizienz erzielen. Für einen gegebenen Schaltkreis oder eine gegebene Prozessorgeschwindigkeit wächst der Durchsatz dieser parallelen CRC-Implementierungen mit M an. Da jedoch die Zahl der Bits in der zu schützenden Datenfolge fast immer ein Vielfaches von 8 ist, haben praktische Implementierungen der parallelen CRC-Berechnung M = 8 verwendet. Während einige Referenzen Durchsatzergebnisse für M < 8 präsentiert haben, hat keine beschrieben, wie die letzte, teilweise gefüllte Gruppe von M Bits gehandhabt werden soll.
Diese Darlegung beschreibt eine Nachbearbeitungstechnik, die die Berechnung des CRCs mit M Bits zu einem Zeitpunkt erlaubt, wenn die Länge der Datenfolge kein ganzzahliges Vielfaches von M Bits ist. Diese Technik verwendet Wissen über die Länge der Eingabedatenfolge, aber benötigt kein Wissen über die Eingabedaten selbst. Sowohl Hardware- wie auch Software-Implementierungen sind möglich. Die Technik kann mit einem bekannten Verfahren für parallele CRC- Berechnung verwendet werden. Es wird eine Anwendung der Technik mit einem im höchsten Grad effizienten Verfahren zur parallelen CRC-Berechnung, das in dem begleitenden Patentdokument beschrieben ist, gezeigt.
II. Überblick über die Lösung, die durch die vorliegende Erfindung zur Verfügung gestellt wird
Die hier beschriebene Nachbearbeitungstechnik basiert auf der Tatsache, dass Zustandsgleichungen, die zur Berechnung des CRCs verwendet werden, entweder einzelne Bits (Gleichung (7)) oder M Bits (Gleichung (13)) zu einem Zeitpunkt, in der Zeit rückwärts laufen gelassen werden können, um den Beitrag für den CRC von einem oder mehreren Bits am Ende der Eingabedatenfolge zu entfernen. Aus Gründen der Einfachheit wird die bitweise Zustandsgleichung (7) betrachtet. Für eine Eingabefolge u(n) der Länge N (d. h. für n = 0, . . ., N - 1) ist der CRC gleich x(N). Für gegebenes x(N) und u(N - 1), dem letzten Bit der Eingabefolge, findet man x(N - 1) als
x(N - 1) = A-1x(N) - A-1bu(N - 1) (14)
Per definitionem ist x(N - 1) der CRC der Folge, die aus den ersten N - 1 Bits von u(n) besteht. Ebenso ist festzustellen, dass wenn u(N - 1) bekanntermaßen gleich null ist, diese zeitumgekehrte Gleichung vereinfacht ist.
Das hier beschriebene Nachbearbeitungsverfahren wird durch Anwendung dieser Zeitumkehr auf die Blockzustandsgleichungen (13) abgeleitet. Bei R der größte gemeinsame Teiler von M und alle der möglichen Werte von N, wobei N die Anzahl der Bits in einer Eingabedatenfolge ist. Es ist zu beachten, dass für die meisten Anwendungen N von einem Datenrahmen zum nächsten variieren wird, aber im Allgemeinen ein ganzzahliges Vielfaches einer Zahl sein wird. Diese Zahl, die der größte gemeinsame Teiler aller möglichen Werte von N für die spezielle Übertragungsschnittstelle ist, teilt im Allgemeinen auch M und wird als R bezeichnet. Fast immer gilt R = 8. Die Eingabedatenfolge u(n) wird in Vektoren (d. h. Blöcke) uM(m) eingeteilt, jeder mit der Länge M, wie in Gleichung (12) angegeben. Für den Fall, dass N nicht ein ganzzahliges Vielfaches von M ist, betrachtet man uM(m) für m = 0, 1, . . ., mmax, wobei mmax = ceil ((N/M) - 1) und ceil(x) (ceil (ceiling), obere Grenze) die kleinste ganze Zahl größer oder gleich x ist. Der letzte Block, mit m = mmax, kann vollständig gefüllt oder teilweise gefüllt sein, abhängig davon, ob der Wert von N für den speziellen Datenrahmen, der durch u(n) dargestellt ist, ein ganzzahliges Vielfaches von M ist oder nicht. Im Allgemeinen enthalten die ersten r1R Bits des letzten Blocks die letzten r1R Bits von u(n), während die letzten r2R Bits des letzten Blocks keine Daten enthalten (und offensichtlich (r1 + r2)R = M ist). Angenommen, dass die letzten r2R Bits von UM(mmax) gleich null gesetzt werden. Dann enthält x(mmax + 1) den CRC der Datenfolge u'(n) der Länge N + r2R, gleich u(n) gefolgt von r2R Nullen.
Durch Konstruktion ist N + r2R ein ganzzahliges Vielfaches von sowohl M wie auch R. Offensichtlich hätte der CRC der erweiterten Folge u'(n) durch Verarbeitung von R Bits zu einem Zeitpunkt anstelle von M Bits zu einem Zeitpunkt gefunden werden können. Bei x'(r) der Zustandsvektor in den Blockzustandsgleichungen (13), modifiziert, um R Bits zu einem Zeitpunkt zu verarbeiten, d. h.
x'(r + 1) = ARx'(r) + BRuR(r) (15)
Die Rx1-Matrix uR(r) stellt hier die erweiterte Eingabefolge, die R mal zu einem Zeitpunkt genommen wird, dar; ihre Struktur ist aus Gleichung (12) ersichtlich. Unter Verwendung von Gleichung (15) ist x'(r2 + (N/R)) der CRC von u'(n).
Dann gilt offensichtlich
x'(r2 + (N/R)) = x(mmax + 1) (16)
Zusätzlich ist x'(N/R) der CRC der tatsächlichen Eingabefolge u(n). Gemäß der Argumentation, die zu Gleichung (14) führte, und unter Verwendung des Ergebnisses in Gleichung (16), ergibt sich, dass x'(N/R) durch Starten von x(mmax + 1) und Rückwärtslaufenlassen der Gleichung (15) für r2 Schritte berechnet werden kann. Da die letzten r2 Vektoren uR(r) durch Konstruktion identisch null sind, ist die benötigte Gleichung leicht geschrieben, nämlich
x'(N/R) = (A-R)r2 x'(r2 + (N/R)) = (A-R)r2 x(mmax + 1) (17)
Diese Gleichung ist die Basis des Nachbearbeitungsverfahrens, für das nun eine schrittweise Beschreibung gegeben wird. Eine Beschreibung einer bevorzugten Ausführungsart folgt.
III. Verfahren für die vorliegende Erfindung
Im Folgenden wird ein Verfahren zur Berechnung des CRC mit M Bits zu einem Zeitpunkt betrachtet. Für eine Eingabedatenfolge u(n) mit N als ein ganzzahliges Vielfaches von M wird das Verfahren einen Vektor, z. B. yCRC, erzeugen, der den CRC von u(n) enthält. Wie oben festgestellt, verwenden die meisten verwiesenen, bekannten Techniken die Blockzustandsgleichungen (13) direkt; in diesen Fällen wird yCRC der Zustandsvektor x(m) sein, nominal bei m = mmax + 1. Für das im begleitenden Patentdokument beschriebene Verfahren wird yCRC das Ergebnis einer linearen Transformation des Zustandsvektors, der mit einer modifizierten Version der Blockzustandsgleichungen (13) assoziiert ist, sein, wiederum nominal bei m = mmax + 1.
In der Tat, was das hier beschriebene Verfahren betrifft, sind die Details, wie yCRC gefunden wird, nicht wichtig. Die CRC-Berechnung geht um M Bits zu einem Zeitpunkt weiter, gemäß einem bekannten Verfahren, bis der letzte Block der M Bits erreicht ist. Dann:
Wenn der letzte Block voll ist, d. h. N/M ist eine ganze Zahl und r2 = 0, dann wird der Block direkt verarbeitet und die Berechnung von yCRC ist beendet. Der CRC von u(n) ist gleich yCRC.
Wenn der letzte Block uM(mmax) nicht voll ist, d. h. r2 < 0, dann:
  • 1. Setze die letzten r2R Bits des letzten Blocks gleich null.
  • 2. Verarbeite den letzten Block, aufgefüllt mit Nullen, um die Berechnung von yCRC zu beenden. Dieser Vektor enthält den CRC der Eingabefolge, an seinem Ende aufgefüllt mit r2R Nullen.
  • 3. Lasse Gleichung (15) "in der Zeit" für r2 Zeitschritte "rückwärts" laufen. Mit anderen Worten, führe für r2 Iterationen
    x'(r - 1) = A-R x'(r) (18)
    aus, mit der Anfangsbedingung bei r = r2 + (N/R) mit x'(r2 + (N/R)) = yCRC. Das Ergebnis, das x'(N/R) ist, ist der CRC von u(n).
An dieser Stelle sind drei Bemerkungen nötig. Erstens, es sollte offensichtlich sein, dass Gleichung (18) keine Ausführung erfordert, die physisch in der Zeit rückwärts läuft. Der Index r in Gleichung (18) ist virtuell. Die für die Ausführung dieser Gleichung benötigte Echtzeit hängt von der Implementierung ab. In der Tat ist es ein Schlüsselmerkmal dieses Verfahrens, dass die Zeitbeschränkungen für die Ausführung dieser Gleichung, wie unten beschrieben, gelockert sind. Zweitens, während in dem Verfahren die Ausführung von Gleichung (18) für r2 Zeitschritte angegeben worden ist, hätte genau so gut die Ausführung von Gleichung (17) mit r2 als ein Parameter angegeben werden können. Beide Lösungen sind akzeptabel, wobei die Wahl durch Überlegungen zur Implementierung bestimmt wird. Die angegebene Lösung erscheint für Hardware- Implementierungen einfacher, da r2 im Allgemeinen von Datenrahmen zu Datenrahmen variieren wird. Schließlich muss bemerkt werden, dass A-R gefunden werden kann, indem zuerst die adjungierte Matrix AR unter Verwendung "normaler Arithmetik" über die reellen Zahlen gefunden wird, vielleicht unter Verwendung standardmäßiger numerischer Methoden auf einem Rechner; die Inverse von AR über GF(2) wird dann durch Evaluierung der Elemente der adjungierten Matrix modulo 2 gefunden. Ähnlich wird die Matrix- Multiplikation in Gleichung (18) über GF(2) ausgeführt, unter Verwendung von modulo 2-Arithmetik.
Bevor mit der Beschreibung von Implementierungen dieses Verfahrens fortgefahren wird, soll als ein Beispiel der 32- Bit-CRC mit Polynom G32(z) (siehe Gleichung (2)), mit 32 Bit zu einem Zeitpunkt (d. h. M = 32) mit R = 8 berechnet, betrachtet werden. Die Matrizen A und A-R sind für diesen Fall mit Gleichung (19) gegeben, die in den Fig. 2A und 2B illustriert sind.
IV. Bemerkenswerte Implementierungen der vorliegenden Erfindung
Das Hauptinteresse hier liegt in Implementierungen, für die der Durchsatz maximiert ist. Deswegen wird der Augenmerk auf Hochleistungs-Hardware-Implementierungen gerichtet. Diese basieren auf einer Struktur, in der die Rekursion in Gleichung (18) "entrollt" und durch (r2)max Stufen im Pipelinesystem verarbeitet wird, wobei (r2)max = (M/R) - 1 der Maximalwert ist, den r2 annehmen kann. Dieser Ansatz ist in Fig. 3 dargestellt. Mit Bezug auf die Figur besteht jede Stufe aus:
  • 1. Einem Block, bezeichnet mit A-R, der das Produkt dieser Matrix und der Eingabe des Blocks, d. h. Gleichung (18), erzeugt. Für Arithmetik in GF(2) könnte der Block als eine Feldgruppe von Exklusiv-Oder-Gattern (array of exclusive-or-gates)(z. B. ungefähr so etwa wie die Ausführung von AM in [8]) gebaut werden. Eine effizientere Implementierung, basierend auf dem in dem begleitenden Patentdokument beschriebenen Verfahren, ist unten beschrieben.
  • 2. Einem Block, der entweder die Eingabe für die Stufe oder das Ergebnis der Matrix-Multiplikation (d. h. A-R mal die Eingabe an die Stufe) auswählt.
  • 3. Einem Verzögerungselement, das die Ausgabe des "AUSWAHL"-Blocks festhält und sie entweder als die Eingabe für die nächste Stufe oder, für den letzten Block, den CRC von der Eingabedatenfolge u(n) hält.
Die Figur zeigt außerdem einen Verzögerungspfad für die blockierte Eingabefolge uM. Der Zweck dieses Pfads liegt in der Gleichsetzung der Nettoverzögerung, die von der Eingabefolge gesehen wird, mit der Nettoverzögerung durch die gesamte CRC-Berechnung einschließlich der Nachbearbeitung. Dies stellt sicher, dass der berechnete CRC in der Zeit ordnungsgemäß mit dem letzten Datenblock ausgerichtet ist, sodass er an die Daten (zur Übertragung) angehängt oder geprüft werden kann und die Daten, falls notwendig (auf dem Empfangspfad) verworfen werden können. (Tatsächlich ist es das Komplement der Eins des CRCs, das an die Daten zur Übertragung angehängt wird. In der Figur wird angenommen, dass die Komplementierung der Eins in dem Block, der mit "PRÜFE oder HÄNGE AN") bezeichnet ist, durchgeführt wird. Die Prüf- oder Anhängfunktion würde in dem entsprechend bezeichneten Block durchgeführt werden.
Schließlich gibt es einen Block, der Steuersignale auf die "AUSWAHL"-Blöcke verteilt wie auch die Register und die Datenpfadverzögerung taktet.
Wiederum mit Bezug auf Fig. 3 wird die Eingabe an die r-te Stufe durch v(R) bezeichnet und die Ausgabe von seinem "AUSWAHL"-Block durch y(r), für r = 1, . . ., (r2)max. Die Regel, mit der der "AUSWAHL"-Block arbeitet, ist
y(r) = A-Rv(r); r = 1, . . ., r2
y(r) = v(r); r = r2 + 1, . . ., (r2)max (19)
Offensichtlich ist, wenn r2 = 0, dann gibt es keine Stufe, für die die erste Gleichung in (19) gilt, und wenn r2 = (r2)max, dann gibt es keine Stufe, für die die zweite Gleichung in (19) gilt. Zusätzlich gilt, dass v(1) = yCRC, während y((r2)max) gleich dem CRC der Eingabedatenfolge u(n) ist.
Außerdem gilt
v(r) = y(r - 1); r = 2, . . . (r2)max (20)
implementiert durch die Verzögerungselemente. Die Verzögerungselemente stellen die Verarbeitung im Pipelinesystem zur Verfügung, was erlaubt, die Zeit, die effektiv durch den Nachbearbeitungsprozess in Anspruch genommen wird, zu minimieren. Man betrachte den Fall, in dem Datenrahmen, die von einer Übertragungsschnittstelle empfangen werden, durch CRC-Berechnungsschaltlogik verarbeitet werden, die die in Fig. 3 gezeigte Nachbearbeitung verwenden. Wenn mehrere kurze Datenrahmen gleichzeitig empfangen werden, dann sorgt dieses Nachbearbeitungsverfahren für Folgendes:
  • 1. Zuerst kann die CRC-Berechnung eines Rahmens mit der Nachbearbeitung des vorigen Rahmens überlagert werden, da die Nachbearbeitungsschaltlogik von der CRC- Berechnungsschaltlogik getrennt ist. (Es ist zu beachten, dass in die Empfangsrichtung im Allgemeinen zwischen der Übertragungsschnittstelle und Register mit der Breite von M-Bits am Eingang der CRC- Berechnungsschaltlogik eine Umwandlung von seriell zu parallel erfolgt. Es wird angenommen, dass dies so erfolgt, dass das Ende von einem empfangenen Datenrahmen und der Anfang des nächsten nicht zur gleichen Zeit in diesem Register auftreten, d. h. dass der Anfang eines neuen Datenrahmens ausreichend verzögert ist, sodass er im Eingaberegister (es werden die Orientierung und Bezeichnungen von Gleichung (12) verwendet) rechts ausgerichtet ist. Die hier beschriebene Nachbearbeitungstechnik kann modifiziert werden, um in Fällen zu funktionieren, in denen diese Annahme nicht erfüllt ist. Diese Fälle sind jedoch außerhalb des Geltungsbereichs der vorliegenden Erfindung, da sie das Design der Umwandlung von seriell zu parallel beinhalten und somit Teil der Übertragungsschnittstelle selbst sind, wie auch das Design der CRC-Schaltkreislogik.)
  • 2. Zweitens, da die Stufen der Nachbearbeitungsschaltkreislogik im Pipelinesystem verarbeitet werden, kann die Nachbearbeitung eines Rahmens mit der Nachbearbeitung des vorigen Rahmens überlagert werden. Die für jede Stufe zur Verfügung stehende Zeit (und somit die Taktung der Verzögerungselemente) hängt von der Zahl der Stufen ab, der minimalen Länge der empfangenen Datenrahmen und der minimalen Leerlaufzeit zwischen aufeinander folgenden, empfangenen Datenrahmen.
Man betrachte wiederum das Beispiel von oben mit M = 32 und R = 8, sodass (r2)max = 3 ist. Die minimale Datenrahmengröße und minimale Zwischenrahmenperiode wird so gewählt, dass wenn gleichzeitige minimale Rahmengrößen empfangen werden, das 32-Bit-Eingaberegister an dem Eingang der CRC- Berechnungsschaltkreislogik den Anfang eines neuen Datenrahmens mit jedem weiteren 32-Bit-Zyklus enthält (wobei die Zeit für einen 32-Bit-Zyklus dieses Registers gleich 32 Bit-Zeiten an der Übertragungsschnittstelle ist). In einem Design für maximalen Durchsatz (z. B. unter Verwendung der CRC-Berechnungstechnik, die in dem begleitenden Patentdokument beschrieben ist), wird die CRC-Berechnung für jede 32 Bits innerhalb 32 Bit-Zeiten oder eines einzigen Takts des 32-Bit-Eingaberegisters beendet. Somit ist das anfängliche CRC-Ergebnis yCRC für den vorigen Rahmen fertig für die Nachbearbeitung, wenn der Anfang eines Datenrahmens im Eingaberegister fertig ist; das anfängliche CRC-Ergebnis yCRC für diesen neuen Rahmen wird für die Nachbearbeitung zwei 32-Bit-Zyklen (oder 64 Bit-Zeiten) später fertig sein. (Die im begleitenden Patentdokument beschriebene Technik verwendet selbst die Verarbeitung im Pipelinesystem, um "Mediengeschwindigkeit" für die CRC-Berechnung zu erreichen. Um die Diskussion hier zu vereinfachen, wird jegliche Verzögerung bei der Verarbeitung im Pipelinesystem durch die CRC-Berechnungsschaltkreislogik ignoriert, d. h., es wird bei der Beschreibung der Vorgänge in diesem Beispiel angenommen, dass es keine Verzögerung bei der Verarbeitung im Pipelinesystem gibt.) In diesem Beispiel, wenn jede Stufe in der Nachbearbeitungspipeline innerhalb zwei 32-Bit-Zyklen beendet wird, können die Verzögerungselemente in Fig. 3 mit dieser Rate getaktet werden, und die Nachbearbeitung hält immer mit dem empfangenen Datenstrom Schritt.
Ob es möglich ist oder nicht, dass jede Stufe der Nachbearbeitung in der Zeit, die erforderlich ist, um mit gleichzeitigen Datenrahmen minimaler Länge (zwei 32-Bit- Zyklen im obigen Beispiel) Schritt zu halten, abgeschlossen wird, hängt von vielen Faktoren ab. Für das im begleitenden Patentdokument beschriebene Verfahren für maximalen Durchsatz ist der maximal mögliche Durchsatz für CRC- Berechnung M/tc Bits/s, wobei t, die Zeit (in Sekunden) ist, die zur Beendigung zweier Doppeleingang-Exklusiv-Oder- Operationen und einer Ein-Bit-Registerverschiebung erforderlich ist; mit anderen Worten, die Zeit, die durch einen M-Bit-Zyklus (ein 32-Bit-Zyklus im obigen Beispiel) belegt wird, ist tc Sekunden, mit tc, wie definiert. Im obigen Beispiel steht eine Periode von 2tc Sekunden für jede Stufe der Nachbearbeitung zur Verfügung, die aus dem Durchlauf durch die Feldgruppe von Exklusiv-Oder-Gattern, die das Matrix-Produkt A-Rv(r) über GF(2) implementiert, die "AUSWAHL"-Funktion und das Register, wie in Fig. 3 gezeigt, besteht. Im Allgemeinen ist es nicht für alle Schritte pro Stufe möglich, innerhalb von 2tc Sekunden beendet zu werden. Es ist jedoch möglich, die Feldgruppe von Exklusiv-Oder- Gattern in Substufen aufzubrechen, die selbst im Pipelinesystem verarbeitet werden, sodass jede Substufe im gesamten Nachbearbeitungssystem innerhalb von 2tc Sekunden beendet werden kann. Es ist ein wichtiger Vorteil des hier beschriebenen Verfahrens und seiner Implementierung mit der Rekursion von Gleichung (18) "entrollt", wie in Fig. 3 dargestellt, dass dieser Grad von Verarbeitung im Pipelinesystem möglich ist.
Es kann natürlich Anwendungen geben, in denen ein neuer Datenrahmen mit jedem M-Bit-Zyklus beginnen kann, sodass die zur Verfügung stehende Zeit für jede Stufe (oder Substufe) der Nachbearbeitungspipeline auf tc Sekunden begrenzt ist. Während dies bei der Verwendung der gerade beschriebenen Aufteilung in Substufen möglich ist, kann die Implementierung kompliziert sein, da jede Stufe in einer entrollten Rekursion aufgeteilt sein muss. Tatsächlich kann durch Anwendung des in dem begleitenden Patentdokument beschriebenen Verfahrens zur CRC-Berechnung auf die hier beschriebene Nachbearbeitungstechnik (insbesondere Gleichung (18) oder (20)) das gewünschte Ergebnis durch Vereinfachung der auf jeder Stufe ausgeführten Berechnung erreicht werden, wodurch der Bedarf, Stufen zu unterteilen, eliminiert wird. Zwei zusätzliche Berechnungsschritte sind erforderlich, aber diese sind außerhalb der in Fig. 3 gezeigten entrollten Rekursion. Das Anwenden dieses Verfahrens hier garantiert, dass die Nachbearbeitung mit dem Eintreffen eines neuen Rahmens in jedem M-Bit-Intervall Schritt halten kann.
Das Verfahren im dem begleitenden Patentdokument arbeitet mit der Transformation des Zustandsvektors in Gleichung (13), sodass die rechnerische Komplexität im kritischen Taktungspfad für die transformierten Gleichungen minimiert ist. Die für jede Iteration der transformierten Gleichungen erforderliche Zeit, bei der M Bits verarbeitet werden, ist genau die Zeit, die zum Beenden zweier Doppeleingang- Exklusiv-Oder-Operationen und einer Ein-Bit- Registerverschiebung erforderlich ist. Eine entsprechende Transformation kann auf die oben beschriebene Nachbearbeitung angewendet werden, z. B. auf die durch Gleichung (20) dargestellte Implementierung. Man betrachte eine lineare Transformation der Vektoren v(r) und y(r) durch eine konstante, nicht-singuläre Matrix T, d. h.
v(r) = Tvt(r); y(r) = Tyt(r) (21)
wo vt(r) die transformierte Version des Vektors v(r) und yt(r) die transformierte Version des Vektors y(r) ist.
Gleichungen (20) und (21) können jetzt wie folgt neu geschrieben werden:
yt(r) = ARtvt(r); r = 1, . . ., r2
yt(r) =vt(r); r = r22 + 1, . . ., (r2)max (22)
vt(r) = yt(r - 1); r = 2, . . ., (r2)max
mit vt(1) = T-1yCRC, während Tyt((r2)max) gleich dem CRC der Eingabedatenfolge u(n) ist. Die Matrix ARt ist
ARt = T-1 A-R T (23)
Unter Verwendung des im begleitenden Patentdokument beschriebenen Verfahrens wird die Matrix T so konstruiert, dass ARt die gleiche Form wie die Matrix A in Gleichung (9) hat. Man hat
wobei das Polynom H(z), dessen Koeffizienten in der rechten Spalte von ARt sind, d. h.
das charakteristische Polynom von A-R über GF(2) ist. Eine Implementierung der ersten zwei Gleichungen in (23) zusammen mit der dazugehörigen "AUSWAHL"-Funktion, wobei ARt durch Gleichung (25) gegeben ist, ist in Fig. 4 gezeigt, wo die folgende Notation verwendet wird
vt(r) = [vt0(r)vt1(r) . . . vt(K-1)(r)]T (26)
und ähnlich für yt(r). Man erinnere sich jetzt, dass für die Arithmetik in GF(2) die Summierelemente in der Figur Doppeleingang-Exklusiv-Oder-Gatter sind, während jedes Verstärkungselement entweder ein offener Schaltkreis oder ein Kurzschlussschaltkreis ist. Für eine typische Implementierung der Gatter für die "AUSW"-Blöcke wird die Zeit, die für die Berechnung und Auswahl, die in Fig. 4 gezeigt ist, erforderlich ist, gleich der für zwei Doppeleingang-Exklusiv-Oder-Funktionen sein. Die Gesamtzeit für jede Stufe, einschließlich seiner Ausgaberegister, wird ungefähr gleich tc sein. Das Nachbearbeitungssubsystem in Fig. 3 ist in Fig. 5 noch einmal mit den Blöcken, die die Multiplikation von NR durchführen, und der Auswahlfunktion auf jeder Stufe, die durch einen Block ersetzt ist, der das in Fig. 4 Dargestellte enthält, gezeichnet.
Es ist zu beachten, dass Fig. 5 die Multiplikation von yCRC mit T-1 wie auch die Multiplikation der Ausgabe der letzten Stufe mit T, um den CRC zu erhalten, enthält. Diese Produkte erhält man durch Verwendung von Exklusiv-Oder-Feldgruppen. Um die Zeitvorgabe einzuhalten, müssen diese Feldgruppen aufgeteilt und im Pipelinesystem verarbeitet werden. Ein Ansatz zum Verarbeiten dieser Feldgruppen im Pipelinesystem ist im begleitenden Patentdokument beschrieben.
Der Vorteil der Implementierung in Fig. 5 gegenüber der in Fig. 3 besteht darin, dass sie die Stufen der entrollten Rekursion zu möglichst einfachen Strukturen reduziert hat. Dafür müssen im Gegenzug für diese Einfachheit die Matrix- Multiplikationen, die zur Transformation von yCRC und zu Y((r2)max) gehören, hinzugefügt werden. Ob die Implementierung in Fig. 5 der in Fig. 3 überlegen ist, hängt von den Parameterwerten (z. B. K, M, R) und anderen Details (z. B. minimaler Datenrahmengröße und Zwischenankunftperiode) für die jeweilige Anwendung ab. Beachtenswert ist jedoch, dass wenn das im begleitenden Patentdokument beschriebene Verfahren für die CRC-Berechnung (d. h. um yCRC zu erhalten) verwendet wird, dann die erste in Fig. 5 gezeigte Transformation mit einer Transformation kombiniert werden kann, die der letzte Schritt der CRC-Berechnung im begleitenden Patentdokument ist; in diesem Fall wird das Kästchen, das mit T-1 unten in Fig. 5 bezeichnet ist, eliminiert, und die Implementierung in Fig. 5 ist fast immer der in Fig. 3 überlegen. Für einen kurzen Blick auf die Funktionsweise ist zu beachten, dass das Verfahren im begleitenden Patentdokument den CRC durch Anwenden einer Transformation auf die Blockzustandsgleichungen (13) berechnet. Man erhält
yCRC = Wxt(mmax) (27)
wobei xt(m) der transformierte Zustandsvektor zur Berechnung des CRCs ist, der M Bits zu einem Zeitpunkt nimmt, wobei mmax wie im Text oben auf Seite 5 definiert ist, und W die konstante, nicht-singuläre Matrix ist, die die Transformation definiert. Mit anderen Worten, man kann vt(1) direkt aus xt(mmax) erhalten als
vt(1) = T-1Wxt(mmax) (28)
Das Produkt T-1W ist natürlich selbst eine Matrix über GF(2), sodass die Transformation in Gleichung (29) mit einer Einzel-Exklusiv-Oder-Feldgruppe realisiert werden kann. Von hier ab ist es einfach, ein Blockdiagramm eines kompletten CRC-Berechnungssystems einschließlich Nachbearbeitung zu zeichnen, das auf den hier und im begleitenden Patentdokument beschriebenen Verfahren basiert.
In der Empfangsrichtung können tatsächlich sowohl das Kästchen, das mit T-1 bezeichnet ist, als auch das Kästchen, das mit T bezeichnet ist (das in den Block mit "CRC- ERGEBNISREGISTER" mündet), weggelassen werden, sodass nur die dargestellten Verschieberegisterblöcke zur Kompensation für die Null-Auffüllung gebraucht werden. Die Gründe dafür sind im begleitenden Patentdokument erläutert.
Vor der Schlussbemerkung ist es lohnenswert, das oben beschriebene Beispiel durch die in Gleichungen (22) bis (24) definierten Transformationen zu Ende zu verfolgen, sodass ARt die durch Gleichung (25) gegebene Form hat. Mit dem Erzeugerpolynom G32(z) und R = 8 erhält man für H(z)
H(z) = z32 + z31 + z30 + z28 + 727 + z25 + z24 + z22 + z21 + z20 + z16 + z10 + z9 + z6 + 1 (29)
und unter Verwendung des im begleitenden Patentdokument beschriebenen Verfahrens erhält man T bzw. T-1, die Matrizen, die in den Fig. 6A und 6B dargestellt sind.
V. Bemerkenswerte Anwendungen der vorliegenden Erfindung
Das hier beschriebene Verfahren ist im Kontext von Hochgeschwindigkeits-Übertragungsschnittstellen von größtem Interesse, wo Hardwarelösungen für parallele CRC- Berechnungen zur Maximierung des Durchsatzes verwendet werden. Als eine Folge wurde der Schwerpunkt auf Hardware- Implementierungen des Nachbearbeitungsverfahrens gelegt. Wie oben erörtert, würden bevorzugte Ausführungsarten die im begleitenden Patentdokument beschriebene Technik zur Umsetzung des Nachbearbeitungsverfahrens verwenden, wobei diese Technik auch zur Ausführung der parallelen CRC- Berechnung selbst verwendet wird.
Beachtet werden sollte, dass Software-Implementierungen des Nachbearbeitungsverfahrens möglich sind. Diese könnten die Verwendung von Tabellen zur Durchführung der "Rückwärts"- Berechnung in Gleichung (18) beinhalten, die einen Ansatz verfolgt, der dem in (6) ähnlich ist, der in einer Software- Implementierung der Berechnung in Gleichungen (13) Tabellen verwendet.
Während die Erfindung insbesondere mit Bezug auf ihre bevorzugten Ausführungsarten gezeigt und beschrieben worden ist, verstehen Fachleute, dass dabei vielfältige Änderungen in Form und Details gemacht werden können, ohne vom Sinn und Geltungsbereich der Erfindung abzuweichen.

Claims (19)

1. Verfahren zur Berechnung von zyklischem Blockprüfungscode (cyclic redundancy code, CRC) zur Verwendung in einem Übertragungsdatenstrom mit M Bits zu einem Zeitpunkt für eine Eingabefolge u(n), deren Länge kein Vielfaches von M ist, das umfasst:
  • a) Darstellung eines zu schützenden Datenrahmens als Eingabefolge;
  • b) Bestimmung eines CRCs für die Eingabefolge mit M Bits zu einem Zeitpunkt aus einem Zustandsvektor, bis der letzte Block der Eingabefolge erreicht ist;
  • c) wenn der letzte Block der Eingabefolge voll ist, dann Bestimmung des CRCs als ein vollständiger CRC; und
  • d) wenn der letzte Block der Eingabefolge nicht voll ist, dann:
    • a) gleich null Setzen einer Anzahl der letzten Bits des letzten Blocks;
    • b) Verarbeiten des letzten Blocks, der mit der Anzahl der letzten Bits gleich null aufgefüllt wurde, gemäß den Schritten (i) und (ii), um einen neuen CRC (yCRC) zu bestimmen; und
    • c) in der Zeit Rückwärtslaufenlassen des Zustandsvektors, um einen vollständigen CRC zu be stimmen.
2. Verfahren gemäß Anspruch 1, das des Weiteren umfasst:
  • a) Anhängen des vollständigen CRCs als eine Rahmenprüfbitfolge (frame-check sequence, FCS) an den Übertragungsdatenstrom zur Erkennung durch ein Empfangsgerät.
3. Verfahren gemäß Anspruch 1, Eingabefolge u(n) ist im Feld der ganzen Zahlen modulo 2 (GF(2)) definiert.
4. Verfahren gemäß Anspruch 1, worin Schritt (1) des Weiteren umfasst:
Gruppierung der Elemente der Eingabefolge in Blöcke der Länge M; und
Darstellung der Eingabefolgen in einer blockorientierten Weise als
uM(mmax) = [u(mM + M - 1) u(mM + M - 2) . . . u(mM + 1) u(mM)]T,
worin m = 0, 1, . . ., mmax, worin mmax gleich (N/M) - 1 ist.
5. Verfahren gemäß Anspruch 1, worin der Zustandsvektor durch
x (m + 1) = AM x(m) + BM uM(m),
dargestellt ist,
worin m eine ganze Zahl ist,
worin A eine KxK-Matrix ist, die die Koeffizienten eines CRC-Erzeugerpolynoms enthält,
worin x(m) ein K-dimensionaler Zustandsvektor ist, der mit [x0(m) x1(m) . . . xK-1(m)]T definiert ist,
worin BM eine KxM-Matrix ist, deren Spalten durch die Multiplikation von b mit den aufeinander folgenden höheren Ordnungen von A bestimmt sind, und
worin b ein K-dimensionaler Vektor ist, der einen oder mehrere Koeffizienten eines CRC-Erzeugerpolynoms enthält.
6. Verfahren gemäß Anspruch 5, worin der letzte Block mit uM(mmax) dargestellt ist, und worin, ob die Eingabefolge voll ist, durch Bestimmung, ob eine Größe N/M eine ganze Zahl und eine Größe r2 = 0 ist, festgestellt wird,
worin N die Länge der Eingabefolge ist,
worin R der größte gemeinsame Teiler von M ist, und
worin die letzten (r2)(R) Bits des letzten Blocks uM(mmax) Nullen sind.
7. Verfahren gemäß Anspruch 5, worin Schritt (iv)(a) das gleich null Setzen der (r2)(R) Bits des letzten Blocks umfasst.
8. Verfahren gemäß Anspruch 5, worin der neue CRC (yCRC) den CRC der Eingabefolge, an seinem Ende mit r2R Nullen erweitert, enthält,
worin R der größte gemeinsame Teiler von M ist, und
worin r2 durch die Tatsache definiert ist, dass die letzten (r2)(R) Bits des letzten Blocks Nullen sind.
9. Verfahren gemäß Anspruch 5, worin Schritt (iv)(c) die Ausführung für r2 Iterationen von
x'(r - 1) = A-R x'(r)
umfasst, bis x'(r - 1) = x'(N/R), was dem vollständigen CRC entspricht, worin R der größte gemeinsame Teiler von M ist, und worin r2 durch die Tatsache definiert ist, dass die letzten (r2)(R) Bits des letzten Blocks Nullen sind,
worin r anfänglich durch (r2 + (N/R)) definiert ist, und
worin x'(r2 + (N/R)) gleich dem neuen CRC (yCRC) ist.
10. System zur Berechnung von zyklischem Blockprüfungscode (CRC) zur Verwendung in einem Übertragungsdatenstrom mit M Bits zu einem Zeitpunkt für eine Eingabefolge u(n), deren Länge kein Vielfaches von M ist, das umfasst:
Vorrichtung, die einen zu schützenden Datenrahmen als Eingabefolge darstellt;
Vorrichtung, die einen CRC für die Eingabefolge mit M Bits zu einem Zeitpunkt aus einem Zustandsvektor bestimmt, bis der letzte Block der Eingabefolge erreicht ist;
Vorrichtung, die den CRC als einen vollständigen CRC bestimmt, wenn der letzte Block der Eingabefolge voll ist; und
CRC-vervollständigende Vorrichtung, die eine Anzahl der letzten Bits des letzten Blocks gleich null setzt;
den letzten Block, der mit der Anzahl der letzten Bits gleich null aufgefüllt ist, unter Verwendung der Rahmendarstellungsvorrichtung und der CRC- Bestimmungsvorrichtung verarbeitet, um einen neuen CRC (yCRC) zu bestimmen; und
den Zustandsvektor in der Zeit rückwärts laufen lässt, um einen vollständigen CRC zu bestimmen, wenn der letzte Block der Eingabefolge nicht voll ist.
11. System gemäß Anspruch 10, das des Weiteren umfasst:
Vorrichtung, die den vollständigen CRC als eine Rahmenprüfbitfolge (frame-check sequence, FCS) an den Übertragungsdatenstrom zur Erkennung durch ein Empfangsgerät anhängt.
12. System gemäß Anspruch 10, Eingabefolge u(n) ist im Feld der ganzen Zahlen modulo 2 (GF(2)) definiert.
13. System gemäß Anspruch 10, worin Schritt (i) des Weiteren umfasst:
Vorrichtung, die die Elemente der Eingabefolge in Blöcke der Länge M gruppiert; und
Vorrichtung, die die Eingabefolgen in einer blockorientierten Weise darstellt als
uM(mmax) = [u (mM + M - 1) u (mM + M - 2) . . . u(mM + 1) u(mM)]T,
worin m = 0, 1, . . ., mmax, worin mmax gleich (N/M) - 1 ist.
14. System gemäß Anspruch 10, worin der Zustandsvektor durch
x(m + 1) = AM x(m) + BM uM(m),
dargestellt ist,
worin m eine ganze Zahl ist,
worin A eine KxK-Matrix ist, die die Koeffizienten eines CRC-Erzeugerpolynoms enthält,
worin x(m) ein K-dimensionaler Zustandsvektor ist, der durch [x0(m) x1(m) . . . xK-1(m)]T definiert ist,
worin BM eine KxM-Matrix ist, deren Spalten durch die Multiplikation von b mit den aufeinander folgenden höheren Ordnungen von A bestimmt sind, und
worin b ein K-dimensionaler Vektor ist, der einen oder mehrere Koeffizienten eines CRC-Erzeugerpolynoms enthält.
15. System gemäß Anspruch 14, worin der letzte Block mit uM(mmax) dargestellt ist, und worin, ob die Eingabefolge voll ist, durch Bestimmung, ob eine Größe N/M eine ganze Zahl und eine Größe r2 = 0 ist, festgestellt wird,
worin N die Länge der Eingabefolge ist,
worin R der größte gemeinsame Teiler von M ist, und
worin die letzten (r2)(R) Bits des letzten Blocks uM(mmax) Nullen sind.
16. System gemäß Anspruch 14, worin die CRC­ vervollständigende Vorrichtung umfasst:
Vorrichtung, die (r2)(R) Bits des letzten Blocks gleich null setzt.
17. System gemäß Anspruch 14, worin der neue CRC (yCRC) den CRC der Eingabefolge, an seinem Ende mit r2R Nullen erweitert, enthält,
worin R der größte gemeinsame Teiler von M ist, und
worin r2 durch die Tatsache definiert ist, dass die letzten (r2)(R) Bits des letzten Blocks Nullen sind.
18. System gemäß Anspruch 14, worin die CRC- vervollständigende Vorrichtung umfasst:
Mittel, die
x'(r - 1) = A-R x'(r)
für r2 Iterationen ausführen, bis x'(r - 1) x'(N/R), was wiederum dem vollständigen CRC entspricht,
worin R der größte gemeinsame Teiler von M ist, und
worin r2 durch die Tatsache definiert ist, dass die letzten (r2)(R) Bits des letzten Blocks Nullen sind,
worin r anfänglich durch (r2 + (N/R)) definiert ist, und
worin x'(r2 + (N/R)) gleich dem neuen CRC (yCRC) ist.
19. Verfahren zur Erkennung eines Fehlers in einem Übertragungsdatenstrom, das umfasst:
  • a) Darstellung eines zu schützenden Datenrahmens als Eingabefolge u(n) über GF(2) (Feld der ganzen Zahlen modulo 2);
  • b) Bestimmung eines CRCs für die Eingabefolge aus der Gleichung
    CRC = (A-R)r2x(mmax + 1)
    worin x (mmax + 1) durch AMx(mmax) + BM uM(mmax) definiert ist,
    worin uM(mmax) durch [u(mM + M - 1) u(mM + M - 2) . . . u(mM + 1) u(mM)]T definiert ist, wobei m = 0, 1, . . ., (N/M) - 1,
    worin N die Länge der Eingabefolge ist,
    worin M die Länge eines Blocks der Eingabefolge ist,
    wobei die Eingabefolge in Blöcke gruppiert ist,
    worin b(n) ein K-dimensionaler Vektor ist, der einen oder mehrere Koeffizienten eines CRC-Erzeugerpolynoms enthält,
    worin BM eine KxM-Matrix ist, deren Spalten durch die Multiplikation von b(n) mit den aufeinander folgenden höheren Ordnungen von A bestimmt sind,
    worin A eine KxK-Matrix ist, die die Koeffizienten des CRC-Erzeugerpolynoms enthält,
    worin x(mmax) ein K-dimensionaler Zustandsvektor ist, der durch [x0(mmax) x1(mmax) . . . xK-1(mmax)]T definiert ist,
    worin mmax die kleinste ganze Zahl größer als oder gleich (N/M - 1) ist,
    worin K der Grad des CRC-Erzeugerpolynoms ist,
    worin R der größte gemeinsame Teiler von M ist,
    worin (r1 + r2)R gleich M ist, und
    worin die letzten (r2)(R) Bits des letzten Blocks uM(mmax) Nullen sind,
  • c) Anhängen des CRCs als Rahmenprüfbitfolge (frame-check sequence, FCS) an den Übertragungsdatenstrom zur Erkennung durch ein Empfangsgerät.
DE10105626A 2000-03-07 2001-02-08 Verfahren und System zur Berechnung von zyklischem Blockprüfungscode und Verfahren zum Erkennen eines Fehlers Expired - Fee Related DE10105626B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US520048 2000-03-07
US09/520,048 US6519737B1 (en) 2000-03-07 2000-03-07 Computing the CRC bits at a time for data whose length in bits is not a multiple of M

Publications (2)

Publication Number Publication Date
DE10105626A1 true DE10105626A1 (de) 2001-09-27
DE10105626B4 DE10105626B4 (de) 2006-07-06

Family

ID=24070984

Family Applications (1)

Application Number Title Priority Date Filing Date
DE10105626A Expired - Fee Related DE10105626B4 (de) 2000-03-07 2001-02-08 Verfahren und System zur Berechnung von zyklischem Blockprüfungscode und Verfahren zum Erkennen eines Fehlers

Country Status (2)

Country Link
US (1) US6519737B1 (de)
DE (1) DE10105626B4 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10243319A1 (de) * 2002-09-18 2004-04-01 Daimlerchrysler Ag Sichere Datenübertragung
DE102006008466A1 (de) * 2006-02-23 2007-08-30 Infineon Technologies Ag Flexible Beschleunigungseinheit für die Verarbeitung von Datenpaketen

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6647428B1 (en) * 2000-05-05 2003-11-11 Luminous Networks, Inc. Architecture for transport of multiple services in connectionless packet-based communication networks
US7103822B2 (en) * 2001-12-21 2006-09-05 International Business Machines Corporation Method and apparatus for computing ‘N-bit at a time’ CRC's of data frames of lengths not multiple of N
US7290196B1 (en) 2003-03-21 2007-10-30 Cypress Semiconductor Corporation Cyclical redundancy check using nullifiers
US7191383B2 (en) * 2003-03-28 2007-03-13 International Business Machines Corporation System and method for optimizing iterative circuit for cyclic redundancy check (CRC) calculation
US7434150B1 (en) * 2004-03-03 2008-10-07 Marvell Israel (M.I.S.L.) Ltd. Methods, circuits, architectures, software and systems for determining a data transmission error and/or checking or confirming such error determinations
US7266760B1 (en) * 2004-09-30 2007-09-04 Altera Corporation Method and apparatus for calculating cyclic redundancy checks for variable length packets
US7433877B2 (en) * 2005-10-13 2008-10-07 International Business Machines Corporation System and method to dynamically check string length
US20070088732A1 (en) * 2005-10-13 2007-04-19 Yen-Fu Chen Dynamic string length checking for off-line processing using client-side caching of database catalog
US7603365B2 (en) 2005-10-13 2009-10-13 International Business Machines Corporation System and method for capture and processing of overflow characters from user input
JP4764973B2 (ja) * 2005-12-09 2011-09-07 独立行政法人産業技術総合研究所 Crc値の算出装置
EP1981171B1 (de) 2007-04-13 2012-07-04 Alcatel Lucent Vorrichtung und Verfahren zur parallelen Generierung von Cyclic Redundancy Check (CRC) Kodes
US8892983B2 (en) * 2008-11-04 2014-11-18 Alcatel Lucent Method and apparatus for error detection in a communication system
US20120173952A1 (en) * 2010-12-29 2012-07-05 Kumar K Venkat Praveen Parallel crc computation with data enables
US8443256B2 (en) 2011-01-24 2013-05-14 Xilinx, Inc. Method and apparatus for determining a cyclic redundancy check (CRC) for a data message
US8839062B2 (en) 2012-01-11 2014-09-16 International Business Machines Corporation Incremental modification of an error detection code background of the invention

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3601800A (en) 1969-09-30 1971-08-24 Ibm Error correcting code device for parallel-serial transmissions
US3622985A (en) 1969-11-25 1971-11-23 Ibm Optimum error-correcting code device for parallel-serial transmissions in shortened cyclic codes
EP0406507B1 (de) 1989-07-07 1994-06-01 International Business Machines Corporation Blockkodierungsschema für die Übertragung von partiellen Bits
US5734826A (en) 1991-03-29 1998-03-31 International Business Machines Corporation Variable cyclic redundancy coding method and apparatus for use in a multistage network
JP2821324B2 (ja) 1992-11-04 1998-11-05 三菱電機株式会社 誤り訂正回路
JPH07504312A (ja) 1992-12-29 1995-05-11 コーデックス・コーポレイション 効率的なcrc剰余係数発生および検査装置および方法
JP3236758B2 (ja) 1995-06-26 2001-12-10 カネボウ株式会社 可変長データのcrc演算装置
US5619168A (en) * 1995-08-07 1997-04-08 Lucent Technologies Inc. Distortion creation and reduction circuit
US5878057A (en) 1995-10-06 1999-03-02 Tektronix, Inc. Highly parallel cyclic redundancy code generator
US5671238A (en) * 1995-10-31 1997-09-23 National Science Council Of R.O.C. Method and circuitry for generating r-bit parallel CRC code for an l-bit data source

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10243319A1 (de) * 2002-09-18 2004-04-01 Daimlerchrysler Ag Sichere Datenübertragung
DE10243319B4 (de) * 2002-09-18 2004-08-12 Daimlerchrysler Ag Sichere Datenübertragung
DE102006008466A1 (de) * 2006-02-23 2007-08-30 Infineon Technologies Ag Flexible Beschleunigungseinheit für die Verarbeitung von Datenpaketen
DE102006008466B4 (de) * 2006-02-23 2011-07-21 Lantiq Deutschland GmbH, 85579 Flexible Beschleunigungseinheit für die Verarbeitung von Datenpaketen

Also Published As

Publication number Publication date
US6519737B1 (en) 2003-02-11
DE10105626B4 (de) 2006-07-06

Similar Documents

Publication Publication Date Title
DE10105626B4 (de) Verfahren und System zur Berechnung von zyklischem Blockprüfungscode und Verfahren zum Erkennen eines Fehlers
DE69919199T2 (de) Vorwärtsfehlerkorrektur
DE69834542T2 (de) Hardwareoptimierter reed-solomon-decoder zur decodierung grosser datenblöcke
DE4241903C2 (de) Euklidische wechselseitige Divisionsschaltung
DE4229666C2 (de) Wechselseitig arbeitende Divisionsschaltung
DE69731932T2 (de) Verfahren und Vorrichtung für zweistufige CRC-32-Berechnung
DE2106314B2 (de) Anordnung zur Fehlererkennung und -korrektur in einem aus b Bits bestehenden Byte eines K Datenbytes enthaltenden Datenblocks
DE4220196C2 (de) Halbleiterspeichervorrichtung und Verfahren zum Korrigieren eines Datenfehlers in einer Halbleiterspeichervorrichtung entsprechend einer vorbestimmten Hamming-Matrix
DE602005000251T2 (de) Dekoder zur Fehlerkorrektur mit einem Reed-Solomon Dekoder zur Erasure-Korrektur und einem CRC Dekoder
EP0545498A2 (de) Verfahren und Schaltungsanordnung zum Decodieren von RS-codierten Datensignalen
DE1474359B2 (de) Fehlerkorrekturschaltung
DE4105860C2 (de) Schaltungsanordnung zum Erkennen und Korrigieren von Fehlern in Datenworten
DE10141460A1 (de) Potenzrestberechnungseinheit unter Verwendung eines Montgomery-Algorithmus
WO2003093969A2 (de) Berechnen eines ergebnisses einer modularen multiplikation
DE3702697C2 (de)
DE60306709T2 (de) Vorrichtung und Verfahren zur Erzeugung von zyklischen Codes für die Fehlerkorrektur in digitaler Kommunikation
EP1430614B1 (de) Verfahren und vorrichtung zur bestimmung von initialisierungszuständen bei pseudo-noise-folgen
Hentzel et al. A dynamic programming method for building free algebras
US6484192B1 (en) Root finding method and root finding circuit of quadratic polynomial over finite field
Wedeniwski Primality tests on commutator curves
DE4333382A1 (de) Verfahren und Vorrichtung zum Bilden des Reziproken eines beliebigen Elementes in einem finiten Feld
Halbutoğullari et al. Mastrovito multiplier for general irreducible polynomials
Fathima et al. A maximum entropy approach to interpolation
EP1109320B1 (de) Einrichtung zur Datenumsetzung für einen Reed-Solomon Dekodierer
Sebek One more counterexample in nD systems-Unimodular versus elementary operations

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8364 No opposition during term of opposition
8320 Willingness to grant licences declared (paragraph 23)
8328 Change in the person/name/address of the agent

Representative=s name: DUSCHER, R., DIPL.-PHYS. DR.RER.NAT., PAT.-ANW., 7

R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee