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
Wir helfen gerne: Was können wir tun, damit Du diese Aufgabe lösen kannst?
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
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.
...und bedenke auch, dass ev. deine Dozenten mitlesen. Nicht zwingend wegen der fachlich interessanten Beiträge...
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
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
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
SChön Lothar, wir wissen das du der FPGA- Gott auf Erden bist, aber was hat das jetzt Maria geholfen? Gruß Jonas
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
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
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...
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 ... :-)
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.
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?
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
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 ...
>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
>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.
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...
Solange obiges nicht in einem flotten Dreierkompliment endet...
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.
>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.
>20er-System
Irre! Das erklärt, warum die Maya ausgestorben sind.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.