Forum: FPGA, VHDL & Co. VHDL Rechner


von Lukas (Gast)


Lesenswert?

Hallo.
Ich wollte in VHDL einen Adder/subber schreiben und hab mich da im 
Internet ein bisschen informiert. Ich habe da ein Programm gefunden das 
im BCD-Code aus jeder subtraktion eine addition macht und dazu die 
neagtiven Zahlen umwandelt und zwar mit der folgenden Zeile:
if ( zahl1(16) = '1' ) then

wzahl2 <= '1' & (X"9" - zahl1(15 downto 12)) & (X"9" - zahl1(11 downto 
8)) & (X"9" - zahl1(7 downto 4)) & (X"9" - zahl1(3 downto 0));

Den Rest vom Programm versteh ich nun meine Frage:
Was hat das X"9" - zahl zu bedeuten?
Ich weiß das X9 die hexadezimale 9 ist aber was bewirkt es wenn man 9- 
die zahl rechnet.
Für Antwort wäre ich dankbar

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


Lesenswert?

Lukas schrieb:
> Was hat das X"9" - zahl zu bedeuten?
Das ist eine Subtraktion der zahl vom Wert 9

Lukas schrieb:
> Ich weiß das X9 die hexadezimale 9 ist aber was bewirkt es wenn man 9-
> die zahl rechnet.
Das z.B. bei einer Zahl von 0 der Wert 9 herauskommt, und bei einer Zahl 
9 kommt 0 heraus.

Nimm mal die BCD-Zahl x"1234"
dann steht da:
1
  wzahl2 <= '1' & (X"9" - X"1") & (X"9" - X"2") & (X"9" - X"3") & (X"9" - X"4");
damit ergibt sich dann wzahl2 zu
'1' & x"8" & x"7" & x"6" & x"5"

Was das soll, kannst jetzt aber nur du beantworten, weil nur du den 
VHDL-Code hast... :-/

von Lukas (Gast)


Angehängte Dateien:

Lesenswert?

woops sorry wollte den coe mit hochladen
hier isser.

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


Lesenswert?

Lukas schrieb:
> Ich wollte in VHDL einen Adder/subber schreiben und hab mich da im
> Internet ein bisschen informiert.
Und wieso willst du da so aufwendig im BCD-Code rumwursteln?

In VHDL beschreibe ich einen Addierer so:    sum <= a + b;
Und einen Subtrahierer so:                   dif <= a - b;
Und genauso hätte ich das auch gemacht:
generisch rechnen und die Zahl nur für die Anzeige umwandeln...
Warum willst du es unbedingt im BCD-Code machen?


BTW: der Code ist nicht als gutes Beispiel brauchbar...
Sowas macht man nicht:
 zahl1 <= "00000000000000000";

Und die dreiseitige PS/2 Schnittstelle kann man auch kürzer schreiben:
http://www.lothar-miller.de/s9y/archives/75-PS2-Tastatur.html

Und asynchrone Resets sollte man prinzipiell nicht verwenden:
http://www.lothar-miller.de/s9y/archives/70-Asynchroner-Reset.html

von Lukas (Gast)


Lesenswert?

ja aber is so ein BCD-Dual  und Dual-BCD Code Wandler nich sehr 
aufwendig?
Und da die Daten von der Tastatur so kommen und auch wieder als bcd 
ausgegeben werden isses da nich praktischer so zu rechnen?

von Lukas (Gast)


Lesenswert?

und bei sum <= a+b oder dif gibt es da probleme wenn a oder b negativ 
ist?

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


Lesenswert?

Lukas schrieb:
> und bei sum <= a+b oder dif gibt es da probleme wenn a oder b negativ
> ist?
Das kommt auf den Datentyp an.
Es gibt ja zum Glück integer und signed...

> ja aber is so ein BCD-Dual und Dual-BCD Code Wandler nich sehr
> aufwendig?
http://www.lothar-miller.de/s9y/categories/44-BCD-Umwandlung
Wie sagt Radio Eriwan: Im Prinzig nein, aber...
... warum eigentlich der ganze Aufwand?

von Lukas (Gast)


Lesenswert?

oke dann danke ich schonmal werds dann wohl mal nach deiner methode 
versuchen :=)

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.