Unzulässige sequentielle Anweisung Rechtsverschiebungsmultiplikator

Ich versuche, einen Rechtsverschiebungsmultiplikator zu implementieren, und das soll der Datenpfad sein. Warum erzeugt dieser Code diesen Fehler?:

Unzulässige sequentielle Anweisung.

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_signed.all;

entity data_path_module is
port (
a_in        : In    std_logic_vector(3 downto 0);
b_in        : In    std_logic_vector(3 downto 0);
rst_n       : In    std_logic;
p_in        : In    std_logic_vector(3 downto 0);

a_out       : Out   std_logic_vector(3 downto 0);
b_out       : Out   std_logic_vector(3 downto 0);
valid_out   : Out   std_logic;
p_out       : Out   std_logic_vector(3 downto 0)
);
end entity data_path_module;

architecture data_path_module_df of data_path_module is
signal tmp : std_logic_vector(3 downto 0);
begin
P1 : process (a_in, b_in, rst_n, p_in)
begin
p_out   <= p_in + b_in when (a_in(0) = '1') else p_in;
a_out   <= b_in(0)  & a_in(2 downto 0);
b_out   <= '0'      & b_in(2 downto 0);

valid_out   <= '1';
end process P1;
end architecture data_path_module_df;

Antworten (2)

Sie haben uns nicht mitgeteilt, welche Toolchain Sie verwenden, aber der wahrscheinliche Grund ist, dass Zuweisungen whenin einem Prozess vor VHDL-2008 nicht unterstützt werden. Aktivieren Sie entweder den 2008-Modus in Ihrem Tool oder verwenden Sie ifstattdessen eine Anweisung.

When-else-Konstrukt ist eine gleichzeitige Anweisung gemäß vhdl-93-Standards. Sie verwenden es unter Prozess als sequentielle Anweisung.