Operador de SLA VHDL

1

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.

    
pregunta e2p

1 respuesta

-2

Para usar los operadores sla o sll , etc ... necesita usar el tipo bit_vector y no el std_logic_vector one.

Por eso no aconsejo a nadie que use este tipo de operadores de cambio, sino que crea una instancia de un bucle for como el siguiente:

FOR i IN 0 TO N - 1 LOOP
    data := data(14 DOWNTO 0) & data(0);
END LOOP;
    
respondido por el A. Kieffer

Lea otras preguntas en las etiquetas