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;
Sie haben uns nicht mitgeteilt, welche Toolchain Sie verwenden, aber der wahrscheinliche Grund ist, dass Zuweisungen when
in einem Prozess vor VHDL-2008 nicht unterstützt werden. Aktivieren Sie entweder den 2008-Modus in Ihrem Tool oder verwenden Sie if
stattdessen eine Anweisung.
When-else-Konstrukt ist eine gleichzeitige Anweisung gemäß vhdl-93-Standards. Sie verwenden es unter Prozess als sequentielle Anweisung.