AMC13
Firmwares for the different applications of the AMC13 uTCA board made at Boston University
 All Classes Variables
crc16D16.vhd
1 --
2 -- Purpose: VHDL package containing a synthesizable CRC function
3 -- * polynomial: (0 2 15 16)
4 -- * data width: 16
5 --
6 library IEEE;
7 use IEEE.STD_LOGIC_1164.ALL;
8 entity crc16D16 is
9  Port ( clk : in std_logic;
10  init_crc : in std_logic;
11  we_crc : in std_logic;
12  d : in std_logic_vector(15 downto 0);
13  crc : out std_logic_vector(15 downto 0));
14 end crc16D16;
15 
16 architecture my_arch of crc16D16 is
17 signal c : std_logic_vector(15 downto 0) := (others => '0');
18 begin
19 crc <= c;
20 process(clk)
21 begin
22  if(clk'event and clk = '1')then
23  if(init_crc = '1')then
24  c <= (others => '1');
25  elsif(we_crc = '1')then
26  c(0) <= d(15) xor d(13) xor d(12) xor d(11) xor d(10) xor d(9) xor
27  d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor
28  d(2) xor d(1) xor d(0) xor c(15) xor c(13) xor c(12) xor
29  c(11) xor c(10) xor c(9) xor c(8) xor c(7) xor c(6) xor
30  c(5) xor c(4) xor c(3) xor c(2) xor c(1) xor c(0);
31  c(1) <= d(14) xor d(13) xor d(12) xor d(11) xor d(10) xor d(9) xor
32  d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor
33  d(2) xor d(1) xor c(14) xor c(13) xor c(12) xor c(11) xor
34  c(10) xor c(9) xor c(8) xor c(7) xor c(6) xor c(5) xor
35  c(4) xor c(3) xor c(2) xor c(1);
36  c(2) <= d(14) xor d(1) xor d(0) xor c(14) xor c(1) xor c(0);
37  c(3) <= d(15) xor d(2) xor d(1) xor c(15) xor c(2) xor c(1);
38  c(4) <= d(3) xor d(2) xor c(3) xor c(2);
39  c(5) <= d(4) xor d(3) xor c(4) xor c(3);
40  c(6) <= d(5) xor d(4) xor c(5) xor c(4);
41  c(7) <= d(6) xor d(5) xor c(6) xor c(5);
42  c(8) <= d(7) xor d(6) xor c(7) xor c(6);
43  c(9) <= d(8) xor d(7) xor c(8) xor c(7);
44  c(10) <= d(9) xor d(8) xor c(9) xor c(8);
45  c(11) <= d(10) xor d(9) xor c(10) xor c(9);
46  c(12) <= d(11) xor d(10) xor c(11) xor c(10);
47  c(13) <= d(12) xor d(11) xor c(12) xor c(11);
48  c(14) <= d(13) xor d(12) xor c(13) xor c(12);
49  c(15) <= d(15) xor d(14) xor d(12) xor d(11) xor d(10) xor d(9) xor
50  d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor
51  d(2) xor d(1) xor d(0) xor c(15) xor c(14) xor c(12) xor
52  c(11) xor c(10) xor c(9) xor c(8) xor c(7) xor c(6) xor
53  c(5) xor c(4) xor c(3) xor c(2) xor c(1) xor c(0);
54  end if;
55  end if;
56 end process;
57 end my_arch;