Ich möchte mehrere std_logic_vector (alle gleich breit) addieren und die Summe in einem entsprechend breiteren std_logic_vector speichern. Wie von Lothar Miller empfohlen sollen die Rechenoperationen mit der herstellerunabhängigen numeric-Bibliothek erfolgen. Mein Codeausschnitt hierfür: ---------------------------- USE ieee.numeric_std.ALL; SIGNAL a, b, c, d : std_logic_vector(3 DOWNTO 0); SIGNAL z : std_logic_vector(5 DOWNTO 0); z <= std_logic_vector(unsigned(a) + unsigned(b) + unsigned(c) + unsigned(d)); Damit erhalte ich mit Lattice Diamond folgende Fehlermeldung: "ERROR - CD297 : Width mismatch, location has width 6, value 4 Wenn ich noch mehr Typwandlungen durchführe, funktioniert es: z <= std_logic_vector(to_unsigned(to_integer(unsigned(a) + unsigned(b) + unsigned(c) + unsigned(d)), z'length)); Das sieht aber vor allem bei noch größeren Operationen, wie ich sie benötige, sehr unübersichtlich aus, daher die Frage, wie geht es "kürzer" bzw. "kompakter"? Ich freue mich über eure Rückmeldungen.
hmm, abcd haben je 4bit, das macht also:
1 | a+b=ab --> 5bit |
2 | ab+c=abc --> 6bit |
3 | abc+d=abcd --> 7bit |
Dein z hat aber nur 6bit... Vlt. bringt ihn das in Wallung?
Alle Summanden und auch die Summe müssen dort gleich breit sein. Du musst also die Summanden erst mit resize() auf die richtige Breite bringen.
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.