Forum: FPGA, VHDL & Co. While-Schleife und ein Signal


von Andreas Sathle (Gast)


Lesenswert?

Ich habe folgendes Problem:

Ich will in einer funktion integer in einen string umwandeln.
Allerdings bekomme ich den integer als signal rein. Bei der Synthese
kriege ich dann flogende Fehlermeldung:

"Error: VHDL Loop Statement error at Programm.vhd(69): WHILE iteration
scheme condition cannot contain signals"

Habe auch versucht den signal in eine temporäre Variable zu speichern
und dann an die Funktion zu übergeben. Gleiches Ergebniss.

Wie kann ich dieses Fehler beheben?

function str(int: integer) return string is

      variable text:      string(16 downto 1);
      variable temp:      integer;
      variable pos_int:   integer;
      variable len:       integer := 1;
      variable power:     integer := 1;

   begin
      text:=(others=>nul);
      -- umwandlung von negativen zahlen
      pos_int := abs(int);
      temp    := pos_int;
      -- integer länge prüfen
      while temp >= 10 loop    <--Diese Zeiel macht mir problemme

        len := len + 1;
        temp:= temp / 10;
      end loop ;
      -- umwandlung einzener zahlen in die charackter
      for i in len downto 1 loop
        text(i) := chr(pos_int/power mod 10);
        power := power * 10;
      end loop ;
      return text;
     end str;

BEGIN
    process(TIME_REF,TEST_BTN_REF)
      Variable test : integer;
    begin

    test:=TIME_REF;<-Übergabe von dem Wert aus dem Signal in die temp
Variable
    if TEST_BTN_REF'event and TEST_BTN_REF='1' then
      STRING_OUT<=(others=>nul);
      DEVICE_OUT<=0;
    else
      DEVICE_OUT<=1;
      STRING_OUT<=str(test);<--Hier wird die funktion aufgerufen
    end if;

von Jörn (Gast)


Lesenswert?

Mal ne andere Frage: Warum willst du einen Integerwert in einen String
umwandeln?

von Philipp (Gast)


Lesenswert?

Auf den ersten Blick dacht ich du brauchst die funktion bei der
simulation. Dafür geht auch einfach das hier:

str = integer'image(0815)

Nachdem ich gesehen habe, dass du diesen Code anscheinend
synthetisieren willst, frage ich mich auch warum. Mal abgesehen davon,
dass ich den code da oben niemals einem Synthesetool in die hand geben
würde, gibt es überhaupt welche, die irgendwie funktionen
synthetisieren ?

von Andreas Sathle (Gast)


Lesenswert?

Quartus II 4.2sp1 Web Edition Full<--ich benutze den da zum
synthetisieren...und es läuft alles einwandfrei.

ich werde gleich deinen Vorschlag mal ausprobieren. Wenns klappt dann
kann ich mir wirklich die funktion oben sparen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.