Forum: FPGA, VHDL & Co. Umwandlung nach BCD


von Silvia A. (silvia)


Angehängte Dateien:

Lesenswert?

Ich binn grad auf Lothars Seite auf die BCD Umwandlung gestossen:
http://www.lothar-miller.de/s9y/archives/34-Vektor-nach-BCD.html

Dort ist zu Lesen:
Der Vektor wird von rechts in die BCD-Zahlen hineingeschoben und beim 
Überlauf die entsprechende BCD-Stelle mit einer Addition +6 korrigiert.

Irgendwie versteh ich nicht warum das so geht, ich habe mir mal mit 
Excel einen versuch gemacht und die Zahl 99 nach BCD konvertiert.
Beim 5. Shift kommt es zum Überlauf und ich rechne dann 6 Dazu. Aber am 
Ende kommt nicht 99 raus, sondern 93. Wieso ? Wo ist mein Denkfehler ?

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


Lesenswert?

Silvia A. schrieb:
> Beim 5. Shift kommt es zum Überlauf und ich rechne dann 6 Dazu.
Gut so.

> Aber am Ende kommt nicht 99 raus, sondern 93. Wieso ?
> Wo ist mein Denkfehler ?
99 und 93?
Evtl. mußt du noch 6 addieren wegen dem Überlauf in der letzten 
Zeile....

von Silvia A. (silvia)


Lesenswert?

Lothar Miller schrieb:
> Du mußt noch 6 addieren wegen dem Überlauf in der letzten Zeile....  :-o

Aber da ist doch kein Überlauf. Erste Ziffer = 9. Zweite = 3. Wo siehst 
du da einen Überlauf ?

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


Lesenswert?

Ok, langsam:
99 =      01100011
Z    E
---- ---- 01100011
---- ---0 1100011
---- --01 100011
---- -011 00011
---- 0110 0011      E>4 --> E = E+3 = 6+3 = 9 = 1001
---- 1001 0011
---1 0010 011
--10 0100 11
-100 1001 1         E>4 --> E = E+3 = 9+3 = 12 = 1100
-100 1100 1
1001 1001     -> 9 9

Ich habe in meinem VHDL-Code das Shift-Add-3 Verfahren verwendet, weil 
das Addieren von 3 und das gleichzeitige Schieben im FPGA wie eine 
Addition von 6 ist...

Z    E
---- ---- 01100011
---- ---0 1100011
---- --01 100011
---- -011 00011
---- 0110 0011
---0 1100 011       E>9 -->
---1 0010 011       E = E+6 = 12+6 = 18 = 1 0010 --> Z=1, E=0010
--10 0100 11
-100 1001 1
1001 0011           Überlauf, weil E nach Shift E>9 -->  ****
1001 1001           E = E+6 = 3+6 = 9 = 1001 --> E=1001 -> 9 9
                   (****Diesen zweiten Überlauf hast du nicht 
erkannt...)

Das Shift-Add-6 Verfahren hat die etwas unangenehme Eigenschaft, dass 
der Übertrag nicht so leicht zu erkennen ist, weil er entweder bei >9 
oder bei einem Übertrag einer 1 in die nächste Stelle stattfindet. Zudem 
muß auch die rechnerische Korrektur (+6) evtl. die nächste Stelle 
manipulieren...


Siehe auch dort etwa in der Mitte:
http://www.scribd.com/doc/47896259/Digital-Logic-FPGA-Lab-Manual

von Silvia A. (silvia)


Lesenswert?

>oder bei einem Übertrag einer 1 in die nächste Stelle stattfindet
Das war die Information, die mir fehlte, Danke Lothar.

PS. das solltest du vielleicht noch auf deiner Seite dazuschreiben

von Würstle-Horst (Gast)


Lesenswert?

Hey Lothar,

na wie läuft es in der Wurst-Fabrik ?  :-)

VG, Würstle-Horst



P.S.

>PS. das solltest du vielleicht noch auf deiner Seite dazuschreiben
Leute, Ihr solltet mal damit anfangen, selber nachzudenken!

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


Lesenswert?

Würstle-Horst schrieb:
> na wie läuft es in der Wurst-Fabrik ?  :-)
Gut läuft es in der Wurst-MASCHINEN-fabrik... ;-)

von Würstle-Horst (Gast)


Lesenswert?

Ja klar, MASCHINEN, sorry, für irgendetwas müssen die PLDs ja gut sein 
;-)

von Würstle-Horst (Gast)


Lesenswert?

Gerade einen heissen Tip erhalten:

http://www.freepatentsonline.com/EP1623627.html

:-))

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.