Tratar con varios tipos en VHDL

0

Estoy intentando implementar esta fórmula:

$$ salida = \ sum_ {i = 0} ^ {N-1} (entrada [i] ~~ \ text {xor} ~~ entrada [N - i - 1]) ~~ \ times ~~ 2 ^ i $$

La entrada tiene \ $ N \ $ bits y la salida tiene \ $ S = N / 2 \ $ bits.

Esto es lo que tengo:

library IEEE;
use ieee.numeric_std.all;
use IEEE.STD_LOGIC_1164.all;
use ieee.std_logic_unsigned.all;

entity eq is
    generic (
        N : positive := 4;
        S : positive := 2
    );   
    port (
        I : in std_logic_vector(N-1 downto 0);
        O : out std_logic_vector(S-1 downto 0)
    );
end eq;

architecture arch of eq is 
begin
    process (I)
        variable total : integer;
        variable temp : std_logic_vector(S-1 downto 0);
        variable zeros : std_logic_vector(0 to S-2) := (others => '0');
    begin
        for k in 0 to N-1 loop
            -- do the xor operation first and store the bit at the end of an std_logic_vector of total length S
            temp := zeros & (I(k) xor I(N-k-1));
            -- multiply the above std_logic vector by 2^i, convert to integer and add to the total
            total := total + to_integer(unsigned(shift_left(unsigned(temp),k)));
            end loop;
    O <= std_logic_vector(to_unsigned(total,S));
    end process;
end arch;

Sigo recibiendo mensajes de conversión de tipo. Lanza esto en la línea con total := total + ... :

  

Error: Near std_logic_vector; tipo de expresión de conversión de tipo no se puede determinar de forma única

Cuando trato de arreglar una conversión de tipo particular, aparece otra.

    
pregunta christophebedard

1 respuesta

1

Las variables se usan como constantes en c, no para señales reales. Stick con entero, firmado, sin firmar y std_logic_vector.

Si necesita traducir entre ellos, aquí están las funciones para hacerlo:

Fuente: enlace

    
respondido por el laptop2d

Lea otras preguntas en las etiquetas