Forum: Mikrocontroller und Digitale Elektronik Berechnung CRC mit XORs


von udir (Gast)


Lesenswert?

Hallo
eine CRC Berechnung(nach der Standardpolynomdivision) lässt sich ja in 
ein Schieberegister und XOR's an den entsprechenden Stellen nachstellen.

Bin ich richtig in der Annahme(ich habs jetzt 3mal auf Papier 
durchgerechnet) das man die Zwischenwerte der Polynomdivision mit dieser 
Lösung NICHT rausbekommt(also z.B. den 2ten Berechnungsschritt)?

mit Standardpolynomdivision meine ich den Weg, bei dem man ans Ende der 
Daten noch soviele 0en hängt wie der Grad des Generatorpolynoms siehe 
http://www.flechtmann.net/crc/index.php

Danke für die Info

von Walter T. (nicolas)


Lesenswert?

udir schrieb:
> das man die Zwischenwerte der Polynomdivision mit dieser
> Lösung NICHT rausbekommt

Äh, was jetzt? Welche Zwischenwerte? Die Einzelüberträge? Willst Du sie 
herausbekommen (= entfernen) oder herausbekommen (= am Ende erhalten)? 
Was bezweckst Du mit dieser Frage?

von udir (Gast)


Angehängte Dateien:

Lesenswert?

Naja ich würde gerne die Zwischenwerte der Polynomdivision irgendwann im 
Register stehen haben.
Z.B.
Genpolynom : 1101 = x³ + x² + 1
Daten: 1010

Polynomdivision

1010 0000 : 1101 = 1101
1101
----
 111 0
 110 1
 --- -
 011 0 <- Diesen Wert würde ich gerne in meinem Register stehen haben
 ....
 -----
      001 <- Berechneter CRC

Das Register ist ein ein normales Schieberegister mit XOR.
In dem Register steht aber dieser Zwischenwert niemals drin(zumindest 
nicht eindeutig bestimmbar), wenn ich mich nicht täusche?!

von Walter T. (nicolas)


Lesenswert?

udir schrieb:
> In dem Register steht aber dieser Zwischenwert niemals drin(zumindest
> nicht eindeutig bestimmbar)

Sicher, wenn Du den Abbruch machst, nachdem im entsprechenden Schritt 
der Shift und das "herunterholen" schon durchgeführt wurde, der nächste 
XOR mit dem Generatorpolynom noch nicht. Eine Möglichkeit, Deinen CRC an 
der passenden Stelle abzubrechen mußt Du so oder so selbst 
implementieren - normalerweise interessieren die Zwischenergebnisse 
niemand, weswegen sie aus Effizienzgründen ständig überschrieben werden.

Was ist der Zweck der ganzen Übung?

Edit: Es dämmert.... Du willst Die Zwischenergebnisse aus einer 
Hardwareschaltung herausbekommen?

: Bearbeitet durch User
von Joe F. (easylife)


Lesenswert?

udir schrieb:
> Das Register ist ein ein normales Schieberegister mit XOR.
> In dem Register steht aber dieser Zwischenwert niemals drin(zumindest
> nicht eindeutig bestimmbar), wenn ich mich nicht täusche?!

???
Warum sollte das nicht so sein?
Anders wäre doch das Endergebnis gar nicht zu berechnen.
Wenn du dich für den Registerinhalt während eines Zwischenschrittes der 
Berechnung interessierst, musst du den Registerinhalt eben zum richtigen 
Zeitpunkt in ein 2. Register kopieren. Da bleibt der Wert dann bis zum 
Ende der Berechnung erhalten.

von udir (Gast)


Lesenswert?

Walter T. schrieb:
> udir schrieb:
>> In dem Register steht aber dieser Zwischenwert niemals drin(zumindest
>> nicht eindeutig bestimmbar)
>
> Sicher, wenn Du den Abbruch machst, nachdem im entsprechenden Schritt
> der Shift und das "herunterholen" schon durchgeführt wurde, der nächste
> XOR mit dem Generatorpolynom noch nicht. Eine Möglichkeit, Deinen CRC an
> der passenden Stelle abzubrechen mußt Du so oder so selbst
> implementieren - normalerweise interessieren die Zwischenergebnisse
> niemand, weswegen sie aus Effizienzgründen ständig überschrieben werden.
>
> Was ist der Zweck der ganzen Übung?
>
> Edit: Es dämmert.... Du willst Die Zwischenergebnisse aus einer
> Hardwareschaltung herausbekommen?

Ja, ich dachte ich habs irgendwie verständlich erklärt...

von Walter T. (nicolas)


Lesenswert?

Edit: Es dämmert.... Du willst Die Zwischenergebnisse aus einer 
Hardwareschaltung herausbekommen? Dein "Register" ist das 
Schieberegister, aus denen die Daten herausgetaktet werden?

Da in der Hardwareschaltung ohnehin immer nur 1 Bit pro Schritt ist, 
mußt Du, um die bitseriellen Daten wieder parallel herzustellen, einen 
parallelen Zwischenspeicher hinzufügen.

Und Deine Schaltung entspricht eben auch nicht der "komplett"-Division, 
sonderm dem Aufteilen Deiner Division in Einzelstellendivisionen.

von udir (Gast)


Lesenswert?

Hmmm... genau da hackts. Ich komm einfach nicht drauf, wie ich das 
umsetzen kann...

von Walter T. (nicolas)


Lesenswert?

udir schrieb:
> Hmmm... genau da hackts. Ich komm einfach nicht drauf, wie ich das
> umsetzen kann...

Ich glaub es hackt...

...damit bleibt die ursprüngliche Frage:

Walter T. schrieb:
> Was ist der Zweck der ganzen Übung?

von udir (Gast)


Lesenswert?

Walter T. schrieb:
> udir schrieb:
>> Hmmm... genau da hackts. Ich komm einfach nicht drauf, wie ich das
>> umsetzen kann...
>
> Ich glaub es hackt...
>
> ...damit bleibt die ursprüngliche Frage:
>
> Walter T. schrieb:
>> Was ist der Zweck der ganzen Übung?

Ich hab ja nicht gefordert das mir bei der Umsetzung jemand hilft...

Sinn der Übung: Ich will die Zwischenschritte der Polynomdivision haben. 
Ob und inwieweit das Sinn macht bleibt meine Sache

von Joe F. (easylife)


Lesenswert?

udir schrieb:
> Ich komm einfach nicht drauf, wie ich das
> umsetzen kann...

In was denn?
Auf dem Papier?
In C?
In Verilog/VHDL?
In CMOS?

: Bearbeitet durch User
von udir (Gast)


Lesenswert?

Joe F. schrieb:
> udir schrieb:
>> Ich komm einfach nicht drauf, wie ich das
>> umsetzen kann...
>
> In was denn?
> Auf dem Papier?
> In C?
> In Verilog/VHDL?
> In CMOS?

Papier zuerst, aber es soll in VHDL umgesetzt werden(sprich auf Papier 
nach den Regeln, wie es effizient(d.h. mit Shiftregistern und XORs) 
umgesetzt werden kann)

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Vielleicht liefert dieses Tool dir ja die passende Anregung:

http://www.easics.com/webtools/crctool

Kann fast beliebig konfiguriert werden, und liefert direkt Verilog oder 
VHDL Code.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.