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