ENTITY CRC IS PORT ( RESET : IN STD_LOGIC; TX_CLK : IN STD_LOGIC; DATA_IN : IN STD_LOGIC_VECTOR (31 DOWNTO 0); CTRL_IN : IN STD_LOGIC_VECTOR (3 DOWNTO 0); CRC_CHECK : OUT STD_LOGIC ); END CRC; ARCHITECTURE CRC OF CRC IS SIGNAL i_crc : std_logic_vector(15 downto 0); SIGNAL i_crc_2 : std_logic_vector(15 downto 0); SIGNAL data_buf : std_logic_vector(31 downto 0); SIGNAL d : std_logic_vector(47 downto 0); SIGNAL c : std_logic_vector(15 downto 0); SIGNAL newcrc : std_logic_vector(15 downto 0); process (TX_CLK, RESET) begin if (RESET = '0') then d <= (others => '0'); c <= (others => '1'); newcrc <= (others => '0'); i_crc <= (others => '0'); elsif (TX_CLK'event and TX_CLK = '1') then --c := X"0475"; d<= DATA_IN & X"B313"; i_crc <= newcrc; if (newcrc = X"0000")then CRC_CHECK <= '1'; else CRC_CHECK <= '0'; end if; newcrc(0) <= d(31) xor d(30) xor d(27) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(20) xor d(19) xor d(18) xor d(17) xor d(16) xor d(15) xor d(13) xor d(12) xor d(11) xor d(10) xor d(9) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(9) xor c(10) xor c(11) xor c(14) xor c(15); newcrc(1) <= d(31) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(20) xor d(19) xor d(18) xor d(17) xor d(16) xor d(14) xor d(13) xor d(12) xor d(11) xor d(10) xor d(9) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(2) xor d(1) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(9) xor c(10) xor c(11) xor c(12) xor c(15); newcrc(2) <= d(31) xor d(30) xor d(29) xor d(28) xor d(16) xor d(14) xor d(1) xor d(0) xor c(0) xor c(12) xor c(13) xor c(14) xor c(15); newcrc(3) <= d(31) xor d(30) xor d(29) xor d(17) xor d(15) xor d(2) xor d(1) xor c(1) xor c(13) xor c(14) xor c(15); newcrc(4) <= d(31) xor d(30) xor d(18) xor d(16) xor d(3) xor d(2) xor c(0) xor c(2) xor c(14) xor c(15); newcrc(5) <= d(31) xor d(19) xor d(17) xor d(4) xor d(3) xor c(1) xor c(3) xor c(15); newcrc(6) <= d(20) xor d(18) xor d(5) xor d(4) xor c(2) xor c(4); newcrc(7) <= d(21) xor d(19) xor d(6) xor d(5) xor c(3) xor c(5); newcrc(8) <= d(22) xor d(20) xor d(7) xor d(6) xor c(4) xor c(6); newcrc(9) <= d(23) xor d(21) xor d(8) xor d(7) xor c(5) xor c(7); newcrc(10) <= d(24) xor d(22) xor d(9) xor d(8) xor c(6) xor c(8); newcrc(11) <= d(25) xor d(23) xor d(10) xor d(9) xor c(7) xor c(9); newcrc(12) <= d(26) xor d(24) xor d(11) xor d(10) xor c(8) xor c(10); newcrc(13) <= d(27) xor d(25) xor d(12) xor d(11) xor c(9) xor c(11); newcrc(14) <= d(28) xor d(26) xor d(13) xor d(12) xor c(10) xor c(12); newcrc(15) <= d(31) xor d(30) xor d(29) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(20) xor d(19) xor d(18) xor d(17) xor d(16) xor d(15) xor d(14) xor d(12) xor d(11) xor d(10) xor d(9) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(9) xor c(10) xor c(13) xor c(14) xor c(15); end if; end process;