rendered paste bodylibrary 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;