Kurze Schaltung: Binär zu Gray Code
15. Juni 2021
über
über
Die Motivation für die Kodierung von Bits im Gray-Code war, im Binärformat zu zählen, aber nur einen Bitwechsel bei jeder +1-Zählung zu haben. Dies ist hilfreich bei mechanischen Schaltern, bei denen wir nicht wollen, dass während des Schaltens Zwischenzustände am Ausgang vorhanden sind, was aufgrund von Imperfektionen passieren kann. Gray-Codes sind auch für die grundlegende Fehlerkorrektur nützlich: zwei geänderte Bits bei einem einzigen Zustandswechsel? Irgendetwas muss falsch sein.
Einige Gray-Codes, die "zyklisch" sind, haben den zusätzlichen Vorteil, dass beim "Rollen" - also beim Übergang von der "Endzählung" zum Anfangszustand - ebenfalls nur ein Bitwechsel stattfindet (d.h. die erste und die letzte Zahl unterscheiden sich durch einen einzigen Bitwechsel). Die Wikipedia-Seite für Grauen Code ist faszinierend und lesenswert. Auf dieser Seite habe ich einen Code gefunden, mit dem man Gray-Code in Binärcode umwandeln kann. Etwa so:
num_gray = num_bin ^ (num_bin >> 1)
Dabei steht ^ für XOR und >> für 'um eins nach rechts schieben'. Ziemlich ordentlich, und leicht zu merken für das nächste Mal, wenn Sie auf einer Party nach dem Gray von 10010110 gefragt werden. Sie könnten schnell 11011101 antworten, nachdem Sie eine Kritzelei auf einer Serviette zu Rate gezogen haben. Großer Applaus für Sie!
Ich habe mir überlegt, wie die logische Schaltung aussehen könnte. Ich war nicht schlau genug, den obigen Code direkt in Gatter umzuwandeln, also habe ich mir die Bits angesehen.
Wir sehen, dass im Falle eines einzelnen Bits - in Gelb - das Binär und Gray gleich sind. In der Hardware ist das nur eine Leitung. Bei zwei Bits - in Blau - sehen wir, dass das höchstwertige Bit (MSB) G1 = B1 ist und das niedrigstwertige Bit (LSB) G0 = NICHT B0 ist. Betrachtet man drei Bits - in lila - so ist G2 = B2 wie zuvor, aber die Negationsregel funktioniert nicht mehr. Wir brauchen eine neue Strategie. Auf der Suche nach aufwendigeren Mustern können wir feststellen, dass Gn = Bn XOR Bn+1 für GN-1 zu G0 und GN = BN!
Vielleicht bin ich bei der Lösung dieses Problems zu naiv vorgegangen. Wie würden Sie es besser oder anders machen?
Mehr zu Schaltungsentwurf, Gray Code und mehr
Interessieren Sie sich für Schaltungsdesign und verwandte Themen?- Artikel über Schaltungsdesign, ElektorMagazin.com.
- S. Drimer, "Kurze Schaltung: Die Geschmacksrichtungen von binär codierten Dezimalzahlen (BCD)," 18 März 2021.
- Abonnieren Sie den "Circuit Shorts" Tag für Updates, wenn neue Artikel veröffentlicht werden.
Benötigen Sie eine Lösung für das Rapid Prototyping? Schauen Sie sich ElektorPCB4Makers an. Sie können zwei PCB-Prototypen in drei Arbeitstagen erhalten!
Mehr anzeigen
Weniger anzeigen
Diskussion (1 Kommentar)