mikrocontroller.net

Forum: FPGA, VHDL & Co. Choice XXX is not a locally static expression


Autor: Thomas B. (thomas1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag

Ich habe ein ähnliches Problem wie schon andere. Bei mir spuckt das ISE 
Webpack beim Synthetisieren die Warnung aus:

Choice ac_rlg_sig_d45 is not a locally static expression.

Aber ac_rlg_sig_d45 ist ein Array von Konstanten, die im gleichen 
Prozess definiert wurden.
Hier ist mein Code:
subtype sva_rlg_state is STD_LOGIC_VECTOR (7 downto 0);
type a_rlg_state is array (5 downto 0) of sva_rlg_state;
constant ac_rlg_sig_d45: a_rlg_state :=  
   (
    x"02", x"06", x"04", x"05", x"01", x"03"
   );

Dann die Case-Verzweigung:
case sv_rlg is
   when ac_rlg_sig_d45(4) => es_rlg_dir <= vor;
   when ac_rlg_sig_d45(0) => es_rlg_dir <= rueck;
   when others => es_fb_type <= wait_for_signal;
end case;

Könnte es am Index liegen, der ändern könnte? Mir ist zwar nicht klar, 
was daran nicht statisch ist!

Danke für jede Hilfe!

Gruss Thomas

PS: Entschuldigung für die langen Variablennamen! Aber da ich an einem 
ersten mittelgrossen Projekt bin, habe ich mir vorgenommen, die 
Variablen möglichst eindeutig zu wählen, auch wenn sie dann lang werden.
Übrigens brauche ich immer so eine Art Zuordnung, also für ein Signal 
ein s_Signalname, für ein Signalvektor ein sv_Signalname, für ein Array 
ein a_Arrayname usw. Oder hat jemand eine schlauere und übersichtlichere 
Methode?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Typ hat sv_rlg?

Autor: Thomas B. (thomas1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist ein
STD_LOGIC_VECTOR(7 downto 0)

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Array slices sind lediglich globally static.

Siehe auch
http://www.vhdl.org/comp.lang.vhdl/FAQ1.html#static

oder

IEEE1076-2002, sec. 7.4.2

--
Marcus

Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum machst du es so kompliziert?

warum nicht einfach:

type STATE_type  is (
  RESET, STATE1, STATE2...);

signal  STATE: STATE_type;


Nichtsdestotrotz kann ich den Fehler auch nicht nachvollziehen...

Gruß,
Maxim

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.