AMC13
Firmwares for the different applications of the AMC13 uTCA board made at Boston University
 All Classes Variables
crc_SLINKx.vhd
1 library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
3 use IEEE.STD_LOGIC_ARITH.ALL;
4 use IEEE.STD_LOGIC_UNSIGNED.ALL;
5 
6 
7 
8 entity CRC_SLINKx is
9  Port (
10  D : in std_logic_vector(63 downto 0);
11  CRC_out : out std_logic_vector(15 downto 0);
12  clk : in std_logic;
13  clear : in std_logic;
14  enable : in std_logic);
15 end CRC_SLINKx;
16 
17 architecture Behavioral of CRC_SLINKx is
18  signal C : STD_LOGIC_VECTOR (15 downto 0);
19 
20 begin
21 
22 process (clk)
23  variable NewCRC: STD_LOGIC_VECTOR (15 downto 0);
24 begin
25 
26 if rising_edge(clk) then
27  if clear = '1' then
28  C <= (Others => '1');
29  elsif enable = '1' then
30 
31  NewCRC(0) := D(63) xor D(62) xor D(61) xor D(60) xor D(55) xor D(54) xor
32  D(53) xor D(52) xor D(51) xor D(50) xor D(49) xor D(48) xor
33  D(47) xor D(46) xor D(45) xor D(43) xor D(41) xor D(40) xor
34  D(39) xor D(38) xor D(37) xor D(36) xor D(35) xor D(34) xor
35  D(33) xor D(32) xor D(31) xor D(30) xor D(27) xor D(26) xor
36  D(25) xor D(24) xor D(23) xor D(22) xor D(21) xor D(20) xor
37  D(19) xor D(18) xor D(17) xor D(16) xor D(15) xor D(13) xor
38  D(12) xor D(11) xor D(10) xor D(9) xor D(8) xor D(7) xor
39  D(6) xor D(5) xor D(4) xor D(3) xor D(2) xor D(1) xor
40  D(0) xor C(0) xor C(1) xor C(2) xor C(3) xor C(4) xor
41  C(5) xor C(6) xor C(7) xor C(12) xor C(13) xor C(14) xor
42  C(15);
43  NewCRC(1) := D(63) xor D(62) xor D(61) xor D(56) xor D(55) xor D(54) xor
44  D(53) xor D(52) xor D(51) xor D(50) xor D(49) xor D(48) xor
45  D(47) xor D(46) xor D(44) xor D(42) xor D(41) xor D(40) xor
46  D(39) xor D(38) xor D(37) xor D(36) xor D(35) xor D(34) xor
47  D(33) xor D(32) xor D(31) xor D(28) xor D(27) xor D(26) xor
48  D(25) xor D(24) xor D(23) xor D(22) xor D(21) xor D(20) xor
49  D(19) xor D(18) xor D(17) xor D(16) xor D(14) xor D(13) xor
50  D(12) xor D(11) xor D(10) xor D(9) xor D(8) xor D(7) xor
51  D(6) xor D(5) xor D(4) xor D(3) xor D(2) xor D(1) xor
52  C(0) xor C(1) xor C(2) xor C(3) xor C(4) xor C(5) xor
53  C(6) xor C(7) xor C(8) xor C(13) xor C(14) xor C(15);
54  NewCRC(2) := D(61) xor D(60) xor D(57) xor D(56) xor D(46) xor D(42) xor
55  D(31) xor D(30) xor D(29) xor D(28) xor D(16) xor D(14) xor
56  D(1) xor D(0) xor C(8) xor C(9) xor C(12) xor C(13);
57  NewCRC(3) := D(62) xor D(61) xor D(58) xor D(57) xor D(47) xor D(43) xor
58  D(32) xor D(31) xor D(30) xor D(29) xor D(17) xor D(15) xor
59  D(2) xor D(1) xor C(9) xor C(10) xor C(13) xor C(14);
60  NewCRC(4) := D(63) xor D(62) xor D(59) xor D(58) xor D(48) xor D(44) xor
61  D(33) xor D(32) xor D(31) xor D(30) xor D(18) xor D(16) xor
62  D(3) xor D(2) xor C(0) xor C(10) xor C(11) xor C(14) xor
63  C(15);
64  NewCRC(5) := D(63) xor D(60) xor D(59) xor D(49) xor D(45) xor D(34) xor
65  D(33) xor D(32) xor D(31) xor D(19) xor D(17) xor D(4) xor
66  D(3) xor C(1) xor C(11) xor C(12) xor C(15);
67  NewCRC(6) := D(61) xor D(60) xor D(50) xor D(46) xor D(35) xor D(34) xor
68  D(33) xor D(32) xor D(20) xor D(18) xor D(5) xor D(4) xor
69  C(2) xor C(12) xor C(13);
70  NewCRC(7) := D(62) xor D(61) xor D(51) xor D(47) xor D(36) xor D(35) xor
71  D(34) xor D(33) xor D(21) xor D(19) xor D(6) xor D(5) xor
72  C(3) xor C(13) xor C(14);
73  NewCRC(8) := D(63) xor D(62) xor D(52) xor D(48) xor D(37) xor D(36) xor
74  D(35) xor D(34) xor D(22) xor D(20) xor D(7) xor D(6) xor
75  C(0) xor C(4) xor C(14) xor C(15);
76  NewCRC(9) := D(63) xor D(53) xor D(49) xor D(38) xor D(37) xor D(36) xor
77  D(35) xor D(23) xor D(21) xor D(8) xor D(7) xor C(1) xor
78  C(5) xor C(15);
79  NewCRC(10) := D(54) xor D(50) xor D(39) xor D(38) xor D(37) xor D(36) xor
80  D(24) xor D(22) xor D(9) xor D(8) xor C(2) xor C(6);
81  NewCRC(11) := D(55) xor D(51) xor D(40) xor D(39) xor D(38) xor D(37) xor
82  D(25) xor D(23) xor D(10) xor D(9) xor C(3) xor C(7);
83  NewCRC(12) := D(56) xor D(52) xor D(41) xor D(40) xor D(39) xor D(38) xor
84  D(26) xor D(24) xor D(11) xor D(10) xor C(4) xor C(8);
85  NewCRC(13) := D(57) xor D(53) xor D(42) xor D(41) xor D(40) xor D(39) xor
86  D(27) xor D(25) xor D(12) xor D(11) xor C(5) xor C(9);
87  NewCRC(14) := D(58) xor D(54) xor D(43) xor D(42) xor D(41) xor D(40) xor
88  D(28) xor D(26) xor D(13) xor D(12) xor C(6) xor C(10);
89  NewCRC(15) := D(63) xor D(62) xor D(61) xor D(60) xor D(59) xor D(54) xor
90  D(53) xor D(52) xor D(51) xor D(50) xor D(49) xor D(48) xor
91  D(47) xor D(46) xor D(45) xor D(44) xor D(42) xor D(40) xor
92  D(39) xor D(38) xor D(37) xor D(36) xor D(35) xor D(34) xor
93  D(33) xor D(32) xor D(31) xor D(30) xor D(29) xor D(26) xor
94  D(25) xor D(24) xor D(23) xor D(22) xor D(21) xor D(20) xor
95  D(19) xor D(18) xor D(17) xor D(16) xor D(15) xor D(14) xor
96  D(12) xor D(11) xor D(10) xor D(9) xor D(8) xor D(7) xor
97  D(6) xor D(5) xor D(4) xor D(3) xor D(2) xor D(1) xor
98  D(0) xor C(0) xor C(1) xor C(2) xor C(3) xor C(4) xor
99  C(5) xor C(6) xor C(11) xor C(12) xor C(13) xor C(14) xor
100  C(15);
101 
102 
103  C <= NewCRC;
104  end if;
105 end if;
106 
107 end process;
108 
109 CRC_out <= C;
110 
111 
112 end Behavioral;