Johannes H. schrieb:
> Der Fehler liegt in der case Zeile. Wenn ich das in Modelsim kompeliere
> bekomme ich als Fehlermeldung: "Array type case expression must be of a
> locally static subtype" heraus. Mir ist klar, dass die die case
> Bedingung statisch sen muss, deshalb habe ich auh probiert, diese zuert
> in eine Variable zuzuweißen und die Variable als Bedingung abzufragen,
> jedach kamm hier auch die selbe Fehlermeldung :(
Hallo Johannes,
das Problem ist, dass die Länge deines Vektors s_column_buttons eine
generische Länge hat (Längen hängt ab von COL_ROW_BUTTONS).
Ersetze bitte mal COL_ROW_BUTTONS durch die eigentliche Zahl und du
wirst sehen, dass die Meldung verschwindet. Das macht in deinem Fall
auch Sinn, weil die einzelnen Fälle auch eine fixe Länge haben, daher
braucht auch der "Probant" eine fixe Länge. Dieses Verhalten ist
übrigens in der VHDL Spezifikation so definiert, wenn du mal tiefer
einsteigen möchtest, kann ich empfehlen da mal einen kleinen Blick
reinzuwerfen.
Du solltest mal folgendes probieren:
1 | case s_column_buttons(3 downto 0) is
|
Damit ist die Abfrage genauso locally static, wie die einzelnen Fälle
die du angibst.
Entsprechend solltest du noch die Generics einschränken, damit das bei
Fehlkonfiguration nicht um die Ohren fliegt:
1 | generic (
|
2 | COL_ROW_BUTTONS : natural range 4 to 32 := 4; -- 32 ist hier mal ein beliebiges Maximum
|
3 | KEYPAD_BUTTONS : natural := 16
|
4 | );
|
Ich habe hier gerade kein Modelsim Zugriff, aber zumindest prinzipiell
sollte es so korrekt sein.