All pastes #212681 Raw Edit

Miscellany

public text v1 · immutable
#212681 ·published 2006-10-21 00:15 UTC
rendered paste body
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;