mikrocontroller.net

Forum: FPGA, VHDL & Co. seh meinen Syntaxfehler nicht?


Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe folgenden VHDL Codeschnipsel

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;

entity mux is
 generic (
  width : integer := 8
 );
 port (
  clk   : in  std_logic;
  addr  : in  std_logic_vector(2 downto 0);
  in_a  : in  std_logic_vector(width-1 downto 0);
  in_b  : in  std_logic_vector(width-1 downto 0);
  out_x : out std_logic_vector(width-1 downto 0)
 );
end mux;

architecture Behavioral of mux is

begin
 process (clk)
 begin
  if (clk'event and clk = '1') then
   out_x <= in_a when (addr = "000") else
            in_b;
  end if;
 end process;
end Behavioral;

in der Zeile "out_x <= in_a when (addr = "000") else" wird mir folgender 
Fehler ausgegebn:
Line 51. parse error, unexpected WHEN, expecting SEMICOLON
ich weiß aber nicht, wo ich da noch ein Semikolon hinsetzen soll. Die 
Syntax ist auch schon aus dem Template entnommen....

Danke für Hilfe

Gruß,
matzunami

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

Bewertung
0 lesenswert
nicht lesenswert
Du hast eine Concurrent-Schreibweise in einem Prozess verwendet.

So wärs richtig:
 process (clk)
 begin
  if (clk'event and clk = '1') then
   if addr="000" then    out_x <= in_a;
   else                  out_x <= in_b;
   end if;
  end if;
 end process;

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke, ich weiß so geht es. ABER: in den Templates unter Synthesis 
Constructs -> Conditional -> When/Else Statement, steht dies doch genau 
so drin und ich hab es auch schon genau so verwendet.

<name> <= <expression> when <condition> else
          <expression> when <condition> else
          <expression>;

Dies Funktioniert doch auch, hab ich doch auch schon verwendet, nur 
jetzt bekomm ich diese Fehlermeldung???

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du darfst dieses konstrukt jedoch nicht innerhalb einen prozesses 
verwenden, nur ausserhalb.

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke ich seh grad das ich ihn damals auch außerhalb benutzt habe.
Vielen Dank

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.