Forum: FPGA, VHDL & Co. 2er Komplement


von Fred H. (fredheidinger)


Angehängte Dateien:

Lesenswert?

Hallo

Also ich hab das Problem das ich keine Ahnung habe wie ich von einem
8bit vektor am besten das zweier komplement darstelle. Ich habe einen
Binärzähler programmiert, der maximal bis 256 (8bit) zählt. Der Wert
kann mithilfe des rotary wheels eingestellt werden und dann wird der
Wert auf den 8LEDs binär angezeigt. (Beiliegend mein Programm). Jetzt
muss ich nit dem Taster des rotary wheels das zweier komplemnt bilden
und über die LEDs ausgeben. Ich weiß nicht wie ich das realisiere. Auch
das Vorzeichen soll angegeben werden.

von Marius W. (mw1987)


Lesenswert?

Nimm doch einfach ne signed signal mit der range -128 to 127. Wobei das 
doch eigentlich überhaupt keinen Unterschied machst, wenn du die Zahlen 
eh nur binär auf LEDs ausgibst. 2er-Komplement ist einfach eine 
bestimmte Interpretationsform von Binärwerten.

MfG
Marius

von Fred H. (fredheidinger)


Lesenswert?

Danke guter Hinweis aber ich muss von 8bit unsigned (256) auf das zweier 
Komplement signed. Mir ist klar das das eine eigentlich unnötige 
Aufgabenstellung ist aber es ist ein Schulbeispiel. :)

MFG

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


Lesenswert?

Fred Heidinger schrieb:
> Danke guter Hinweis aber ich muss von 8bit unsigned (256) auf das zweier
> Komplement signed.
????
Was willst du?
Das Zweierkomplement der Zahl 256 darstellen?

von Nobbi (Gast)


Lesenswert?

Die Umwandlung ins 2er Komplement einer Binärzahl ist überhaupt kein 
großer Akt.
Siehe: 
http://de.wikipedia.org/wiki/Zweierkomplement#Darstellung_und_Umwandlung_aus_dem_Dezimalsystem
Einfach den Wert den du Wandeln möchtest invertieren, dann noch 1 dazu 
addieren und fertig ;-). Steht aber alles auf dem Wikilink.
Ach und das hat überhaupt nix mit signed oder unsigned zu tun. Signed 
bedeutet nur, dass das MSB als das Vorzeichen der "Zahl" gewertet wird, 
ist dieses '1' dann ist das Vorzeichen negativ, bei '0' positiv. 
Wohingegen beim 2er Komplement ja die Zahl invertiert und mit eins 
addiert vorliegt.
Gruß Nobbi

von Fred H. (fredheidinger)


Lesenswert?

Das hab ich schon gemacht aber das Problem besteht darin, dass wenn man 
mit meinem Programm binär auf z.B. 125 zählt und dann den Rotary Button 
drückt (ist für das zweier Komplement zuständig) stimmt das Ergebnis 
nicht und solange man man über der Zahl 127 bleibt passt alles. Die Zahl 
127 muss doch in zweier komplement -1 sein.

MFG

von Klaus W. (mfgkw)


Lesenswert?

Ich habe ehrlich gesagt immer noch ncht verstanden, was du umwandeln
willst.
Zweierkomplement ist eine Möglichkeit, negative Zahlen darzustellen.

Was soll dein Rotary Button machen?
Die Zahl negieren und dann das Bitmuster der negativen Zahl im
Zweierkomplement darstellen?
Also bei 125 das Bitmuster von -125 anzeigen?
Oder was?

Fred Heidinger schrieb:
> Die Zahl 127 muss doch in zweier komplement -1 sein.

127 ist positiv und egal ob Zweierkomplement oder nicht, die
binäre Darstellung davon ist 0b01111111.

von Fred H. (fredheidinger)


Lesenswert?

Ich beschreib mal mein ganzens Programm. Zuerst wird eine beliebige Zahl 
als Bitmuster auf den 8 LEDs von meinem Sparan 3E Board mithilfe des 
Rotary Buttons eingestellt. Z.B. wird die Zahl 256 angezeigt als 
11111111 (alle LEDs leuchten). Nun soll der Rotary Button geklickt 
werden und das Board soll dieses Bitmuster ins zweier komplement 
wandeln. in diesem Fall ergibt es dieses Bitmuster 00000001. Soweit ist 
ales in Ordnung. Bloß wenn man dann unter 128 (01111111) weißt ich nicht 
mehr weiter.

von Klaus W. (mfgkw)


Lesenswert?

0b11111111 ist erstmal ein Bitmuster.

Das kann als unsigned betrachtet werden, dann ist es der Wert 255.
Oder man unterstellt, daß es eine signed (vorzeichenbehaftetete
Zahl) mit 8 Bit im Zweierkomplement ist, dann entspricht es dem
Wert -1.

Insofern gibt es da nicht "ins Zweierkomplement wandeln".
Wenn du sagst, dein Rotary Button soll das zu 0b00000001
wandeln:
Sehe ich das richtig, daß der Rotary Button dann das Bitmuster
zur jeweils negierten Zahl liefern soll?
(also aus -1=0b11111111 -> +1=0b00000001 und umgekehrt,
aus -2=0b11111110 -> +2=0b00000010 und umgekehrt, etc.?)

Dann macht es aber keinen Sinn, das auf Zahlen größer oder
gleich 128 anzuwenden, weil die in einem Byte gar nicht
negiert werden können.
Sie benötigen ja schon wegen ihres Werts das oberste Bit, also
bleibt nichts mehr für die Kennzeichnung "ist negativ".
In einem Byte kann man doch nur unsigned 0 bis 255 darstellen
oder signed -128 bis +127. Also kann ich z.B. 200 nicht negieren.

von Nobbi (Gast)


Lesenswert?

Kannst du vielleicht deinen Code mal posten? Oder ist das .txt File ganz 
am Anfang der Code, kann da leider nichts von einem 2er Komplement 
finden. Wäre auch sehr nett, wenn du das nicht als .txt File sondern 
VHDL konform postest.

von Fred H. (fredheidinger)


Lesenswert?

Mein Programm ist das obrige .txt File.
Der Teil mit dem 2er Komplement steht unter LED control (Pressing the 
rotary encoder will cause all LED drive bits to be inverted.)

von Klaus W. (mfgkw)


Lesenswert?

Quelltext hin oder her: solange du nicht klar formulieren
kannst, was du willst, bleibt es schwierig...

von jo (Gast)


Lesenswert?

zweierkomplement

alle bits umkippen
1 addieren

sind 2 chips..

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.