Forum: FPGA, VHDL & Co. Bildung des Zweierkomplements einer 4 Bit-Zahl


von Maria A. (slowargent)


Angehängte Dateien:

Lesenswert?

hallo



ich kann diese Aufgabe nicht loesen :
diese Aufgabe ist seite 115 im pdf:


9.1.1 Teil 1: Bildung des Zweierkomplements einer 4 Bit-Zahl
Die Zahl A besteht aus den Bits A3, … , A0, die mit den Schaltern S1, … 
, S4 eingegeben werden.
A3 ist das MSB (S1). Es soll das Zweierkomplement von A gebildet werden. 
Das
Zweierkomplement Z setzt sich aus den Bits Z3, … , Z0 zusammen. Z3, … , 
Z0 werden mit den
LEDs D1, … , D4 angezeigt. Z3 ist das MSB (D1). Erstellen Sie das 
VHDL-Programm und
überprüfen Sie es mit dem Simulator. Programmieren Sie das PLD auf dem 
Demoboard und
weisen Sie die Funktion der Schaltung nach. Die folgende Abbildung zeigt 
das Blockschaltbild der
Schaltung.


ps: diese Programm wird in Lattice Diamond installiert
Hilfe bitte!!!!!!

Danke im voraus
:)
Gr M.

: Verschoben durch Moderator
von Hilfshelfer (Gast)


Lesenswert?

Wir helfen gerne: Was können wir tun, damit Du diese Aufgabe lösen 
kannst?

von Maria A. (slowargent)


Lesenswert?

das ist mein erstes mal mit der digital technik Labor
und ich brauche Hilfe
wie ich diese Programm beginne
ich hab auch diese Aufgabe nicht gut gut verstanden
es waere nett von ihnen diese Aufgabe zu loesen

von S. R. (svenska)


Lesenswert?

Maria A. schrieb:
> es waere nett von ihnen diese Aufgabe zu loesen

Nö.

Stelle sinnvolle Fragen und du bekommst kluge Antworten.
Stelle dumme Fragen und du bekommst viele dumme und ein paar gute 
Antworten.
Frage nach Lösungen und du wirst ausgelacht.

von Fitzebutze (Gast)


Lesenswert?

...und bedenke auch, dass ev. deine Dozenten mitlesen. Nicht zwingend 
wegen der fachlich interessanten Beiträge...

von myasuro (Gast)


Lesenswert?

Hallo, normalerweise gibt's ja dazu auch eine Vorlesung, da sollte es 
schon mal behandelt worden sein, sonst hilft dir die Suchmaschine deiner 
Wahl.

Mit freundlichen Gruß
myasuro

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


Angehängte Dateien:

Lesenswert?

Maria A. schrieb:
> Hilfe bitte!!!!!!
Normalerweise geht "Hilfe" so, dass DU etwas zeigst und dann sagst, wo 
es klemmt. Und dann kann man dir dabei "helfen", den Fehler zu beheben. 
aber ich "helfe" dir mal mit der Lösung:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.numeric_std.ALL;
4
5
entity negate is
6
    Port ( A : in  STD_LOGIC_VECTOR(3 downto 0);
7
           Z : out STD_LOGIC_VECTOR(3 downto 0));
8
end negate;
9
10
architecture Behavioral of negate is
11
begin
12
   Z <= std_logic_vector(to_signed((0-to_integer(signed(a))),4));
13
end Behavioral;
Und dazu ein Stimuligenerator als "Testbench":
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
USE ieee.numeric_std.ALL;
4
 
5
ENTITY tb_negate IS
6
END tb_negate;
7
 
8
ARCHITECTURE behavior OF tb_negate IS 
9
    COMPONENT negate
10
    PORT(
11
         A : IN  std_logic_vector(3 downto 0);
12
         Z : OUT  std_logic_vector(3 downto 0)
13
        );
14
    END COMPONENT;
15
    
16
   signal A : std_logic_vector(3 downto 0) := (others => '0');
17
   signal Z : std_logic_vector(3 downto 0);
18
   signal cnt : signed (3 downto 0) := "0000";
19
 
20
BEGIN
21
   uut: negate PORT MAP (A,Z);
22
   cnt <= cnt + 1 after 10 ns;
23
   A <= std_logic_vector(cnt);
24
END;
Und heraus kommt das, was im angehängten Screenshot zu sehen ist --> 
funktioniert tadellos.

Allerdings: ich bin mir nicht sooooo sehr sicher, ob dein Professor 
genau so eine Lösung sehen möchte...  ;-)

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


Lesenswert?

Lothar M. schrieb:
> funktioniert tadellos.
Nachtrag: natürlich bis auf den Überlauf bei -8. Aber das eigentlich 
kein Fehler, sondern dem Zweierkomplement geschuldet und der Tatsache, 
dass 4 Bits zwar -8 darstellen können, aber keine +8

von jo (Gast)


Lesenswert?

SChön Lothar, wir wissen das du der FPGA- Gott auf Erden bist, aber was 
hat das jetzt Maria geholfen?

Gruß Jonas

von Andreas H. (ahz)


Lesenswert?

Lothar M. schrieb:
> Allerdings: ich bin mir nicht sooooo sehr sicher, ob dein Professor
> genau so eine Lösung sehen möchte...  ;-)

Dann frag ihn doch. Name & Institut stehen doch im Skript^^

/regards

von Markus F. (mfro)


Lesenswert?

Im Skript steht auch die Lösung, wenn man es einigermaßen aufmerksam 
liest.

Pikanterweise eine etwas andere als die von Lothar (die man da drin aber 
auch finden kann) ;).

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


Lesenswert?

jo schrieb:
> SChön Lothar, wir wissen das du der FPGA- Gott auf Erden bist, aber was
> hat das jetzt Maria geholfen?
Vermutlich, dass sie gelernt hat, dass das so nichts bringt. Auf jeden 
Fall nicht ihr. Denn wenn ich wie gewünscht eine Lösung vorlege, kann 
sie es immer noch nicht selber...

von Kritiker (Gast)


Lesenswert?

Seid ihr sicher, dass das eine echte Fragerin ist? Keine Studentin wird 
sich so outen. Könnte gut sein, dass wieder ein Volldepp jemanden 
diskreditieren will.

Ansonsten nehme ich zur Kenntnis, was an einer Eliteuni heute so 
ausgebrütet wird. Seht elitär ... :-)

von Frauenliebhaber (Gast)


Lesenswert?

Kritiker schrieb:
> Seid ihr sicher, dass das eine echte Fragerin ist?

Eine weibliche Identität ist ein bewährtes Mittel in der
Anonymität des Internets mehr Aufmerksamkeit auf sich zu
ziehen.

von Martin K. (mkmannheim) Benutzerseite


Lesenswert?

Eine Frage:

Wieso ist das 2er-Komplement die "Negation" und warum muss das so 
kompliziert formuliert werden?

> architecture Behavioral of negate is
> begin
>   Z <= std_logic_vector(to_signed((0-to_integer(signed(a))),4));
> end Behavioral;

Das 2er-Komplement ist doch das, was eine Zahl bitweise zur 2 
komplettiert.

Also 2-x, oder?

>Pikanterweise eine etwas andere als die von Lothar
Inwiefern?

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


Lesenswert?

Martin K. schrieb:
> Eine Frage:
> Wieso ist das 2er-Komplement die "Negation"
Das Zweierkomplement ist eben keine Negation, bei der ja einfach alle 
Bits negiert werden. Die simple Negation nennt sich "Einerkomplement". 
Insofern habe ich den Namen der Entity "negate" tatsächlich etwas 
ungünstig gewählt...
> und warum muss das so kompliziert formuliert werden?
Weil VHDL keine impliziten Konvertierungen erlaubt. Mit einem 
std_logic_vector kann nicht gerechnet werden, deshalb muss man dem 
selben "Bithaufen" immer wieder explizit einen neuen Typ zuweisen. Ich 
bin die Umwandlungskette der numeric_std vom std_logic_vector bis zum 
integer gegangen (siehe 
http://www.lothar-miller.de/s9y/categories/16-Numeric_Std), die Lösungen 
im Script zeigen, dass auch der Datentyp signed die nötigen 
Rechenoperationen bietet.

> Das 2er-Komplement ist doch das, was eine Zahl bitweise zur 2 komplettiert.
> Also 2-x, oder?
Da bist du vollkommen auf dem Holzweg. Wenn zu einer Zahl ihr 
Zweierkomplement addiert wird, kommt 0 heraus. Und das funktioniert 
sogar bei der "fehlerhaften 8" (=1000) und -8 (=1000):
1000+1000 = 10000 -> Überlauf hat keinen Platz in 4 Bits -> Ergebnis 
0000

>> Pikanterweise eine etwas andere als die von Lothar
> Inwiefern?
Viele Wege führen nach Rom.
Die beiden auf Seite 142 und 143 vorgestellten Lösungen sind:
1. Bildung des Einerkomplements durch Negation und Addition von 1:
1
Z <= std_logic_vector (unsigned (not (A)) + 1);
2. (Implizite) Subtraktion des Wertes:
1
Z <= std_logic_vector (- signed (A));

: Bearbeitet durch Moderator
von Markus F. (mfro)


Lesenswert?

Jetzt schreibt der Prof schon die (wirklich einfache) Lösung ins Script, 
so daß der überlastete Student eigentlich nur noch einigermaßen 
aufmerksam lesen muß, um seine Hausaufgaben hinzukriegen und nicht mal 
das schafft er (sie?).

Ist ja kein Wunder, bei dem dauernden Handystress heutzutage ...

von jo (Gast)


Lesenswert?

>jo schrieb:
>> SChön Lothar, wir wissen das du der FPGA- Gott auf Erden bist, aber was
>> hat das jetzt Maria geholfen?
>Vermutlich, dass sie gelernt hat, dass das so nichts bringt. Auf jeden
>Fall nicht ihr. Denn wenn ich wie gewünscht eine Lösung vorlege, kann
>sie es immer noch nicht selber...

Nagut.

Gruß J

von LostInMusic (Gast)


Lesenswert?

>Das 2er-Komplement ist doch das, was eine Zahl bitweise zur 2
>komplettiert.
>Also 2-x, oder?

Auf keinen Fall. In vierstelliger Dezimalarithmetik hat die Dezimalzahl 
3152 das Neunerkomplement 6847 (in jeder Stelle ergänzen sich die 
Ziffern jeweils zu 9) und das Zehnerkomplement 6848 (die Summe von 6848 
und 3152 ergibt die Zehnerpotenz 10000 = 0000 mit Überlauf).

Noch ein Beispiel für eine kleinere Zahl: Wenn wir wieder in 
vierstelliger Dezimalarithmetik rechnen, hat die Dezimalzahl 70 das 
Neunerkomplement 9929 und das Zehnerkomplement 9930. In achtstelliger 
Dezimalarithmetik wären es 99999929 bzw. 99999930.

Dem Neunerkomplement entspricht bei Binärzahlen das Einerkomplement 
(welches man durch bitweise Negation erhält), und dem Zehnerkomplement 
entspricht das Zweierkomplement.

von Andi (Gast)


Lesenswert?

Ich dachte das Zweierkompliment ist wenn ich der Frau gegenüber ein 
Kompliment mache and sie gibt eins zurück.
Während das Einerkompliment eher enttäuschend verläuft...

von Fitzebutze (Gast)


Lesenswert?

Solange obiges nicht in einem flotten Dreierkompliment endet...

von J. S. (engineer) Benutzerseite


Lesenswert?

LostInMusic schrieb:
>>Das 2er-Komplement ist doch das, was eine Zahl bitweise zur 2
>>komplettiert.
>>Also 2-x, oder?
> Auf keinen Fall.

Eigentlich schon (?). Es geht ja um die Vervollständigung zur 2, daher 
heißt es ja "Komplement". Es ist halt nur so, dass im Zweiersystem die 
Einerstelle nur 0 und 1 sein kann und somit die 2 praktisch dasselbe 
ist, wie die Null. Der Überlauf wird ignoriert bzw. gedanklich in die 
nächste Stelle weitergeleitet.

Man muss sogar für das richtige Ergebnis des 2er-Komplements genau diese 
Betrachtung heranziehen und nicht das "Nuller-Komplement", weil man 
sonst nicht die letzte 1 bekommt, die den Unterschied zwischen 2er- und 
1er-Komplement bedingt. Du hast es ja beim Beispiel des 9er-Komplementes 
richtig dargestellt.

Die 2 ist halt eine "blöde" Zahl, weil eine Negation und Komplement 
denselben Bit-Wert ergeben, der aber funktionell nicht Derselbe ist. 
Schon beim 3er System sieht man das. Da lassen sich sehr interessante 
Arithmetiken aufziehen. Eigentlich ist es schade, dass Konrad Zuse nicht 
das 3er-System verwendet hat. Da ist action drin!

Wer mal ein bischen spielen will: Absolut lustig sind das im alten 
Agypten oft verwendete 5er-System und (man höre und staune!) das von den 
Maya in Südamerika verwendete 20er System!

Preisfrage: Man formuliere die Berechnung von "X = 13020 - 7999" als 
20er-Komplement auf einem virtuellen Maya-Computer. Einfachsten nimmt 
man wie beim HEX einfach Buchstaben dazu.

von LostInMusic (Gast)


Lesenswert?

>Eigentlich schon (?). Es geht ja um die Vervollständigung zur 2, daher
>heißt es ja "Komplement".

Ja, korrekt. Die Komplementbildung ist immer als bitweise oder 
stellenweise zu verstehen, so wie es Martin K. auch klar formuliert hat. 
Von daher muss ich zugeben, dass meine Kritik an seinem Kommentar 
diesbezüglich nicht berechtigt war. Sorry, beim nächsten Mal pass ich 
besser auf.

>"X = 13020 - 7999" als 20er-Komplement

Gnade! Aber gut, ich probiers:

13020 dez = 1CB0 und 7999 dez = JJJ (J = 19 dez). Das 19er-Komplement 
des Subtrahenden JJJ bei vierstelliger Maya-(die spinnen!)-Arithmetik 
ist J000 und das 20er-Komplement folglich J001. Die Addition von 1CB0 
und J001 ergibt 0CB1. Das ist dezimal 12·20² + 11·20 + 1 = 4800 + 220 + 
1 = 5021 und damit das richtige Ergebnis.

von Motombo (Gast)


Lesenswert?

>20er-System
Irre! Das erklärt, warum die Maya ausgestorben sind.

von DivisionByZero (Gast)


Lesenswert?

Jürgen S. schrieb:
> Wer mal ein bischen spielen will: Absolut lustig sind das im alten
> Agypten oft verwendete 5er-System und (man höre und staune!) das von den
> Maya in Südamerika verwendete 20er System!

Gut die Äqypter haben mit den Fingern einer Hand gerechnet.
Araber mit beiden Händen und die Mayas haben Hände und Füsse zu Hilfe 
genommen...

..und Schreiner das 3er System erfunden ;)

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.