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.