Rechnen mit numeric Bibliothek und verschieden breiten std_logic_vector

Gast #3779580
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren