Tal vez es una pregunta muy fácil, pero pasé dos horas buscando soluciones e información en Internet y aún así no puedo hacer que funcione.
Necesito hacer una operación aritmética de desplazamiento a la izquierda. Utilicé operador de SLA estándar.
ModelSim durante la compilación muestra un error:
Blockquote ** Error: (vcom-1581) No hay entradas factibles para el operador de infijo 'sla'. ** Error: lado derecho incorrecto (expresión de infijo) en la asignación de variables.
Mi código
constant Vlsb : std_logic_vector(47 downto 0) := x"00002710CB29";
i_data : in std_logic_vector(15 downto 0);
.
process(i_clk) is
variable data : std_logic_vector(47 downto 0);
begin
if(i_rst_asyn = '0') then
data := (others => '0');
else
if(rising_edge(i_clk)) then
if(i_rst_syn = '1') then
data := (others => '0');
else
data(15 downto 0) := i_data;
data := data sla 31; -- ERROR LINE
data := std_logic_vector(signed(data) / signed(Vlsb));
end if;
end if;
end if;
o_data <= data;
end process;
Podrías decirme qué estoy haciendo mal, por favor.
Agregar: estoy usando la biblioteca std_logic_1164 y numeric_std en este módulo.