Hamming code VHDL

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hamming code VHDL

    Hallo nochmal von neuem (beitrag gelöscht und editiert)

    So hab nochmal drüber nachgedacht hab totalen murks gemacht stimmt hinten und vorne nicht also nochmal :

    so möchte also in VHDL den Hamming code realiseren :

    dazu brauche ich einen Codierer und einen Decodierer

    folgendes hab ich nun gemacht :

    der codierer:

    nopaste.info/5cda9ba637.html

    hier muss ich ja eigentlich nur meine prüfbits berechnen und diese weiterschicken !
    so nun 2. Fragen

    1. Wie berechne ich meine prüfbits ??
    denn die prüfbits berechne ich ja normaler weiße in dem ich meine Datenbits mit XOR verknüpfe hier habe ich allerdings nur Schalter über die ich mein Datenwort eingebe habe nun diese
    mit XOR verknüpft denke aber das ist falsch da ich ja eben z.b nicht in c1 alle datenbits haben darf sondern nur die ungeraden also folgt daraus ich muss herausfinden welche datenbits ich habe wie mache ich das ????

    2. wenn ich diese berechnet habe wie leite ich diese dann weiter und wohin ???

    c0-c8 sind meine prüfbits !

    als nächstes der Decodierer :

    nopaste.info/e1ca11e83d.html
    c1neu bis c8neu sind meine neuberechneden prüfbits c0empf-c8empf meine empfangenen
    p0-p3 ist mein pointerwort

    hier zu folgendes ich muss ja nun meine prüfbits neu berechnen und diese mit den empfangen mit XOR vergleichen 0 ist richtig 1 bedeutet fehler

    so nun folgende fragen wie fange ich die vom codierer gesendeten bits ab und wie bzw mit was berechne ich hier meine neuen prüfbits denn hier habe ich auch wieder nur inbus (6 DOWNTO 0) den ich hier nun vermutlich fälschlicher weiße zur berechnung verwende .

    nun wenn ich mein Pointerwort habe muss ich mit if abfragen ob 0 (richtig ) oder 1(falsch)
    doch wie korriegiere ich das ganze dann denn wenn z.B c2 und c4 falsch ist berechne ich ja 2+4 dann weiß ich datenbit d6 ist falsch dieses invertiere ich dann und fertisch
    aber wie setz ich das in VHDL um ??????
    und wie realieser ich das der code eben nur 1 bit korriegiert wie es der hamming code ursprünglich eben tut !!! es sei denn es ist der erweiterte aber ist er hier nicht

    und wie bzw was gebe ich dann weiter wenn ich fertig bin weil eigentlich wars das dann ja mit hamming nun muss ich ja nur noch mein Datenwort weitergeben ????

    außerdem ist if nicht schon ein Prozess???

    Übrigens die enity ist vorgegeben und darf nicht verändert werden es soll nur die architecture realisiert werden und nur mit einfachen Verknüpfungen wie AND OR XOR prozesse sind nicht erlaubt !


    für die die denn hamming code nicht kennen :

    de.wikipedia.org/wiki/Hamming-Code

    Wie ihr seht viele Fragen habe noch nie in VHDL gearbeitet und hoffe ihr könnt mir helfen

    Bitte um schnelle Antwort da ich das ding bald brauche und in der praxis auf ein FPGA spielen soll !!!!!!

    Danke im Vorraus

    Mit freundlichen Grüßen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von the_old_Pirate ()

  • doch doch hab das jetzt mal so umgesetzt :

    Quellcode

    1. -- VHDL Architecture DtP_V1_lib.Ham_Decodierer.Arch06
    2. -- Created:
    3. -- by - student.UNKNOWN (CAE1) -- hier Ihre Namen eintragen
    4. -- at - 12:52:18 24.10.2010
    5. --
    6. -- using Mentor Graphics HDL Designer(TM) 2004.1 (Build 41)
    7. --
    8. LIBRARY ieee;
    9. USE ieee.std_logic_1164.all;
    10. USE ieee.STD_LOGIC_UNSIGNED.all;
    11. ENTITY Ham_Decodierer IS
    12. PORT(
    13. inbus : IN std_logic_vector (6 DOWNTO 0);
    14. Fehler : OUT std_logic;
    15. hexbus : OUT std_logic_vector (3 DOWNTO 0));
    16. END ENTITY Ham_Decodierer ;
    17. --
    18. ARCHITECTURE behav OF Ham_Decodierer IS
    19. signal c1neu : std_logic;
    20. signal c2neu : std_logic;
    21. signal c4neu : std_logic;
    22. signal p0 : std_logic;
    23. signal p1 : std_logic;
    24. signal p2 : std_logic;
    25. signal p3 : std_logic;
    26. BEGIN
    27. c1neu<= inbus(0) xor inbus(1) xor inbus(2) xor inbus(3) xor inbus(4) xor inbus(5) xor inbus(6);
    28. c2neu<= inbus(0) xor inbus(1) xor inbus(2) xor inbus(3) xor inbus(4) xor inbus(5) xor inbus(6);
    29. c4neu<= inbus(0) xor inbus(1) xor inbus(2) xor inbus(3) xor inbus(4) xor inbus(5) xor inbus(6);
    30. c8neu<= inbus(0) xor inbus(1) xor inbus(2) xor inbus(3) xor inbus(4) xor inbus(5) xor inbus(6);
    31. p0 <= c1neu xor c1empf;
    32. p1 <= c2neu xor c2empf;
    33. p2 <= c4neu xor c4empf;
    34. p3 <= c8neu xor c8empf;
    35. when p0<='0' then
    36. --ok
    37. when p0<='1'then
    38. -- korrektur
    39. when p1<='0' then
    40. --ok
    41. when p1<='1'then
    42. -- korrektur
    43. when p2<='0' then
    44. --ok
    45. when p2<='1'then
    46. -- korrektur
    47. when p3<='0' then
    48. --ok
    49. when p3<='1'then
    50. -- korrektur
    51. END ARCHITECTURE behav;
    Alles anzeigen


    hoffe du meinst das so also hab das when zumindest so verstanden
  • ne, das when funktioniert nur in signalzuweisungen.

    du hast: when p0<='0' then
    funktionieren würde aber nur sowas z.b.:
    ok <= '1' when p0 = '0' else '0';

    das statement würde bedeuten, dass er dem signal "ok" (das natürlich noch deklariert werden müsste) den wert 1 zuweist wenn p0 den wert 0 hat. Wenn nicht bekommt ok den wert 0 zugewiesen. Damit kannst du in signalen wie diesem ok erstmal festhalten ob die prüfwerte ok sind oder nicht. Natürlich darfst du das jetzt aber nicht 4mal machen und jedesmal das ergebnis diesem ok zuweisen, das würde schiefgehen. Da brauchst du dann entweder 4 verschiedene ok-signale, oder einen Vektor oder du verknüpfst die 4 vergleiche mit den logischen verknüpfungen (and, or etc)
  • the_old_Pirate schrieb:

    denn die prüfbits berechne ich ja normaler weiße in dem ich meine Datenbits mit XOR verknüpfe hier habe ich allerdings nur Schalter über die ich mein Datenwort eingebe habe nun diese
    mit XOR verknüpft denke aber das ist falsch da ich ja eben z.b nicht in c1 alle datenbits haben darf sondern nur die ungeraden also folgt daraus ich muss herausfinden welche datenbits ich habe wie mache ich das ????
    Ich versteh ehrlich gesagt das Problem nicht. Die Schalter sind doch genau deine Datenbits. Du musst nur beim Hamming code schauen, welche Datenbits bei einem (7,4)-Hammingcode miteinander per XOR verknüpft werden müssen um die einzelnen prüfbits zu bilden. Im Wikipedia-Artikel steht das glaub ich sogar genau für das Beispiel drin.

    dann musst du sowohl die datenbits als auch die prüfbits in der richtigen reihenfolge in den Ausgangs std_logic_vector stecken (codebus heißt der glaub ich bei dir). Die entsprechende Reihenfolge steht auch bei Wikipedia. Musst nur prüfen ob ihr auch diese Reihenfolge benutzt oder ob ihr Nutz und Prüfbits vielleicht trennt. In dem Fall würde man sie aber wahrscheinlich nicht in den gleichen Datenbus stecken.