library ieee; use ieee.std_logic_1164.all; entity hamm_dec_4b is port ( code : in std_logic_vector(6 downto 0); data : out std_logic_vector(3 downto 0); status : out std_logic ); end hamm_dec_4b; architecture Behavioural of hamm_dec_4b is signal syndrom_nez : std_logic; signal syndrom : std_logic_vector(2 downto 0); begin ---------------------------------------------------------------------- -- HAMMING DECODER (7,4) ---------------------------------------------------------------------- -- SYNDROM ------------------------------------------------------------------ syndrom(0) <= code( 0) xor code( 2) xor code( 4) xor code( 6) ; syndrom(1) <= code( 1) xor code( 2) xor code( 5) xor code( 6) ; syndrom(2) <= code( 3) xor code( 4) xor code( 5) xor code( 6) ; syndrom_nez <= syndrom(0) or syndrom(1) or syndrom(2) ; -- CORRECTED DATA ----------------------------------------------------------- data( 0) <= code( 2) xor (syndrom(0) and syndrom(1) and (not syndrom(2)) ); data( 1) <= code( 4) xor (syndrom(0) and (not syndrom(1)) and syndrom(2) ); data( 2) <= code( 5) xor ((not syndrom(0)) and syndrom(1) and syndrom(2) ); data( 3) <= code( 6) xor (syndrom(0) and syndrom(1) and syndrom(2) ); -- STATUS ------------------------------------------------------------------- status <= syndrom_nez; -- "0" : everything ok -- "1" : data corrected end Behavioural;