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ägtInfo
- 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
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/09—Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
- H03M13/091—Parallel or block-wise CRC computation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/61—Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
- H03M13/615—Use of computational or mathematical techniques
- H03M13/616—Matrix 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
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.
[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).
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).
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.
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.
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
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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)
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)
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 |
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 |
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 |
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)
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 |
DE68915758T2 (de) | 1989-07-07 | 1994-12-08 | Ibm | 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 | 三菱電機株式会社 | 誤り訂正回路 |
EP0631703A4 (de) | 1992-12-29 | 1996-03-20 | Codex Corp | Gerät und verfahren zur leistungsfähige generation und prüfung von crc resten. |
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 |
-
2000
- 2000-03-07 US US09/520,048 patent/US6519737B1/en not_active Expired - Fee Related
-
2001
- 2001-02-08 DE DE10105626A patent/DE10105626B4/de not_active Expired - Fee Related
Cited By (4)
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 |
---|---|
DE10105626B4 (de) | 2006-07-06 |
US6519737B1 (en) | 2003-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE10105626B4 (de) | Verfahren und System zur Berechnung von zyklischem Blockprüfungscode und Verfahren zum Erkennen eines Fehlers | |
DE69424877T2 (de) | Reed-solomon-dekoder | |
DE3382661T2 (de) | Korrektur von fehlerbuendeln in datengruppen. | |
DE69919199T2 (de) | Vorwärtsfehlerkorrektur | |
DE69330848T2 (de) | Einrichtung und Verfahren zur digitalen Unterschrift | |
DE69506675T2 (de) | Verfahren zur Ausführung von modularen Reduktion nach der Montgomery-Methode | |
DE3879373T2 (de) | Residuen-arithmetische Rechenschaltung. | |
DE4241903C2 (de) | Euklidische wechselseitige Divisionsschaltung | |
DE69905987T2 (de) | Verfahren und Gerät zur Kodierung und Signalübertragung unter Verwendung eines Sub-Codes von einem Produktcodes | |
DE4229666C2 (de) | Wechselseitig arbeitende Divisionsschaltung | |
DE69731932T2 (de) | Verfahren und Vorrichtung für zweistufige CRC-32-Berechnung | |
DE69511119T2 (de) | Kodierung eines feldes von bewegungsvektoren | |
DE68920560T2 (de) | Restprüfungsvorrichtung zur Fehlerkennung in Additions-, Substraktions-, Multiplikations-, Divisions- und Quadratwurzel-Operationen. | |
DE69430519T2 (de) | Verfahren und Gerät für einen Dekoder mit reduzierter Iteration | |
DE602005000251T2 (de) | Dekoder zur Fehlerkorrektur mit einem Reed-Solomon Dekoder zur Erasure-Korrektur und einem CRC Dekoder | |
DE1474359B2 (de) | Fehlerkorrekturschaltung | |
DE4105860C2 (de) | Schaltungsanordnung zum Erkennen und Korrigieren von Fehlern in Datenworten | |
WO2003093969A2 (de) | Berechnen eines ergebnisses einer modularen multiplikation | |
DE3702697C2 (de) | ||
DE3856035T2 (de) | Schaltung mit grosser bandbreite und verfahren zur reed-solomon-kodierung, dekodierung und fehlerkorrektur | |
DE69600394T2 (de) | Verfahren zum Erzeugen eines Fehlerkorrekturparameters bezüglich der Verwendung von modularen Operationen nach der Montgomery-Methode | |
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 | |
DE10219161A1 (de) | Vorrichtung und Verfahren zum Umrechnen eines Terms |
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 |