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


von matzunami (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Du hast eine Concurrent-Schreibweise in einem Prozess verwendet.

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

von matzunami (Gast)


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???

von Nephilim (Gast)


Lesenswert?

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

von matzunami (Gast)


Lesenswert?

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

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.