1 |
15 |
wzab |
library ieee;
|
2 |
|
|
use ieee.std_logic_1164.all;
|
3 |
|
|
package pkg_newcrc32_d16 is
|
4 |
|
|
-- CRC update for 32-bit CRC and 16-bit data (LSB first)
|
5 |
|
|
-- The CRC polynomial exponents: [0, 1, 2, 4, 5, 7, 8, 10, 11, 12, 16, 22, 23, 26, 32]
|
6 |
|
|
function newcrc32_d16(
|
7 |
18 |
wzab |
din : std_logic_vector(15 downto 0);
|
8 |
|
|
crc : std_logic_vector(31 downto 0))
|
9 |
|
|
return std_logic_vector;
|
10 |
15 |
wzab |
end pkg_newcrc32_d16;
|
11 |
|
|
|
12 |
|
|
package body pkg_newcrc32_d16 is
|
13 |
|
|
function newcrc32_d16(
|
14 |
18 |
wzab |
din : std_logic_vector(15 downto 0);
|
15 |
|
|
crc : std_logic_vector(31 downto 0))
|
16 |
|
|
return std_logic_vector is
|
17 |
|
|
variable c, n : std_logic_vector(31 downto 0);
|
18 |
|
|
variable d : std_logic_vector(15 downto 0);
|
19 |
15 |
wzab |
begin
|
20 |
18 |
wzab |
c := crc;
|
21 |
|
|
d := din;
|
22 |
|
|
n(0) := c(16) xor c(22) xor c(25) xor c(26) xor c(28) xor d(3) xor d(5) xor d(6) xor d(9) xor d(15);
|
23 |
|
|
n(1) := c(16) xor c(17) xor c(22) xor c(23) xor c(25) xor c(27) xor c(28) xor c(29) xor d(2) xor d(3) xor d(4) xor d(6) xor d(8) xor d(9) xor d(14) xor d(15);
|
24 |
|
|
n(2) := c(16) xor c(17) xor c(18) xor c(22) xor c(23) xor c(24) xor c(25) xor c(29) xor c(30) xor d(1) xor d(2) xor d(6) xor d(7) xor d(8) xor d(9) xor d(13) xor d(14) xor d(15);
|
25 |
|
|
n(3) := c(17) xor c(18) xor c(19) xor c(23) xor c(24) xor c(25) xor c(26) xor c(30) xor c(31) xor d(0) xor d(1) xor d(5) xor d(6) xor d(7) xor d(8) xor d(12) xor d(13) xor d(14);
|
26 |
|
|
n(4) := c(16) xor c(18) xor c(19) xor c(20) xor c(22) xor c(24) xor c(27) xor c(28) xor c(31) xor d(0) xor d(3) xor d(4) xor d(7) xor d(9) xor d(11) xor d(12) xor d(13) xor d(15);
|
27 |
|
|
n(5) := c(16) xor c(17) xor c(19) xor c(20) xor c(21) xor c(22) xor c(23) xor c(26) xor c(29) xor d(2) xor d(5) xor d(8) xor d(9) xor d(10) xor d(11) xor d(12) xor d(14) xor d(15);
|
28 |
|
|
n(6) := c(17) xor c(18) xor c(20) xor c(21) xor c(22) xor c(23) xor c(24) xor c(27) xor c(30) xor d(1) xor d(4) xor d(7) xor d(8) xor d(9) xor d(10) xor d(11) xor d(13) xor d(14);
|
29 |
|
|
n(7) := c(16) xor c(18) xor c(19) xor c(21) xor c(23) xor c(24) xor c(26) xor c(31) xor d(0) xor d(5) xor d(7) xor d(8) xor d(10) xor d(12) xor d(13) xor d(15);
|
30 |
|
|
n(8) := c(16) xor c(17) xor c(19) xor c(20) xor c(24) xor c(26) xor c(27) xor c(28) xor d(3) xor d(4) xor d(5) xor d(7) xor d(11) xor d(12) xor d(14) xor d(15);
|
31 |
|
|
n(9) := c(17) xor c(18) xor c(20) xor c(21) xor c(25) xor c(27) xor c(28) xor c(29) xor d(2) xor d(3) xor d(4) xor d(6) xor d(10) xor d(11) xor d(13) xor d(14);
|
32 |
|
|
n(10) := c(16) xor c(18) xor c(19) xor c(21) xor c(25) xor c(29) xor c(30) xor d(1) xor d(2) xor d(6) xor d(10) xor d(12) xor d(13) xor d(15);
|
33 |
|
|
n(11) := c(16) xor c(17) xor c(19) xor c(20) xor c(25) xor c(28) xor c(30) xor c(31) xor d(0) xor d(1) xor d(3) xor d(6) xor d(11) xor d(12) xor d(14) xor d(15);
|
34 |
|
|
n(12) := c(16) xor c(17) xor c(18) xor c(20) xor c(21) xor c(22) xor c(25) xor c(28) xor c(29) xor c(31) xor d(0) xor d(2) xor d(3) xor d(6) xor d(9) xor d(10) xor d(11) xor d(13) xor d(14) xor d(15);
|
35 |
|
|
n(13) := c(17) xor c(18) xor c(19) xor c(21) xor c(22) xor c(23) xor c(26) xor c(29) xor c(30) xor d(1) xor d(2) xor d(5) xor d(8) xor d(9) xor d(10) xor d(12) xor d(13) xor d(14);
|
36 |
|
|
n(14) := c(18) xor c(19) xor c(20) xor c(22) xor c(23) xor c(24) xor c(27) xor c(30) xor c(31) xor d(0) xor d(1) xor d(4) xor d(7) xor d(8) xor d(9) xor d(11) xor d(12) xor d(13);
|
37 |
|
|
n(15) := c(19) xor c(20) xor c(21) xor c(23) xor c(24) xor c(25) xor c(28) xor c(31) xor d(0) xor d(3) xor d(6) xor d(7) xor d(8) xor d(10) xor d(11) xor d(12);
|
38 |
|
|
n(16) := c(0) xor c(16) xor c(20) xor c(21) xor c(24) xor c(28) xor c(29) xor d(2) xor d(3) xor d(7) xor d(10) xor d(11) xor d(15);
|
39 |
|
|
n(17) := c(1) xor c(17) xor c(21) xor c(22) xor c(25) xor c(29) xor c(30) xor d(1) xor d(2) xor d(6) xor d(9) xor d(10) xor d(14);
|
40 |
|
|
n(18) := c(2) xor c(18) xor c(22) xor c(23) xor c(26) xor c(30) xor c(31) xor d(0) xor d(1) xor d(5) xor d(8) xor d(9) xor d(13);
|
41 |
|
|
n(19) := c(3) xor c(19) xor c(23) xor c(24) xor c(27) xor c(31) xor d(0) xor d(4) xor d(7) xor d(8) xor d(12);
|
42 |
|
|
n(20) := c(4) xor c(20) xor c(24) xor c(25) xor c(28) xor d(3) xor d(6) xor d(7) xor d(11);
|
43 |
|
|
n(21) := c(5) xor c(21) xor c(25) xor c(26) xor c(29) xor d(2) xor d(5) xor d(6) xor d(10);
|
44 |
|
|
n(22) := c(6) xor c(16) xor c(25) xor c(27) xor c(28) xor c(30) xor d(1) xor d(3) xor d(4) xor d(6) xor d(15);
|
45 |
|
|
n(23) := c(7) xor c(16) xor c(17) xor c(22) xor c(25) xor c(29) xor c(31) xor d(0) xor d(2) xor d(6) xor d(9) xor d(14) xor d(15);
|
46 |
|
|
n(24) := c(8) xor c(17) xor c(18) xor c(23) xor c(26) xor c(30) xor d(1) xor d(5) xor d(8) xor d(13) xor d(14);
|
47 |
|
|
n(25) := c(9) xor c(18) xor c(19) xor c(24) xor c(27) xor c(31) xor d(0) xor d(4) xor d(7) xor d(12) xor d(13);
|
48 |
|
|
n(26) := c(10) xor c(16) xor c(19) xor c(20) xor c(22) xor c(26) xor d(5) xor d(9) xor d(11) xor d(12) xor d(15);
|
49 |
|
|
n(27) := c(11) xor c(17) xor c(20) xor c(21) xor c(23) xor c(27) xor d(4) xor d(8) xor d(10) xor d(11) xor d(14);
|
50 |
|
|
n(28) := c(12) xor c(18) xor c(21) xor c(22) xor c(24) xor c(28) xor d(3) xor d(7) xor d(9) xor d(10) xor d(13);
|
51 |
|
|
n(29) := c(13) xor c(19) xor c(22) xor c(23) xor c(25) xor c(29) xor d(2) xor d(6) xor d(8) xor d(9) xor d(12);
|
52 |
|
|
n(30) := c(14) xor c(20) xor c(23) xor c(24) xor c(26) xor c(30) xor d(1) xor d(5) xor d(7) xor d(8) xor d(11);
|
53 |
|
|
n(31) := c(15) xor c(21) xor c(24) xor c(25) xor c(27) xor c(31) xor d(0) xor d(4) xor d(6) xor d(7) xor d(10);
|
54 |
15 |
wzab |
return n;
|
55 |
|
|
end newcrc32_d16;
|
56 |
|
|
end pkg_newcrc32_d16;
|
57 |
|
|
|