From c12db1448d6d85b704b56f1e5a7fa01e12755560 Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Tue, 28 Mar 2023 15:22:43 +0200 Subject: [PATCH] Add some more CRC that may be useful fo TBuf. --- .../easics/src/vhdl/PCK_CRC16_D28.vhd | 70 +++++++++++++++ .../easics/src/vhdl/PCK_CRC16_D28_usb.vhd | 70 +++++++++++++++ .../easics/src/vhdl/PCK_CRC16_D32_usb.vhd | 70 +++++++++++++++ .../easics/src/vhdl/PCK_CRC16_D32_x25.vhd | 70 +++++++++++++++ .../easics/src/vhdl/PCK_CRC28_D28.vhd | 82 ++++++++++++++++++ .../easics/src/vhdl/PCK_CRC32_D32_eth.vhd | 86 +++++++++++++++++++ .../easics/src/vhdl/PCK_CRC32_D64_eth.vhd | 86 +++++++++++++++++++ 7 files changed, 534 insertions(+) create mode 100644 libraries/external/easics/src/vhdl/PCK_CRC16_D28.vhd create mode 100644 libraries/external/easics/src/vhdl/PCK_CRC16_D28_usb.vhd create mode 100644 libraries/external/easics/src/vhdl/PCK_CRC16_D32_usb.vhd create mode 100644 libraries/external/easics/src/vhdl/PCK_CRC16_D32_x25.vhd create mode 100644 libraries/external/easics/src/vhdl/PCK_CRC28_D28.vhd create mode 100644 libraries/external/easics/src/vhdl/PCK_CRC32_D32_eth.vhd create mode 100644 libraries/external/easics/src/vhdl/PCK_CRC32_D64_eth.vhd diff --git a/libraries/external/easics/src/vhdl/PCK_CRC16_D28.vhd b/libraries/external/easics/src/vhdl/PCK_CRC16_D28.vhd new file mode 100644 index 0000000000..88718ee412 --- /dev/null +++ b/libraries/external/easics/src/vhdl/PCK_CRC16_D28.vhd @@ -0,0 +1,70 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^16 + x^14 + x^13 + x^11 + 1 +-- * data width: 28 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC16_D28 is + -- polynomial: x^16 + x^14 + x^13 + x^11 + 1 + -- data width: 28 + -- convention: the first serial bit is D[27] + function nextCRC16_D28 + (Data: std_logic_vector(27 downto 0); + crc: std_logic_vector(15 downto 0)) + return std_logic_vector; +end PCK_CRC16_D28; + + +package body PCK_CRC16_D28 is + + -- polynomial: x^16 + x^14 + x^13 + x^11 + 1 + -- data width: 28 + -- convention: the first serial bit is D[27] + function nextCRC16_D28 + (Data: std_logic_vector(27 downto 0); + crc: std_logic_vector(15 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(27 downto 0); + variable c: std_logic_vector(15 downto 0); + variable newcrc: std_logic_vector(15 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(27) xor d(22) xor d(20) xor d(19) xor d(17) xor d(15) xor d(14) xor d(12) xor d(7) xor d(5) xor d(4) xor d(3) xor d(2) xor d(0) xor c(0) xor c(2) xor c(3) xor c(5) xor c(7) xor c(8) xor c(10) xor c(15); + newcrc(1) := d(23) xor d(21) xor d(20) xor d(18) xor d(16) xor d(15) xor d(13) xor d(8) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor c(1) xor c(3) xor c(4) xor c(6) xor c(8) xor c(9) xor c(11); + newcrc(2) := d(24) xor d(22) xor d(21) xor d(19) xor d(17) xor d(16) xor d(14) xor d(9) xor d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor c(2) xor c(4) xor c(5) xor c(7) xor c(9) xor c(10) xor c(12); + newcrc(3) := d(25) xor d(23) xor d(22) xor d(20) xor d(18) xor d(17) xor d(15) xor d(10) xor d(8) xor d(7) xor d(6) xor d(5) xor d(3) xor c(3) xor c(5) xor c(6) xor c(8) xor c(10) xor c(11) xor c(13); + newcrc(4) := d(26) xor d(24) xor d(23) xor d(21) xor d(19) xor d(18) xor d(16) xor d(11) xor d(9) xor d(8) xor d(7) xor d(6) xor d(4) xor c(4) xor c(6) xor c(7) xor c(9) xor c(11) xor c(12) xor c(14); + newcrc(5) := d(27) xor d(25) xor d(24) xor d(22) xor d(20) xor d(19) xor d(17) xor d(12) xor d(10) xor d(9) xor d(8) xor d(7) xor d(5) xor c(0) xor c(5) xor c(7) xor c(8) xor c(10) xor c(12) xor c(13) xor c(15); + newcrc(6) := d(26) xor d(25) xor d(23) xor d(21) xor d(20) xor d(18) xor d(13) xor d(11) xor d(10) xor d(9) xor d(8) xor d(6) xor c(1) xor c(6) xor c(8) xor c(9) xor c(11) xor c(13) xor c(14); + newcrc(7) := d(27) xor d(26) xor d(24) xor d(22) xor d(21) xor d(19) xor d(14) xor d(12) xor d(11) xor d(10) xor d(9) xor d(7) xor c(0) xor c(2) xor c(7) xor c(9) xor c(10) xor c(12) xor c(14) xor c(15); + newcrc(8) := d(27) xor d(25) xor d(23) xor d(22) xor d(20) xor d(15) xor d(13) xor d(12) xor d(11) xor d(10) xor d(8) xor c(0) xor c(1) xor c(3) xor c(8) xor c(10) xor c(11) xor c(13) xor c(15); + newcrc(9) := d(26) xor d(24) xor d(23) xor d(21) xor d(16) xor d(14) xor d(13) xor d(12) xor d(11) xor d(9) xor c(0) xor c(1) xor c(2) xor c(4) xor c(9) xor c(11) xor c(12) xor c(14); + newcrc(10) := d(27) xor d(25) xor d(24) xor d(22) xor d(17) xor d(15) xor d(14) xor d(13) xor d(12) xor d(10) xor c(0) xor c(1) xor c(2) xor c(3) xor c(5) xor c(10) xor c(12) xor c(13) xor c(15); + newcrc(11) := d(27) xor d(26) xor d(25) xor d(23) xor d(22) xor d(20) xor d(19) xor d(18) xor d(17) xor d(16) xor d(13) xor d(12) xor d(11) xor d(7) xor d(5) xor d(4) xor d(3) xor d(2) xor d(0) xor c(0) xor c(1) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(10) xor c(11) xor c(13) xor c(14) xor c(15); + newcrc(12) := d(27) xor d(26) xor d(24) xor d(23) xor d(21) xor d(20) xor d(19) xor d(18) xor d(17) xor d(14) xor d(13) xor d(12) xor d(8) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor c(0) xor c(1) xor c(2) xor c(5) xor c(6) xor c(7) xor c(8) xor c(9) xor c(11) xor c(12) xor c(14) xor c(15); + newcrc(13) := d(25) xor d(24) xor d(21) xor d(18) xor d(17) xor d(13) xor d(12) xor d(9) xor d(6) xor d(3) xor d(0) xor c(0) xor c(1) xor c(5) xor c(6) xor c(9) xor c(12) xor c(13); + newcrc(14) := d(27) xor d(26) xor d(25) xor d(20) xor d(18) xor d(17) xor d(15) xor d(13) xor d(12) xor d(10) xor d(5) xor d(3) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(3) xor c(5) xor c(6) xor c(8) xor c(13) xor c(14) xor c(15); + newcrc(15) := d(27) xor d(26) xor d(21) xor d(19) xor d(18) xor d(16) xor d(14) xor d(13) xor d(11) xor d(6) xor d(4) xor d(3) xor d(2) xor d(1) xor c(1) xor c(2) xor c(4) xor c(6) xor c(7) xor c(9) xor c(14) xor c(15); + return newcrc; + end nextCRC16_D28; + +end PCK_CRC16_D28; diff --git a/libraries/external/easics/src/vhdl/PCK_CRC16_D28_usb.vhd b/libraries/external/easics/src/vhdl/PCK_CRC16_D28_usb.vhd new file mode 100644 index 0000000000..2993572c2f --- /dev/null +++ b/libraries/external/easics/src/vhdl/PCK_CRC16_D28_usb.vhd @@ -0,0 +1,70 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^16 + x^15 + x^2 + 1 +-- * data width: 28 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC16_D28 is + -- polynomial: x^16 + x^15 + x^2 + 1 + -- data width: 28 + -- convention: the first serial bit is D[27] + function nextCRC16_D28 + (Data: std_logic_vector(27 downto 0); + crc: std_logic_vector(15 downto 0)) + return std_logic_vector; +end PCK_CRC16_D28; + + +package body PCK_CRC16_D28 is + + -- polynomial: x^16 + x^15 + x^2 + 1 + -- data width: 28 + -- convention: the first serial bit is D[27] + function nextCRC16_D28 + (Data: std_logic_vector(27 downto 0); + crc: std_logic_vector(15 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(27 downto 0); + variable c: std_logic_vector(15 downto 0); + variable newcrc: std_logic_vector(15 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := 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(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(13) xor c(14) xor c(15); + newcrc(1) := 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(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(13) xor c(14) xor c(15); + newcrc(2) := d(16) xor d(14) xor d(1) xor d(0) xor c(2) xor c(4); + newcrc(3) := d(17) xor d(15) xor d(2) xor d(1) xor c(3) xor c(5); + newcrc(4) := d(18) xor d(16) xor d(3) xor d(2) xor c(4) xor c(6); + newcrc(5) := d(19) xor d(17) xor d(4) xor d(3) xor c(5) xor c(7); + newcrc(6) := d(20) xor d(18) xor d(5) xor d(4) xor c(6) xor c(8); + newcrc(7) := d(21) xor d(19) xor d(6) xor d(5) xor c(7) xor c(9); + newcrc(8) := d(22) xor d(20) xor d(7) xor d(6) xor c(8) xor c(10); + newcrc(9) := d(23) xor d(21) xor d(8) xor d(7) xor c(9) xor c(11); + newcrc(10) := d(24) xor d(22) xor d(9) xor d(8) xor c(10) xor c(12); + newcrc(11) := d(25) xor d(23) xor d(10) xor d(9) xor c(11) xor c(13); + newcrc(12) := d(26) xor d(24) xor d(11) xor d(10) xor c(12) xor c(14); + newcrc(13) := d(27) xor d(25) xor d(12) xor d(11) xor c(0) xor c(13) xor c(15); + newcrc(14) := d(26) xor d(13) xor d(12) xor c(0) xor c(1) xor c(14); + newcrc(15) := 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(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(13) xor c(14); + return newcrc; + end nextCRC16_D28; + +end PCK_CRC16_D28; diff --git a/libraries/external/easics/src/vhdl/PCK_CRC16_D32_usb.vhd b/libraries/external/easics/src/vhdl/PCK_CRC16_D32_usb.vhd new file mode 100644 index 0000000000..b6ab9fbb66 --- /dev/null +++ b/libraries/external/easics/src/vhdl/PCK_CRC16_D32_usb.vhd @@ -0,0 +1,70 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^16 + x^15 + x^2 + 1 +-- * data width: 32 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC16_D32 is + -- polynomial: x^16 + x^15 + x^2 + 1 + -- data width: 32 + -- convention: the first serial bit is D[31] + function nextCRC16_D32 + (Data: std_logic_vector(31 downto 0); + crc: std_logic_vector(15 downto 0)) + return std_logic_vector; +end PCK_CRC16_D32; + + +package body PCK_CRC16_D32 is + + -- polynomial: x^16 + x^15 + x^2 + 1 + -- data width: 32 + -- convention: the first serial bit is D[31] + function nextCRC16_D32 + (Data: std_logic_vector(31 downto 0); + crc: std_logic_vector(15 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(31 downto 0); + variable c: std_logic_vector(15 downto 0); + variable newcrc: std_logic_vector(15 downto 0); + + begin + d := Data; + c := crc; + + 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); + return newcrc; + end nextCRC16_D32; + +end PCK_CRC16_D32; diff --git a/libraries/external/easics/src/vhdl/PCK_CRC16_D32_x25.vhd b/libraries/external/easics/src/vhdl/PCK_CRC16_D32_x25.vhd new file mode 100644 index 0000000000..e961f7777c --- /dev/null +++ b/libraries/external/easics/src/vhdl/PCK_CRC16_D32_x25.vhd @@ -0,0 +1,70 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^16 + x^12 + x^5 + 1 +-- * data width: 32 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC16_D32 is + -- polynomial: x^16 + x^12 + x^5 + 1 + -- data width: 32 + -- convention: the first serial bit is D[31] + function nextCRC16_D32 + (Data: std_logic_vector(31 downto 0); + crc: std_logic_vector(15 downto 0)) + return std_logic_vector; +end PCK_CRC16_D32; + + +package body PCK_CRC16_D32 is + + -- polynomial: x^16 + x^12 + x^5 + 1 + -- data width: 32 + -- convention: the first serial bit is D[31] + function nextCRC16_D32 + (Data: std_logic_vector(31 downto 0); + crc: std_logic_vector(15 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(31 downto 0); + variable c: std_logic_vector(15 downto 0); + variable newcrc: std_logic_vector(15 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(28) xor d(27) xor d(26) xor d(22) xor d(20) xor d(19) xor d(12) xor d(11) xor d(8) xor d(4) xor d(0) xor c(3) xor c(4) xor c(6) xor c(10) xor c(11) xor c(12); + newcrc(1) := d(29) xor d(28) xor d(27) xor d(23) xor d(21) xor d(20) xor d(13) xor d(12) xor d(9) xor d(5) xor d(1) xor c(4) xor c(5) xor c(7) xor c(11) xor c(12) xor c(13); + newcrc(2) := d(30) xor d(29) xor d(28) xor d(24) xor d(22) xor d(21) xor d(14) xor d(13) xor d(10) xor d(6) xor d(2) xor c(5) xor c(6) xor c(8) xor c(12) xor c(13) xor c(14); + newcrc(3) := d(31) xor d(30) xor d(29) xor d(25) xor d(23) xor d(22) xor d(15) xor d(14) xor d(11) xor d(7) xor d(3) xor c(6) xor c(7) xor c(9) xor c(13) xor c(14) xor c(15); + newcrc(4) := d(31) xor d(30) xor d(26) xor d(24) xor d(23) xor d(16) xor d(15) xor d(12) xor d(8) xor d(4) xor c(0) xor c(7) xor c(8) xor c(10) xor c(14) xor c(15); + newcrc(5) := d(31) xor d(28) xor d(26) xor d(25) xor d(24) xor d(22) xor d(20) xor d(19) xor d(17) xor d(16) xor d(13) xor d(12) xor d(11) xor d(9) xor d(8) xor d(5) xor d(4) xor d(0) xor c(0) xor c(1) xor c(3) xor c(4) xor c(6) xor c(8) xor c(9) xor c(10) xor c(12) xor c(15); + newcrc(6) := d(29) xor d(27) xor d(26) xor d(25) xor d(23) xor d(21) xor d(20) xor d(18) xor d(17) xor d(14) xor d(13) xor d(12) xor d(10) xor d(9) xor d(6) xor d(5) xor d(1) xor c(1) xor c(2) xor c(4) xor c(5) xor c(7) xor c(9) xor c(10) xor c(11) xor c(13); + newcrc(7) := d(30) xor d(28) xor d(27) xor d(26) xor d(24) xor d(22) xor d(21) xor d(19) xor d(18) xor d(15) xor d(14) xor d(13) xor d(11) xor d(10) xor d(7) xor d(6) xor d(2) xor c(2) xor c(3) xor c(5) xor c(6) xor c(8) xor c(10) xor c(11) xor c(12) xor c(14); + newcrc(8) := d(31) xor d(29) xor d(28) xor d(27) xor d(25) xor d(23) xor d(22) xor d(20) xor d(19) xor d(16) xor d(15) xor d(14) xor d(12) xor d(11) xor d(8) xor d(7) xor d(3) xor c(0) xor c(3) xor c(4) xor c(6) xor c(7) xor c(9) xor c(11) xor c(12) xor c(13) xor c(15); + newcrc(9) := d(30) xor d(29) xor d(28) xor d(26) xor d(24) xor d(23) xor d(21) xor d(20) xor d(17) xor d(16) xor d(15) xor d(13) xor d(12) xor d(9) xor d(8) xor d(4) xor c(0) xor c(1) xor c(4) xor c(5) xor c(7) xor c(8) xor c(10) xor c(12) xor c(13) xor c(14); + newcrc(10) := d(31) xor d(30) xor d(29) xor d(27) xor d(25) xor d(24) xor d(22) xor d(21) xor d(18) xor d(17) xor d(16) xor d(14) xor d(13) xor d(10) xor d(9) xor d(5) xor c(0) xor c(1) xor c(2) xor c(5) xor c(6) xor c(8) xor c(9) xor c(11) xor c(13) xor c(14) xor c(15); + newcrc(11) := d(31) xor d(30) xor d(28) xor d(26) xor d(25) xor d(23) xor d(22) xor d(19) xor d(18) xor d(17) xor d(15) xor d(14) xor d(11) xor d(10) xor d(6) xor c(1) xor c(2) xor c(3) xor c(6) xor c(7) xor c(9) xor c(10) xor c(12) xor c(14) xor c(15); + newcrc(12) := d(31) xor d(29) xor d(28) xor d(24) xor d(23) xor d(22) xor d(18) xor d(16) xor d(15) xor d(8) xor d(7) xor d(4) xor d(0) xor c(0) xor c(2) xor c(6) xor c(7) xor c(8) xor c(12) xor c(13) xor c(15); + newcrc(13) := d(30) xor d(29) xor d(25) xor d(24) xor d(23) xor d(19) xor d(17) xor d(16) xor d(9) xor d(8) xor d(5) xor d(1) xor c(0) xor c(1) xor c(3) xor c(7) xor c(8) xor c(9) xor c(13) xor c(14); + newcrc(14) := d(31) xor d(30) xor d(26) xor d(25) xor d(24) xor d(20) xor d(18) xor d(17) xor d(10) xor d(9) xor d(6) xor d(2) xor c(1) xor c(2) xor c(4) xor c(8) xor c(9) xor c(10) xor c(14) xor c(15); + newcrc(15) := d(31) xor d(27) xor d(26) xor d(25) xor d(21) xor d(19) xor d(18) xor d(11) xor d(10) xor d(7) xor d(3) xor c(2) xor c(3) xor c(5) xor c(9) xor c(10) xor c(11) xor c(15); + return newcrc; + end nextCRC16_D32; + +end PCK_CRC16_D32; diff --git a/libraries/external/easics/src/vhdl/PCK_CRC28_D28.vhd b/libraries/external/easics/src/vhdl/PCK_CRC28_D28.vhd new file mode 100644 index 0000000000..fbb4af22cf --- /dev/null +++ b/libraries/external/easics/src/vhdl/PCK_CRC28_D28.vhd @@ -0,0 +1,82 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^28 + x^25 + 1 +-- * data width: 28 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC28_D28 is + -- polynomial: x^28 + x^25 + 1 + -- data width: 28 + -- convention: the first serial bit is D[27] + function nextCRC28_D28 + (Data: std_logic_vector(27 downto 0); + crc: std_logic_vector(27 downto 0)) + return std_logic_vector; +end PCK_CRC28_D28; + + +package body PCK_CRC28_D28 is + + -- polynomial: x^28 + x^25 + 1 + -- data width: 28 + -- convention: the first serial bit is D[27] + function nextCRC28_D28 + (Data: std_logic_vector(27 downto 0); + crc: std_logic_vector(27 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(27 downto 0); + variable c: std_logic_vector(27 downto 0); + variable newcrc: std_logic_vector(27 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(27) xor d(24) xor d(21) xor d(18) xor d(15) xor d(12) xor d(9) xor d(6) xor d(3) xor d(0) xor c(0) xor c(3) xor c(6) xor c(9) xor c(12) xor c(15) xor c(18) xor c(21) xor c(24) xor c(27); + newcrc(1) := d(25) xor d(22) xor d(19) xor d(16) xor d(13) xor d(10) xor d(7) xor d(4) xor d(1) xor c(1) xor c(4) xor c(7) xor c(10) xor c(13) xor c(16) xor c(19) xor c(22) xor c(25); + newcrc(2) := d(26) xor d(23) xor d(20) xor d(17) xor d(14) xor d(11) xor d(8) xor d(5) xor d(2) xor c(2) xor c(5) xor c(8) xor c(11) xor c(14) xor c(17) xor c(20) xor c(23) xor c(26); + newcrc(3) := d(27) xor d(24) xor d(21) xor d(18) xor d(15) xor d(12) xor d(9) xor d(6) xor d(3) xor c(3) xor c(6) xor c(9) xor c(12) xor c(15) xor c(18) xor c(21) xor c(24) xor c(27); + newcrc(4) := d(25) xor d(22) xor d(19) xor d(16) xor d(13) xor d(10) xor d(7) xor d(4) xor c(4) xor c(7) xor c(10) xor c(13) xor c(16) xor c(19) xor c(22) xor c(25); + newcrc(5) := d(26) xor d(23) xor d(20) xor d(17) xor d(14) xor d(11) xor d(8) xor d(5) xor c(5) xor c(8) xor c(11) xor c(14) xor c(17) xor c(20) xor c(23) xor c(26); + newcrc(6) := d(27) xor d(24) xor d(21) xor d(18) xor d(15) xor d(12) xor d(9) xor d(6) xor c(6) xor c(9) xor c(12) xor c(15) xor c(18) xor c(21) xor c(24) xor c(27); + newcrc(7) := d(25) xor d(22) xor d(19) xor d(16) xor d(13) xor d(10) xor d(7) xor c(7) xor c(10) xor c(13) xor c(16) xor c(19) xor c(22) xor c(25); + newcrc(8) := d(26) xor d(23) xor d(20) xor d(17) xor d(14) xor d(11) xor d(8) xor c(8) xor c(11) xor c(14) xor c(17) xor c(20) xor c(23) xor c(26); + newcrc(9) := d(27) xor d(24) xor d(21) xor d(18) xor d(15) xor d(12) xor d(9) xor c(9) xor c(12) xor c(15) xor c(18) xor c(21) xor c(24) xor c(27); + newcrc(10) := d(25) xor d(22) xor d(19) xor d(16) xor d(13) xor d(10) xor c(10) xor c(13) xor c(16) xor c(19) xor c(22) xor c(25); + newcrc(11) := d(26) xor d(23) xor d(20) xor d(17) xor d(14) xor d(11) xor c(11) xor c(14) xor c(17) xor c(20) xor c(23) xor c(26); + newcrc(12) := d(27) xor d(24) xor d(21) xor d(18) xor d(15) xor d(12) xor c(12) xor c(15) xor c(18) xor c(21) xor c(24) xor c(27); + newcrc(13) := d(25) xor d(22) xor d(19) xor d(16) xor d(13) xor c(13) xor c(16) xor c(19) xor c(22) xor c(25); + newcrc(14) := d(26) xor d(23) xor d(20) xor d(17) xor d(14) xor c(14) xor c(17) xor c(20) xor c(23) xor c(26); + newcrc(15) := d(27) xor d(24) xor d(21) xor d(18) xor d(15) xor c(15) xor c(18) xor c(21) xor c(24) xor c(27); + newcrc(16) := d(25) xor d(22) xor d(19) xor d(16) xor c(16) xor c(19) xor c(22) xor c(25); + newcrc(17) := d(26) xor d(23) xor d(20) xor d(17) xor c(17) xor c(20) xor c(23) xor c(26); + newcrc(18) := d(27) xor d(24) xor d(21) xor d(18) xor c(18) xor c(21) xor c(24) xor c(27); + newcrc(19) := d(25) xor d(22) xor d(19) xor c(19) xor c(22) xor c(25); + newcrc(20) := d(26) xor d(23) xor d(20) xor c(20) xor c(23) xor c(26); + newcrc(21) := d(27) xor d(24) xor d(21) xor c(21) xor c(24) xor c(27); + newcrc(22) := d(25) xor d(22) xor c(22) xor c(25); + newcrc(23) := d(26) xor d(23) xor c(23) xor c(26); + newcrc(24) := d(27) xor d(24) xor c(24) xor c(27); + newcrc(25) := d(27) xor d(25) xor d(24) xor d(21) xor d(18) xor d(15) xor d(12) xor d(9) xor d(6) xor d(3) xor d(0) xor c(0) xor c(3) xor c(6) xor c(9) xor c(12) xor c(15) xor c(18) xor c(21) xor c(24) xor c(25) xor c(27); + newcrc(26) := d(26) xor d(25) xor d(22) xor d(19) xor d(16) xor d(13) xor d(10) xor d(7) xor d(4) xor d(1) xor c(1) xor c(4) xor c(7) xor c(10) xor c(13) xor c(16) xor c(19) xor c(22) xor c(25) xor c(26); + newcrc(27) := d(27) xor d(26) xor d(23) xor d(20) xor d(17) xor d(14) xor d(11) xor d(8) xor d(5) xor d(2) xor c(2) xor c(5) xor c(8) xor c(11) xor c(14) xor c(17) xor c(20) xor c(23) xor c(26) xor c(27); + return newcrc; + end nextCRC28_D28; + +end PCK_CRC28_D28; diff --git a/libraries/external/easics/src/vhdl/PCK_CRC32_D32_eth.vhd b/libraries/external/easics/src/vhdl/PCK_CRC32_D32_eth.vhd new file mode 100644 index 0000000000..1b30aa6c4f --- /dev/null +++ b/libraries/external/easics/src/vhdl/PCK_CRC32_D32_eth.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 +-- * data width: 32 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D32 is + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 32 + -- convention: the first serial bit is D[31] + function nextCRC32_D32 + (Data: std_logic_vector(31 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D32; + + +package body PCK_CRC32_D32 is + + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 32 + -- convention: the first serial bit is D[31] + function nextCRC32_D32 + (Data: std_logic_vector(31 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(31 downto 0); + variable c: std_logic_vector(31 downto 0); + variable newcrc: std_logic_vector(31 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(31) xor d(30) xor d(29) xor d(28) xor d(26) xor d(25) xor d(24) xor d(16) xor d(12) xor d(10) xor d(9) xor d(6) xor d(0) xor c(0) xor c(6) xor c(9) xor c(10) xor c(12) xor c(16) xor c(24) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(1) := d(28) xor d(27) xor d(24) xor d(17) xor d(16) xor d(13) xor d(12) xor d(11) xor d(9) xor d(7) xor d(6) xor d(1) xor d(0) xor c(0) xor c(1) xor c(6) xor c(7) xor c(9) xor c(11) xor c(12) xor c(13) xor c(16) xor c(17) xor c(24) xor c(27) xor c(28); + newcrc(2) := d(31) xor d(30) xor d(26) xor d(24) xor d(18) xor d(17) xor d(16) xor d(14) xor d(13) xor d(9) xor d(8) xor d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(6) xor c(7) xor c(8) xor c(9) xor c(13) xor c(14) xor c(16) xor c(17) xor c(18) xor c(24) xor c(26) xor c(30) xor c(31); + newcrc(3) := d(31) xor d(27) xor d(25) xor d(19) xor d(18) xor d(17) xor d(15) xor d(14) xor d(10) xor d(9) xor d(8) xor d(7) xor d(3) xor d(2) xor d(1) xor c(1) xor c(2) xor c(3) xor c(7) xor c(8) xor c(9) xor c(10) xor c(14) xor c(15) xor c(17) xor c(18) xor c(19) xor c(25) xor c(27) xor c(31); + newcrc(4) := d(31) xor d(30) xor d(29) xor d(25) xor d(24) xor d(20) xor d(19) xor d(18) xor d(15) xor d(12) xor d(11) xor d(8) xor d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(0) xor c(2) xor c(3) xor c(4) xor c(6) xor c(8) xor c(11) xor c(12) xor c(15) xor c(18) xor c(19) xor c(20) xor c(24) xor c(25) xor c(29) xor c(30) xor c(31); + newcrc(5) := d(29) xor d(28) xor d(24) xor d(21) xor d(20) xor d(19) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(3) xor c(4) xor c(5) xor c(6) xor c(7) xor c(10) xor c(13) xor c(19) xor c(20) xor c(21) xor c(24) xor c(28) xor c(29); + newcrc(6) := d(30) xor d(29) xor d(25) xor d(22) xor d(21) xor d(20) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(1) xor c(2) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(11) xor c(14) xor c(20) xor c(21) xor c(22) xor c(25) xor c(29) xor c(30); + newcrc(7) := d(29) xor d(28) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(16) xor d(15) xor d(10) xor d(8) xor d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(2) xor c(3) xor c(5) xor c(7) xor c(8) xor c(10) xor c(15) xor c(16) xor c(21) xor c(22) xor c(23) xor c(24) xor c(25) xor c(28) xor c(29); + newcrc(8) := d(31) xor d(28) xor d(23) xor d(22) xor d(17) xor d(12) xor d(11) xor d(10) xor d(8) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(3) xor c(4) xor c(8) xor c(10) xor c(11) xor c(12) xor c(17) xor c(22) xor c(23) xor c(28) xor c(31); + newcrc(9) := d(29) xor d(24) xor d(23) xor d(18) xor d(13) xor d(12) xor d(11) xor d(9) xor d(5) xor d(4) xor d(2) xor d(1) xor c(1) xor c(2) xor c(4) xor c(5) xor c(9) xor c(11) xor c(12) xor c(13) xor c(18) xor c(23) xor c(24) xor c(29); + newcrc(10) := d(31) xor d(29) xor d(28) xor d(26) xor d(19) xor d(16) xor d(14) xor d(13) xor d(9) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(2) xor c(3) xor c(5) xor c(9) xor c(13) xor c(14) xor c(16) xor c(19) xor c(26) xor c(28) xor c(29) xor c(31); + newcrc(11) := d(31) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(20) xor d(17) xor d(16) xor d(15) xor d(14) xor d(12) xor d(9) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(3) xor c(4) xor c(9) xor c(12) xor c(14) xor c(15) xor c(16) xor c(17) xor c(20) xor c(24) xor c(25) xor c(26) xor c(27) xor c(28) xor c(31); + newcrc(12) := d(31) xor d(30) xor d(27) xor d(24) xor d(21) xor d(18) xor d(17) xor d(15) xor d(13) xor d(12) xor d(9) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(4) xor c(5) xor c(6) xor c(9) xor c(12) xor c(13) xor c(15) xor c(17) xor c(18) xor c(21) xor c(24) xor c(27) xor c(30) xor c(31); + newcrc(13) := d(31) xor d(28) xor d(25) xor d(22) xor d(19) xor d(18) xor d(16) xor d(14) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(1) xor c(2) xor c(3) xor c(5) xor c(6) xor c(7) xor c(10) xor c(13) xor c(14) xor c(16) xor c(18) xor c(19) xor c(22) xor c(25) xor c(28) xor c(31); + newcrc(14) := d(29) xor d(26) xor d(23) xor d(20) xor d(19) xor d(17) xor d(15) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(2) xor c(3) xor c(4) xor c(6) xor c(7) xor c(8) xor c(11) xor c(14) xor c(15) xor c(17) xor c(19) xor c(20) xor c(23) xor c(26) xor c(29); + newcrc(15) := d(30) xor d(27) xor d(24) xor d(21) xor d(20) xor d(18) xor d(16) xor d(15) xor d(12) xor d(9) xor d(8) xor d(7) xor d(5) xor d(4) xor d(3) xor c(3) xor c(4) xor c(5) xor c(7) xor c(8) xor c(9) xor c(12) xor c(15) xor c(16) xor c(18) xor c(20) xor c(21) xor c(24) xor c(27) xor c(30); + newcrc(16) := d(30) xor d(29) xor d(26) xor d(24) xor d(22) xor d(21) xor d(19) xor d(17) xor d(13) xor d(12) xor d(8) xor d(5) xor d(4) xor d(0) xor c(0) xor c(4) xor c(5) xor c(8) xor c(12) xor c(13) xor c(17) xor c(19) xor c(21) xor c(22) xor c(24) xor c(26) xor c(29) xor c(30); + newcrc(17) := d(31) xor d(30) xor d(27) xor d(25) xor d(23) xor d(22) xor d(20) xor d(18) xor d(14) xor d(13) xor d(9) xor d(6) xor d(5) xor d(1) xor c(1) xor c(5) xor c(6) xor c(9) xor c(13) xor c(14) xor c(18) xor c(20) xor c(22) xor c(23) xor c(25) xor c(27) xor c(30) xor c(31); + newcrc(18) := d(31) xor d(28) xor d(26) xor d(24) xor d(23) xor d(21) xor d(19) xor d(15) xor d(14) xor d(10) xor d(7) xor d(6) xor d(2) xor c(2) xor c(6) xor c(7) xor c(10) xor c(14) xor c(15) xor c(19) xor c(21) xor c(23) xor c(24) xor c(26) xor c(28) xor c(31); + newcrc(19) := d(29) xor d(27) xor d(25) xor d(24) xor d(22) xor d(20) xor d(16) xor d(15) xor d(11) xor d(8) xor d(7) xor d(3) xor c(3) xor c(7) xor c(8) xor c(11) xor c(15) xor c(16) xor c(20) xor c(22) xor c(24) xor c(25) xor c(27) xor c(29); + newcrc(20) := d(30) xor d(28) xor d(26) xor d(25) xor d(23) xor d(21) xor d(17) xor d(16) xor d(12) xor d(9) xor d(8) xor d(4) xor c(4) xor c(8) xor c(9) xor c(12) xor c(16) xor c(17) xor c(21) xor c(23) xor c(25) xor c(26) xor c(28) xor c(30); + newcrc(21) := d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(22) xor d(18) xor d(17) xor d(13) xor d(10) xor d(9) xor d(5) xor c(5) xor c(9) xor c(10) xor c(13) xor c(17) xor c(18) xor c(22) xor c(24) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(22) := d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(23) xor d(19) xor d(18) xor d(16) xor d(14) xor d(12) xor d(11) xor d(9) xor d(0) xor c(0) xor c(9) xor c(11) xor c(12) xor c(14) xor c(16) xor c(18) xor c(19) xor c(23) xor c(24) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(23) := d(31) xor d(29) xor d(27) xor d(26) xor d(20) xor d(19) xor d(17) xor d(16) xor d(15) xor d(13) xor d(9) xor d(6) xor d(1) xor d(0) xor c(0) xor c(1) xor c(6) xor c(9) xor c(13) xor c(15) xor c(16) xor c(17) xor c(19) xor c(20) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(24) := d(30) xor d(28) xor d(27) xor d(21) xor d(20) xor d(18) xor d(17) xor d(16) xor d(14) xor d(10) xor d(7) xor d(2) xor d(1) xor c(1) xor c(2) xor c(7) xor c(10) xor c(14) xor c(16) xor c(17) xor c(18) xor c(20) xor c(21) xor c(27) xor c(28) xor c(30); + newcrc(25) := d(31) xor d(29) xor d(28) xor d(22) xor d(21) xor d(19) xor d(18) xor d(17) xor d(15) xor d(11) xor d(8) xor d(3) xor d(2) xor c(2) xor c(3) xor c(8) xor c(11) xor c(15) xor c(17) xor c(18) xor c(19) xor c(21) xor c(22) xor c(28) xor c(29) xor c(31); + newcrc(26) := d(31) xor d(28) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(20) xor d(19) xor d(18) xor d(10) xor d(6) xor d(4) xor d(3) xor d(0) xor c(0) xor c(3) xor c(4) xor c(6) xor c(10) xor c(18) xor c(19) xor c(20) xor c(22) xor c(23) xor c(24) xor c(25) xor c(26) xor c(28) xor c(31); + newcrc(27) := d(29) xor d(27) xor d(26) xor d(25) xor d(24) xor d(23) xor d(21) xor d(20) xor d(19) xor d(11) xor d(7) xor d(5) xor d(4) xor d(1) xor c(1) xor c(4) xor c(5) xor c(7) xor c(11) xor c(19) xor c(20) xor c(21) xor c(23) xor c(24) xor c(25) xor c(26) xor c(27) xor c(29); + newcrc(28) := d(30) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(22) xor d(21) xor d(20) xor d(12) xor d(8) xor d(6) xor d(5) xor d(2) xor c(2) xor c(5) xor c(6) xor c(8) xor c(12) xor c(20) xor c(21) xor c(22) xor c(24) xor c(25) xor c(26) xor c(27) xor c(28) xor c(30); + newcrc(29) := d(31) xor d(29) xor d(28) xor d(27) xor d(26) xor d(25) xor d(23) xor d(22) xor d(21) xor d(13) xor d(9) xor d(7) xor d(6) xor d(3) xor c(3) xor c(6) xor c(7) xor c(9) xor c(13) xor c(21) xor c(22) xor c(23) xor c(25) xor c(26) xor c(27) xor c(28) xor c(29) xor c(31); + newcrc(30) := d(30) xor d(29) xor d(28) xor d(27) xor d(26) xor d(24) xor d(23) xor d(22) xor d(14) xor d(10) xor d(8) xor d(7) xor d(4) xor c(4) xor c(7) xor c(8) xor c(10) xor c(14) xor c(22) xor c(23) xor c(24) xor c(26) xor c(27) xor c(28) xor c(29) xor c(30); + newcrc(31) := d(31) xor d(30) xor d(29) xor d(28) xor d(27) xor d(25) xor d(24) xor d(23) xor d(15) xor d(11) xor d(9) xor d(8) xor d(5) xor c(5) xor c(8) xor c(9) xor c(11) xor c(15) xor c(23) xor c(24) xor c(25) xor c(27) xor c(28) xor c(29) xor c(30) xor c(31); + return newcrc; + end nextCRC32_D32; + +end PCK_CRC32_D32; diff --git a/libraries/external/easics/src/vhdl/PCK_CRC32_D64_eth.vhd b/libraries/external/easics/src/vhdl/PCK_CRC32_D64_eth.vhd new file mode 100644 index 0000000000..3e6c4735b1 --- /dev/null +++ b/libraries/external/easics/src/vhdl/PCK_CRC32_D64_eth.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 +-- * data width: 64 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D64 is + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 64 + -- convention: the first serial bit is D[63] + function nextCRC32_D64 + (Data: std_logic_vector(63 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D64; + + +package body PCK_CRC32_D64 is + + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 64 + -- convention: the first serial bit is D[63] + function nextCRC32_D64 + (Data: std_logic_vector(63 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(63 downto 0); + variable c: std_logic_vector(31 downto 0); + variable newcrc: std_logic_vector(31 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(63) xor d(61) xor d(60) xor d(58) xor d(55) xor d(54) xor d(53) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(37) xor d(34) xor d(32) xor d(31) xor d(30) xor d(29) xor d(28) xor d(26) xor d(25) xor d(24) xor d(16) xor d(12) xor d(10) xor d(9) xor d(6) xor d(0) xor c(0) xor c(2) xor c(5) xor c(12) xor c(13) xor c(15) xor c(16) xor c(18) xor c(21) xor c(22) xor c(23) xor c(26) xor c(28) xor c(29) xor c(31); + newcrc(1) := d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(53) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(44) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(28) xor d(27) xor d(24) xor d(17) xor d(16) xor d(13) xor d(12) xor d(11) xor d(9) xor d(7) xor d(6) xor d(1) xor d(0) xor c(1) xor c(2) xor c(3) xor c(5) xor c(6) xor c(12) xor c(14) xor c(15) xor c(17) xor c(18) xor c(19) xor c(21) xor c(24) xor c(26) xor c(27) xor c(28) xor c(30) xor c(31); + newcrc(2) := d(59) xor d(58) xor d(57) xor d(55) xor d(53) xor d(52) xor d(51) xor d(44) xor d(39) xor d(38) xor d(37) xor d(36) xor d(35) xor d(32) xor d(31) xor d(30) xor d(26) xor d(24) xor d(18) xor d(17) xor d(16) xor d(14) xor d(13) xor d(9) xor d(8) xor d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(0) xor c(3) xor c(4) xor c(5) xor c(6) xor c(7) xor c(12) xor c(19) xor c(20) xor c(21) xor c(23) xor c(25) xor c(26) xor c(27); + newcrc(3) := d(60) xor d(59) xor d(58) xor d(56) xor d(54) xor d(53) xor d(52) xor d(45) xor d(40) xor d(39) xor d(38) xor d(37) xor d(36) xor d(33) xor d(32) xor d(31) xor d(27) xor d(25) xor d(19) xor d(18) xor d(17) xor d(15) xor d(14) xor d(10) xor d(9) xor d(8) xor d(7) xor d(3) xor d(2) xor d(1) xor c(0) xor c(1) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(13) xor c(20) xor c(21) xor c(22) xor c(24) xor c(26) xor c(27) xor c(28); + newcrc(4) := d(63) xor d(59) xor d(58) xor d(57) xor d(50) xor d(48) xor d(47) xor d(46) xor d(45) xor d(44) xor d(41) xor d(40) xor d(39) xor d(38) xor d(33) xor d(31) xor d(30) xor d(29) xor d(25) xor d(24) xor d(20) xor d(19) xor d(18) xor d(15) xor d(12) xor d(11) xor d(8) xor d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(1) xor c(6) xor c(7) xor c(8) xor c(9) xor c(12) xor c(13) xor c(14) xor c(15) xor c(16) xor c(18) xor c(25) xor c(26) xor c(27) xor c(31); + newcrc(5) := d(63) xor d(61) xor d(59) xor d(55) xor d(54) xor d(53) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(42) xor d(41) xor d(40) xor d(39) xor d(37) xor d(29) xor d(28) xor d(24) xor d(21) xor d(20) xor d(19) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(5) xor c(7) xor c(8) xor c(9) xor c(10) xor c(12) xor c(14) xor c(17) xor c(18) xor c(19) xor c(21) xor c(22) xor c(23) xor c(27) xor c(29) xor c(31); + newcrc(6) := d(62) xor d(60) xor d(56) xor d(55) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(43) xor d(42) xor d(41) xor d(40) xor d(38) xor d(30) xor d(29) xor d(25) xor d(22) xor d(21) xor d(20) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(6) xor c(8) xor c(9) xor c(10) xor c(11) xor c(13) xor c(15) xor c(18) xor c(19) xor c(20) xor c(22) xor c(23) xor c(24) xor c(28) xor c(30); + newcrc(7) := d(60) xor d(58) xor d(57) xor d(56) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(46) xor d(45) xor d(43) xor d(42) xor d(41) xor d(39) xor d(37) xor d(34) xor d(32) xor d(29) xor d(28) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(16) xor d(15) xor d(10) xor d(8) xor d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(2) xor c(5) xor c(7) xor c(9) xor c(10) xor c(11) xor c(13) xor c(14) xor c(15) xor c(18) xor c(19) xor c(20) xor c(22) xor c(24) xor c(25) xor c(26) xor c(28); + newcrc(8) := d(63) xor d(60) xor d(59) xor d(57) xor d(54) xor d(52) xor d(51) xor d(50) xor d(46) xor d(45) xor d(43) xor d(42) xor d(40) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(32) xor d(31) xor d(28) xor d(23) xor d(22) xor d(17) xor d(12) xor d(11) xor d(10) xor d(8) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(3) xor c(5) xor c(6) xor c(8) xor c(10) xor c(11) xor c(13) xor c(14) xor c(18) xor c(19) xor c(20) xor c(22) xor c(25) xor c(27) xor c(28) xor c(31); + newcrc(9) := d(61) xor d(60) xor d(58) xor d(55) xor d(53) xor d(52) xor d(51) xor d(47) xor d(46) xor d(44) xor d(43) xor d(41) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(33) xor d(32) xor d(29) xor d(24) xor d(23) xor d(18) xor d(13) xor d(12) xor d(11) xor d(9) xor d(5) xor d(4) xor d(2) xor d(1) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(6) xor c(7) xor c(9) xor c(11) xor c(12) xor c(14) xor c(15) xor c(19) xor c(20) xor c(21) xor c(23) xor c(26) xor c(28) xor c(29); + newcrc(10) := d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(55) xor d(52) xor d(50) xor d(42) xor d(40) xor d(39) xor d(36) xor d(35) xor d(33) xor d(32) xor d(31) xor d(29) xor d(28) xor d(26) xor d(19) xor d(16) xor d(14) xor d(13) xor d(9) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(1) xor c(3) xor c(4) xor c(7) xor c(8) xor c(10) xor c(18) xor c(20) xor c(23) xor c(24) xor c(26) xor c(27) xor c(28) xor c(30) xor c(31); + newcrc(11) := d(59) xor d(58) xor d(57) xor d(56) xor d(55) xor d(54) xor d(51) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(40) xor d(36) xor d(33) xor d(31) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(20) xor d(17) xor d(16) xor d(15) xor d(14) xor d(12) xor d(9) xor d(4) xor d(3) xor d(1) xor d(0) xor c(1) xor c(4) xor c(8) xor c(9) xor c(11) xor c(12) xor c(13) xor c(15) xor c(16) xor c(18) xor c(19) xor c(22) xor c(23) xor c(24) xor c(25) xor c(26) xor c(27); + newcrc(12) := d(63) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(41) xor d(31) xor d(30) xor d(27) xor d(24) xor d(21) xor d(18) xor d(17) xor d(15) xor d(13) xor d(12) xor d(9) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(9) xor c(10) xor c(14) xor c(15) xor c(17) xor c(18) xor c(19) xor c(20) xor c(21) xor c(22) xor c(24) xor c(25) xor c(27) xor c(29) xor c(31); + newcrc(13) := d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(42) xor d(32) xor d(31) xor d(28) xor d(25) xor d(22) xor d(19) xor d(18) xor d(16) xor d(14) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(0) xor c(10) xor c(11) xor c(15) xor c(16) xor c(18) xor c(19) xor c(20) xor c(21) xor c(22) xor c(23) xor c(25) xor c(26) xor c(28) xor c(30); + newcrc(14) := d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(43) xor d(33) xor d(32) xor d(29) xor d(26) xor d(23) xor d(20) xor d(19) xor d(17) xor d(15) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(0) xor c(1) xor c(11) xor c(12) xor c(16) xor c(17) xor c(19) xor c(20) xor c(21) xor c(22) xor c(23) xor c(24) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(15) := d(62) xor d(60) xor d(59) xor d(57) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(50) xor d(49) xor d(45) xor d(44) xor d(34) xor d(33) xor d(30) xor d(27) xor d(24) xor d(21) xor d(20) xor d(18) xor d(16) xor d(15) xor d(12) xor d(9) xor d(8) xor d(7) xor d(5) xor d(4) xor d(3) xor c(1) xor c(2) xor c(12) xor c(13) xor c(17) xor c(18) xor c(20) xor c(21) xor c(22) xor c(23) xor c(24) xor c(25) xor c(27) xor c(28) xor c(30); + newcrc(16) := d(57) xor d(56) xor d(51) xor d(48) xor d(47) xor d(46) xor d(44) xor d(37) xor d(35) xor d(32) xor d(30) xor d(29) xor d(26) xor d(24) xor d(22) xor d(21) xor d(19) xor d(17) xor d(13) xor d(12) xor d(8) xor d(5) xor d(4) xor d(0) xor c(0) xor c(3) xor c(5) xor c(12) xor c(14) xor c(15) xor c(16) xor c(19) xor c(24) xor c(25); + newcrc(17) := d(58) xor d(57) xor d(52) xor d(49) xor d(48) xor d(47) xor d(45) xor d(38) xor d(36) xor d(33) xor d(31) xor d(30) xor d(27) xor d(25) xor d(23) xor d(22) xor d(20) xor d(18) xor d(14) xor d(13) xor d(9) xor d(6) xor d(5) xor d(1) xor c(1) xor c(4) xor c(6) xor c(13) xor c(15) xor c(16) xor c(17) xor c(20) xor c(25) xor c(26); + newcrc(18) := d(59) xor d(58) xor d(53) xor d(50) xor d(49) xor d(48) xor d(46) xor d(39) xor d(37) xor d(34) xor d(32) xor d(31) xor d(28) xor d(26) xor d(24) xor d(23) xor d(21) xor d(19) xor d(15) xor d(14) xor d(10) xor d(7) xor d(6) xor d(2) xor c(0) xor c(2) xor c(5) xor c(7) xor c(14) xor c(16) xor c(17) xor c(18) xor c(21) xor c(26) xor c(27); + newcrc(19) := d(60) xor d(59) xor d(54) xor d(51) xor d(50) xor d(49) xor d(47) xor d(40) xor d(38) xor d(35) xor d(33) xor d(32) xor d(29) xor d(27) xor d(25) xor d(24) xor d(22) xor d(20) xor d(16) xor d(15) xor d(11) xor d(8) xor d(7) xor d(3) xor c(0) xor c(1) xor c(3) xor c(6) xor c(8) xor c(15) xor c(17) xor c(18) xor c(19) xor c(22) xor c(27) xor c(28); + newcrc(20) := d(61) xor d(60) xor d(55) xor d(52) xor d(51) xor d(50) xor d(48) xor d(41) xor d(39) xor d(36) xor d(34) xor d(33) xor d(30) xor d(28) xor d(26) xor d(25) xor d(23) xor d(21) xor d(17) xor d(16) xor d(12) xor d(9) xor d(8) xor d(4) xor c(1) xor c(2) xor c(4) xor c(7) xor c(9) xor c(16) xor c(18) xor c(19) xor c(20) xor c(23) xor c(28) xor c(29); + newcrc(21) := d(62) xor d(61) xor d(56) xor d(53) xor d(52) xor d(51) xor d(49) xor d(42) xor d(40) xor d(37) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(22) xor d(18) xor d(17) xor d(13) xor d(10) xor d(9) xor d(5) xor c(2) xor c(3) xor c(5) xor c(8) xor c(10) xor c(17) xor c(19) xor c(20) xor c(21) xor c(24) xor c(29) xor c(30); + newcrc(22) := d(62) xor d(61) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(38) xor d(37) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(23) xor d(19) xor d(18) xor d(16) xor d(14) xor d(12) xor d(11) xor d(9) xor d(0) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(9) xor c(11) xor c(12) xor c(13) xor c(15) xor c(16) xor c(20) xor c(23) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30); + newcrc(23) := d(62) xor d(60) xor d(59) xor d(56) xor d(55) xor d(54) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(20) xor d(19) xor d(17) xor d(16) xor d(15) xor d(13) xor d(9) xor d(6) xor d(1) xor d(0) xor c(2) xor c(3) xor c(4) xor c(6) xor c(7) xor c(10) xor c(14) xor c(15) xor c(17) xor c(18) xor c(22) xor c(23) xor c(24) xor c(27) xor c(28) xor c(30); + newcrc(24) := d(63) xor d(61) xor d(60) xor d(57) xor d(56) xor d(55) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(40) xor d(39) xor d(37) xor d(36) xor d(35) xor d(32) xor d(30) xor d(28) xor d(27) xor d(21) xor d(20) xor d(18) xor d(17) xor d(16) xor d(14) xor d(10) xor d(7) xor d(2) xor d(1) xor c(0) xor c(3) xor c(4) xor c(5) xor c(7) xor c(8) xor c(11) xor c(15) xor c(16) xor c(18) xor c(19) xor c(23) xor c(24) xor c(25) xor c(28) xor c(29) xor c(31); + newcrc(25) := d(62) xor d(61) xor d(58) xor d(57) xor d(56) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(41) xor d(40) xor d(38) xor d(37) xor d(36) xor d(33) xor d(31) xor d(29) xor d(28) xor d(22) xor d(21) xor d(19) xor d(18) xor d(17) xor d(15) xor d(11) xor d(8) xor d(3) xor d(2) xor c(1) xor c(4) xor c(5) xor c(6) xor c(8) xor c(9) xor c(12) xor c(16) xor c(17) xor c(19) xor c(20) xor c(24) xor c(25) xor c(26) xor c(29) xor c(30); + newcrc(26) := d(62) xor d(61) xor d(60) xor d(59) xor d(57) xor d(55) xor d(54) xor d(52) xor d(49) xor d(48) xor d(47) xor d(44) xor d(42) xor d(41) xor d(39) xor d(38) xor d(31) xor d(28) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(20) xor d(19) xor d(18) xor d(10) xor d(6) xor d(4) xor d(3) xor d(0) xor c(6) xor c(7) xor c(9) xor c(10) xor c(12) xor c(15) xor c(16) xor c(17) xor c(20) xor c(22) xor c(23) xor c(25) xor c(27) xor c(28) xor c(29) xor c(30); + newcrc(27) := d(63) xor d(62) xor d(61) xor d(60) xor d(58) xor d(56) xor d(55) xor d(53) xor d(50) xor d(49) xor d(48) xor d(45) xor d(43) xor d(42) xor d(40) xor d(39) xor d(32) xor d(29) xor d(27) xor d(26) xor d(25) xor d(24) xor d(23) xor d(21) xor d(20) xor d(19) xor d(11) xor d(7) xor d(5) xor d(4) xor d(1) xor c(0) xor c(7) xor c(8) xor c(10) xor c(11) xor c(13) xor c(16) xor c(17) xor c(18) xor c(21) xor c(23) xor c(24) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(28) := d(63) xor d(62) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(43) xor d(41) xor d(40) xor d(33) xor d(30) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(22) xor d(21) xor d(20) xor d(12) xor d(8) xor d(6) xor d(5) xor d(2) xor c(1) xor c(8) xor c(9) xor c(11) xor c(12) xor c(14) xor c(17) xor c(18) xor c(19) xor c(22) xor c(24) xor c(25) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(29) := d(63) xor d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(44) xor d(42) xor d(41) xor d(34) xor d(31) xor d(29) xor d(28) xor d(27) xor d(26) xor d(25) xor d(23) xor d(22) xor d(21) xor d(13) xor d(9) xor d(7) xor d(6) xor d(3) xor c(2) xor c(9) xor c(10) xor c(12) xor c(13) xor c(15) xor c(18) xor c(19) xor c(20) xor c(23) xor c(25) xor c(26) xor c(28) xor c(30) xor c(31); + newcrc(30) := d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(53) xor d(52) xor d(51) xor d(48) xor d(46) xor d(45) xor d(43) xor d(42) xor d(35) xor d(32) xor d(30) xor d(29) xor d(28) xor d(27) xor d(26) xor d(24) xor d(23) xor d(22) xor d(14) xor d(10) xor d(8) xor d(7) xor d(4) xor c(0) xor c(3) xor c(10) xor c(11) xor c(13) xor c(14) xor c(16) xor c(19) xor c(20) xor c(21) xor c(24) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(31) := d(62) xor d(60) xor d(59) xor d(57) xor d(54) xor d(53) xor d(52) xor d(49) xor d(47) xor d(46) xor d(44) xor d(43) xor d(36) xor d(33) xor d(31) xor d(30) xor d(29) xor d(28) xor d(27) xor d(25) xor d(24) xor d(23) xor d(15) xor d(11) xor d(9) xor d(8) xor d(5) xor c(1) xor c(4) xor c(11) xor c(12) xor c(14) xor c(15) xor c(17) xor c(20) xor c(21) xor c(22) xor c(25) xor c(27) xor c(28) xor c(30); + return newcrc; + end nextCRC32_D64; + +end PCK_CRC32_D64; -- GitLab