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
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; |
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???
du darfst dieses konstrukt jedoch nicht innerhalb einen prozesses verwenden, nur ausserhalb.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.