www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Quartus - nicht konstante RANGE wie umgehen


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Holger (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo zusammen,

ich habe mit folgender Funktion ein Problem im Quartus:
FUNCTION summe(
    zahl1    : STD_LOGIC_VECTOR;
    zahl2    : STD_LOGIC_VECTOR;
    index    : NATURAL
  ) RETURN STD_LOGIC_VECTOR IS
        VARIABLE v_summe      : STD_LOGIC_VECTOR(11 downto 0);
        VARIABLE v_tmp_summe  : STD_LOGIC_VECTOR(11 downto 0);

BEGIN
   v_tmp_sum := (OTHERS => '0');

   FOR i IN 0 TO 2 LOOP
     IF index < 8 THEN
       v_tmp_summe(zahl1'HIGH+index+i downto index+i) := zahl1;
       v_summe := v_summe + v_tmp_summe;
     ELSE
       EXIT;
     END IF;

   END LOOP;

   RETURN v_summe;
END;
Dabei wird mir angemeckert, dass die "left bound" und "right bound" in 
dieser Zeile nicht konstant sind.
v_tmp_summe(zahl1'HIGH+index downto index) := zahl1;
Sollen sie ja auch nicht sein, da ich in einem Takt mehrere Additionen 
ausführen will.

Die Funktion wurde erfolgreich mit Modelsim simuliert, nur Quartus stört 
sich an dieser Zeile bzw. dem Hochzählen des Index.
Wie kann ich diese Fehlermeldung umgehen und dennoch meine Funktion nach 
aktuellem Stand umsetzen?

Möchte nach der ganzen Simulation meines Projektes jetzt nur ungern 
alles noch einmal umbauen bzw. eine andere Art der Umsetzung wählen, nur 
weil Quartus nicht versteht, was ich von ihm möchte :)

Vielen Dank!
Holger

PS: Was die Gatterlaufzeiten bei mehreren Additionen pro Takt betrifft, 
bin ich mir bewusst, dass das ein Problem werden könnte. Die Taktraten 
sind aber niedrig genug!

Autor: Holger (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

ich habe inzwischen rausgefunden, dass eine Variable in der RANGE Angabe 
nicht VHDL-conform ist. Nur frage ich mich, wieso es dann Modelsinm 
nicht anmeckert.

Nun stehe ich da, freue mich über meine gute Idee mit der Funktion und 
das alles super mit der Simulation geklappt hat, ich es aber nun nicht 
im Quartus übersetzen kann.

Hat jemand eine andere Idee, wie ich in einem Takt mehrere Operationen 
ausführen kann und somit diese Index-Sache umgehen kann?

Vielen Dank!
Holger

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

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Holger schrieb:
> ich habe inzwischen rausgefunden, dass eine Variable in der RANGE Angabe
> nicht VHDL-conform ist.
Wo steht das?
Und zudem hast du keine Variable in der Bereichsangabe...  :-o
> Hat jemand eine andere Idee, wie ich in einem Takt mehrere Operationen
> ausführen kann und somit diese Index-Sache umgehen kann?
Kannst du die Schleife nicht einfach entrollen?
Wie oft wird diese summe() aufgerufen?
Brauchst du unbedingt eine Funktion?
Falls nein: schreib das Zeug doch Concurrent oder als Prozess hin...

Ich kapier sowieso nicht (ganz), was du da machst:
zahl2 wird gar nicht verwendet.
Soll v_summe speichernd sein?
Ist index variabel?
Warum rechnest du mit std_logic vektoren?

Was macht diese Funktion überhaupt? Was ist das für eine Summe?

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net