library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; -- usage: -- -- set the current crc32 value and the update nibble and read the new_crc32 value -- valid is set to 1, if crc32 is equal to the crc32 reminder entity ethernet_crc32 is port( crc32: in unsigned(31 downto 0); new_crc32: out unsigned(31 downto 0); update: in unsigned(3 downto 0); valid: out std_logic); end entity ethernet_crc32; architecture rtl of ethernet_crc32 is begin valid <= '1' when crc32 = x"c704dd7b" else '0'; new_crc32 <= crc32(27) & crc32(26) & (crc32(31) xor crc32(25) xor update(0)) & (crc32(30) xor update(1) xor crc32(24)) & (update(2) xor crc32(23) xor crc32(29)) & (crc32(22) xor update(3) xor crc32(31) xor crc32(28) xor update(0)) & (crc32(31) xor crc32(21) xor crc32(30) xor update(1) xor update(0)) & (crc32(20) xor update(2) xor crc32(29) xor crc32(30) xor update(1)) & (crc32(19) xor update(3) xor update(2) xor crc32(29) xor crc32(28)) & (update(3) xor crc32(18) xor crc32(28)) & crc32(17) & crc32(16) & (crc32(31) xor crc32(15) xor update(0)) & (crc32(30) xor crc32(14) xor update(1)) & (crc32(13) xor update(2) xor crc32(29)) & (update(3) xor crc32(12) xor crc32(28)) & (crc32(11) xor crc32(31) xor update(0)) & (crc32(31) xor crc32(10) xor crc32(30) xor update(1) xor update(0)) & (crc32(31) xor update(2) xor crc32(29) xor crc32(30) xor crc32(9) xor update(1) xor update(0)) & (update(3) xor update(2) xor crc32(29) xor crc32(28) xor crc32(30) xor update(1) xor crc32(8)) & (update(3) xor crc32(31) xor crc32(7) xor update(2) xor crc32(29) xor crc32(28) xor update(0)) & (update(3) xor crc32(31) xor crc32(28) xor crc32(30) xor update(1) xor update(0) xor crc32(6)) & (update(2) xor crc32(5) xor crc32(29) xor crc32(30) xor update(1)) & (update(3) xor crc32(31) xor crc32(4) xor update(2) xor crc32(29) xor crc32(28) xor update(0)) & (update(3) xor crc32(31) xor crc32(28) xor crc32(30) xor update(1) xor update(0) xor crc32(3)) & (update(2) xor crc32(29) xor crc32(30) xor update(1) xor crc32(2)) & (update(3) xor crc32(31) xor update(2) xor crc32(29) xor crc32(1) xor crc32(28) xor update(0)) & (update(3) xor crc32(31) xor crc32(28) xor crc32(30) xor update(1) xor crc32(0) xor update(0)) & (crc32(31) xor update(2) xor crc32(29) xor crc32(30) xor update(1) xor update(0)) & (update(3) xor update(2) xor crc32(29) xor crc32(28) xor crc32(30) xor update(1)) & (update(3) xor update(2) xor crc32(29) xor crc32(28)) & (update(3) xor crc32(28)); end architecture rtl;