Forum: FPGA, VHDL & Co. Hamming_Code in VHDL


von Manuchao F. (manuchao)


Lesenswert?

Hallo liebe microcontroller user !!!

Also erstmal ich bin neu hier von daher ein schönen Grüß an alle ;) !

So nun zu meinem Problem ich möchte gerne einen Hamming-Codierer und 
einen Hamming-Decodierer in VHDL realisieren. So nun gleich im Vorraus 
ich brauche keine erkläfrung zum hamming code selbst sondern mir geht es 
einzig allein um die Umsetzung in VHDL .... So nun zur aufgaben Stellung 
vorgegeben ist die enity und es soll einzig allein die Architecture 
umgesetzt werden es dürfen keine Prozesse verwendet werden und alle 
funktionen sollen mit nebenläufigen Anweisungen und einfacher 
Verknüpfungen wie OR AND XOR umgesetzt werden.... SO nun habe ich das 
ganze mal angefangen (hier mal ein link zu nopaste.info denke das ist 
schöner wie alles hier rein zu quetschen)

Codierer:
http://nopaste.info/5cda9ba637.html

so mein problem ist nun hier im Codierer müsste ich ja eigentlich nur 
meine Prüfbits berechnen diese würde ich ja in Prosa form bzw laut 
definition durch die XOR weiße verknüpfung der einzelnen Datenbits 
berechenen also zB.
C1= XOR(d3, d5, d7, d9, d11) in c1 dürfen ja eben nur die ungeraden 
vorkommen mein problem ist jetzt aber hier in meinem beispiel habe ich 
ja eben nur Schalter0-3 mit dennen ich das datenwort eingebe deshalb und 
aus aus lauter Verzweiflung ;) habe ich diese auch mit XOR verknüpft was 
aber sicher falsch ist weil ich muss ja erstmal prüfen welches Datenbit 
wo vorkommt damit ich auch sicherstellen kann das zB. C1 auch wirklich 
nur ungerade vorkommen wie mache ich das ??? soweit klar ?
So nun wenn ich diese berechnet habe muss ich die ja über den outbus 
ausgeben wie mache ich das ???

Als nächstes der Decodierer:

http://nopaste.info/6bc87f741d.html


erstmal zu erklärung der Decodierer empfängt ja erstmal die prüfbits 
c1-c8
vom codierer und berechnet aus dem erhaltenen Datenwort nochmals neue 
prüfbits c1neu-c8neu  nun vergleicht er c1empf-c8empf mit den 
neuberechneten prüfbits c1neu-c8neu mit einer XOR verknüpfung hierdurch 
entsteht ein pointerwort p0-p3 so wenn p0-p3 = 0 ist dann kam kein 
fehler vor da die prüfbits gleich sind wenn aber eine 1 oder zwei 1en 
vorkommen ist ein fehler aufgetreten nun wird der index der fehlerhaften 
prüfbits aufaddiert also zB. c4=fehler und c2fehler dann wird 4+2=6 
gerechnet  also weiß ich das datenbit d6 falsch ist und dies kann ich 
nun durch niegieren korrigieren !!! hoffe das ist soweit klar ???

jetzt wie setze ich das in VHDL um nun muss ich ja hier irgenwie die 
empfangenen prüfbits abfangen und speichern um sie vergleichen zu können 
außerdem muss ich die neuen berechnen jetzt habe ich hier aber nur den 
inbus den ich hier wahrscheinlich auch falsch mit xor verknüpfe um die 
neuen prüfbits zu erechnen wie kann ich das anders machen ???

dann muss ich die neuen prüfbits mit den empfangenen vergleichen und 
mein pointerwort erstellen was durch die when anweißungen geschieht !!!
wenn ich das gemacht habe setze ich nun die signale ok0-3 wenn z.b p0 
gleich 0 ist wird ok0 auf 0(für richtig)  gesetzt andern fals auf 1 (für 
falsch) wenn ich p0 jetzt aber 1 wäre dann müsste ich das ja 
korriegieren dazu müsste ich aber erstmal wieder herauskommen welches 
datenbit denn falsch ist wie mache ich das ???? und wie korriegiere ich 
das ganze dann ???
nachdem ich das ganze gemacht habe muss ich das ganze ja wieder 
weiterschicken (soll auf einer 7 segment anzeige ausgegeben werden) !!!!

So ihr seht fragen über fragen habe noch nie mit VHDL gearbeitet und 
muss das hier so schnell wie möglich fertig bekommen und abgeben 
deswegen bitte ich um schnelle antwort !!!!!!

Wäre echt dankbar wenn vieleicht jemand den Code überarbeiten könnte bzw 
mit ein fertiges Beispiel zeigen könnte oder Tipps geben kann einfach um 
jede hilfe dankbar!!!!!

Danke im Vorraus

Mit freundlichen Grüßen !

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Manuel D. schrieb:
> hier mal ein link zu nopaste.info denke das ist
> schöner wie alles hier rein zu quetschen
Du kannst den VHDL-Code hier anhängen. Gib dann der Datei die Endung 
.vhd, dann gibts ein hübsches Syntax-Highlighting dazu...

> erstmal zu erklärung der Decodierer empfängt ja erstmal die prüfbits
> vom codierer und berechnet aus dem erhaltenen Datenwort nochmals neue
> prüfbits c1neu-c8neu  nun vergleicht er c1empf-c8empf mit den
> neuberechneten prüfbits c1neu-c8neu mit einer XOR verknüpfung hierdurch
> entsteht ein pointerwort p0-p3 so wenn p0-p3 = 0 ist dann kam kein
> fehler vor da die prüfbits gleich sind wenn aber eine 1 oder zwei 1en
> vorkommen ist ein fehler aufgetreten nun wird der index der fehlerhaften
> prüfbits aufaddiert also zB. c4=fehler und c2fehler dann wird 4+2=6
> gerechnet  also weiß ich das datenbit d6 falsch ist und dies kann ich
> nun durch niegieren korrigieren in c1 dürfen ja eben nur die ungeraden
> vorkommen mein problem ist jetzt aber hier in meinem beispiel habe ich
> ja eben nur Schalter0-3 mit dennen ich das datenwort eingebe deshalb und
> aus aus lauter Verzweiflung habe ich diese auch mit XOR verknüpft was
> aber sicher falsch ist weil ich muss ja erstmal prüfen welches Datenbit
> wo vorkommt damit ich auch sicherstellen kann das zB. C1 auch wirklich
> nur ungerade vorkommen wie mache ich das ??? soweit klar ?
Rhabarberrhabarberrhabarber??? soweit klar ?
Satzzeichen dienen der Gliederung eines Textes und tragen wie die 
Großschreibung zur Lesbarkeit bei...

>  und es soll einzig allein die Architecture umgesetzt werden
Klar, denn das ist ja auch meist die Hauptarbeit...

> ich brauche keine erkläfrung zum hamming code selbst
Ja, mir würde eine kurze Erklärung dieses Codes bei der Beantwortung 
deiner Frage aber helfen...
Also: was kommt bei dir da im Coder rein? Was soll da rauskommen?

> ???
> !!!!!!
> !!!!!
Warum funktioniert deine Shift-Taste bei den Interpunktionszeichen?

> So ihr seht fragen über fragen
Wobei hier die meisten nicht direkt mit VHDL zu tun haben...
> habe noch nie mit VHDL gearbeitet und
> muss das hier so schnell wie möglich fertig bekommen und abgeben
> deswegen bitte ich um schnelle antwort !!!!!!
Wenn nur VHDL das Problem ist: wie würdest du denn das z.B. in C 
programmieren?

> Wäre echt dankbar wenn vieleicht jemand den Code überarbeiten könnte bzw
> mit ein fertiges Beispiel zeigen könnte oder Tipps geben kann einfach um
> jede hilfe dankbar!!!!!
Vermutlich wäre es hilfreich, wenn du einfach die ganze Schulaufgabe 
hier posten würdest... :-/

von Manuchao F. (manuchao)


Lesenswert?

Danke für die Antwort .... Doch das ganze hat was mit VHDL zu tun
in C würde ich das ganze Datenwort vermutlich einfach mit Bitshiftern 
zerlegen um meine Datenbits zu bekommen der rest wäre einfach!

Eine Erklärung zum Code findest du hier :
http://de.wikipedia.org/wiki/Hamming-Code

Werde mir in Zukunft mühe geben meine Texte deutlicher und leserlicher 
zu schreiben....

Hoffe das hilft dir jetzt bei der Beantwortung der Frage.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Manuchao F. schrieb:
> Werde mir in Zukunft mühe geben meine Texte deutlicher und leserlicher
> zu schreiben....
Deine Umwelt wird es dir danken... ;-)

> Doch das ganze hat was mit VHDL zu tun in C würde ich das ganze
> Datenwort vermutlich einfach mit Bitshiftern zerlegen um meine
> Datenbits zu bekommen der rest wäre einfach!
In VHDL ist das nicht komplizierter, ich schaffe gerade nur mental die 
Abbildung deiner Entity zurm Hamming-Code nicht. Was sollen die 
Schalter1..4 und was der Codebus?
Zeig doch mal deinen Coder, wei du den in C beschreiben würdest...
Du kannst auch eine Wahrheitstabelle aufschreiben, denn mit 4 
Eingangswerten sind das gerade mal 16 Tabelleneinträge...

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.