Multiplicador de desplazamiento a la derecha de una declaración secuencial

1

Estoy intentando implementar un multiplicador de cambio a la derecha y se supone que esa es la ruta de datos. ¿Por qué este código genera este error ?:

  

Declaración secuencial ilegal.

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;
    
pregunta Upgarde

2 respuestas

2

No nos ha dicho qué cadena de herramientas está utilizando, pero la razón probable es que las asignaciones que usan when no son compatibles dentro de un proceso anterior a VHDL-2008. Active el modo 2008 en su herramienta o use una declaración if en su lugar.

    
respondido por el scary_jeff
1

Cuando-else construcción es una declaración concurrente según los estándares vhdl-93. Lo está utilizando en proceso, como declaración secuencial.

    
respondido por el MITU RAJ

Lea otras preguntas en las etiquetas