Shark schrieb:
> Hat jemand eine Idee, wo das Problem liegen könnte?
Welchen Datentyp hat y_int? Ist das ein integer? Falls nein: warum
versuchst du einem std_logic einen integer zuzuweisen?
> PS: Ich habe hier im Forum gelesen, dass es besser die Funktion
> to_integer und die ieee.numeric_std benutzt werden sollen.
Gut gelesen!
Siehe den Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"
Und das da: http://www.lothar-miller.de/s9y/categories/16-Numeric_Std
Aber du brauchst hier weder die std_logic_arith noch die numeric_std,
weil da gar nichts gerechnet werden muss! Schreib es einfach so:
1 | case sel is
|
2 | when "000" => y_int := a(0);
|
3 | when "001" => y_int := a(1);
|
4 | :
|
5 | :
|
Richtige Hacker würden das natürlich per Index und ohne Prozess
erledigen:
1 | use ieee.numeric_std.all;
|
2 | :
|
3 | :
|
4 | y <= a(to_integer(unsigned(sel));
|
BTW:
Das gibt in der Simulation ein Latch. In der Hardware ist es zum Glück
egal, denn da gibt es nur '0' und '1' in einer Abfrage...
BTW2:
wozu der unnötige Umweg über y_int?
Weise das Ergebnis doch direkt dem Signal y zu...
Zur unnötigen Verwendung von Signalen:
Beitrag "Variable vs Signal"
BTW3:
wenn du schon unbedingt die std_logic_arith verwenden
willst/musst/sollst, dann muss da eigentlich auch die use
std_logic_unsigned oder die std_logic_signed dabei sein, denn sonst hast
du nichts gewonnen und musst alle Operationen von Hand casten...