Estoy tratando de hacer un proyecto simple en VHDL. La especificación es que toma datos de 4 bits como entrada y genera un bit de paridad (usaré este pequeño módulo en UART más adelante). Mi enfoque es que, si sumo cada bit de los datos, obtengo el número de 1 dentro. de eso Entonces, si es incluso genero 0, otra cosa 1.
Escribí tal código para este propósito:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use IEEE.std_logic_unsigned.all;
entity parity_checker is
Port ( data : in STD_LOGIC_VECTOR (3 downto 0);
even_parity_bit : out STD_LOGIC);
end parity_checker;
architecture Behavioral of parity_checker is
signal sum_of_1s : std_logic_vector (2 downto 0) := "000";
begin
sum_of_1s <= data(0) + data(1) + data(2) + data(3);
if (sum_of_1s(0) = '1') then -- There is an odd number of 1's, so parity bit is 1.
even_parity_bit <= '1';
else
even_parity_bit <= '0';
end if;
end Behavioral;
Cuando intento compilar esto, VHDL da un error y dice "+ no puedo tener tales operandos en este contexto". En la línea donde sumo los datos.
Supongo que conozco la razón, que es + no se puede realizar '1' + '1' y etc., pero se puede realizar "001" + "001" y tal. Entonces, ¿cómo debo resolver este problema mientras sigo usando mi método de sumar todos los bits?