AMC13
Firmwares for the different applications of the AMC13 uTCA board made at Boston University
 All Classes Variables
cmsCRC64.vhd
1 ----------------------------------------------------------------------------------
2 -- Company:
3 -- Engineer:
4 --
5 -- Create Date: 12:33:25 01/11/2012
6 -- Design Name:
7 -- Module Name: cmsCRC64 - Behavioral
8 -- Project Name:
9 -- Target Devices:
10 -- Tool versions:
11 -- Description:
12 --
13 -- Dependencies:
14 --
15 -- Revision:
16 -- Revision 0.01 - File Created
17 -- Additional Comments:
18 --
19 ----------------------------------------------------------------------------------
20 library IEEE;
21 use IEEE.STD_LOGIC_1164.ALL;
22 
23 -- Uncomment the following library declaration if using
24 -- arithmetic functions with Signed or Unsigned values
25 --use IEEE.NUMERIC_STD.ALL;
26 
27 -- Uncomment the following library declaration if instantiating
28 -- any Xilinx primitives in this code.
29 --library UNISIM;
30 --use UNISIM.VComponents.all;
31 
32 entity cmsCRC64 is
33  Port ( clk : in STD_LOGIC;
34  reset : in STD_LOGIC;
35  crc_init : in STD_LOGIC;
36  inject_err : in STD_LOGIC;
37  trailer : in STD_LOGIC;
38  crc_d : in STD_LOGIC_VECTOR (63 downto 0);
39  crc_ce : in STD_LOGIC;
40  crc : out STD_LOGIC_VECTOR (15 downto 0);
41  crc_err : out STD_LOGIC;
42  dout : out STD_LOGIC_VECTOR (63 downto 0);
43  dout_vld : out STD_LOGIC);
44 end cmsCRC64;
45 
46 architecture Behavioral of cmsCRC64 is
47 signal c : std_logic_vector(15 downto 0) := (others => '1');
48 signal d : std_logic_vector(63 downto 0) := (others => '0');
49 signal d_q : std_logic_vector(63 downto 0) := (others => '0');
50 signal crc_ce_q : std_logic := '1';
51 signal trailer_q : std_logic := '1';
52 begin
53 d <= crc_d;
54 crc <= c;
55 process(clk)
56 begin
57  if(clk'event and clk = '1')then
58  crc_ce_q <= crc_ce and not reset;
59  dout_vld <= crc_ce_q and not reset;
60  d_q <= d;
61  dout(63 downto 32) <= d_q(63 downto 32);
62  dout(15 downto 0) <= d_q(15 downto 0);
63  trailer_q <= trailer and crc_ce;
64  if(trailer_q = '1' and inject_err = '0')then
65  dout(31 downto 16) <= c;
66  else
67  dout(31 downto 16) <= d_q(31 downto 16);
68  end if;
69  if(crc_init = '1')then
70  crc_err <= '0';
71  elsif(trailer_q = '1' and d_q(31 downto 16) /= c)then
72  crc_err <= '1';
73  else
74  crc_err <= '0';
75  end if;
76  if(crc_init = '1')then
77  c <= (others => '1');
78  elsif(crc_ce = '1')then
79  c(0) <= d(63) xor d(62) xor d(61) xor d(60) xor d(55) xor d(54) xor
80  d(53) xor d(52) xor d(51) xor d(50) xor d(49) xor d(48) xor
81  d(47) xor d(46) xor d(45) xor d(43) xor d(41) xor d(40) xor
82  d(39) xor d(38) xor d(37) xor d(36) xor d(35) xor d(34) xor
83  d(33) xor d(32) xor ((d(31) xor d(30) xor d(27) xor d(26) xor
84  d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(20) xor
85  d(19) xor d(18) xor d(17) xor d(16)) and not trailer) xor d(15) xor d(13) xor
86  d(12) xor d(11) xor d(10) xor d(9) xor d(8) xor d(7) xor
87  d(6) xor d(5) xor d(4) xor d(3) xor d(2) xor d(1) xor
88  d(0) xor c(15) xor c(14) xor c(13) xor c(12) xor c(7) xor
89  c(6) xor c(5) xor c(4) xor c(3) xor c(2) xor c(1) xor
90  c(0);
91  c(1) <= d(63) xor d(62) xor d(61) xor d(56) xor d(55) xor d(54) xor
92  d(53) xor d(52) xor d(51) xor d(50) xor d(49) xor d(48) xor
93  d(47) xor d(46) xor d(44) xor d(42) xor d(41) xor d(40) xor
94  d(39) xor d(38) xor d(37) xor d(36) xor d(35) xor d(34) xor
95  d(33) xor d(32) xor ((d(31) xor d(28) xor d(27) xor d(26) xor
96  d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(20) xor
97  d(19) xor d(18) xor d(17) xor d(16)) and not trailer) xor d(14) xor d(13) xor
98  d(12) xor d(11) xor d(10) xor d(9) xor d(8) xor d(7) xor
99  d(6) xor d(5) xor d(4) xor d(3) xor d(2) xor d(1) xor
100  c(15) xor c(14) xor c(13) xor c(8) xor c(7) xor c(6) xor
101  c(5) xor c(4) xor c(3) xor c(2) xor c(1) xor c(0);
102  c(2) <= d(61) xor d(60) xor d(57) xor d(56) xor d(46) xor d(42) xor
103  ((d(31) xor d(30) xor d(29) xor d(28) xor d(16)) and not trailer) xor d(14) xor
104  d(1) xor d(0) xor c(13) xor c(12) xor c(9) xor c(8);
105  c(3) <= d(62) xor d(61) xor d(58) xor d(57) xor d(47) xor d(43) xor
106  d(32) xor ((d(31) xor d(30) xor d(29) xor d(17)) and not trailer) xor d(15) xor
107  d(2) xor d(1) xor c(14) xor c(13) xor c(10) xor c(9);
108  c(4) <= d(63) xor d(62) xor d(59) xor d(58) xor d(48) xor d(44) xor
109  d(33) xor d(32) xor ((d(31) xor d(30) xor d(18) xor d(16)) and not trailer) xor
110  d(3) xor d(2) xor c(15) xor c(14) xor c(11) xor c(10) xor
111  c(0);
112  c(5) <= d(63) xor d(60) xor d(59) xor d(49) xor d(45) xor d(34) xor
113  d(33) xor d(32) xor ((d(31) xor d(19) xor d(17)) and not trailer) xor d(4) xor
114  d(3) xor c(15) xor c(12) xor c(11) xor c(1);
115  c(6) <= d(61) xor d(60) xor d(50) xor d(46) xor d(35) xor d(34) xor
116  d(33) xor d(32) xor ((d(20) xor d(18)) and not trailer) xor d(5) xor d(4) xor
117  c(13) xor c(12) xor c(2);
118  c(7) <= d(62) xor d(61) xor d(51) xor d(47) xor d(36) xor d(35) xor
119  d(34) xor d(33) xor ((d(21) xor d(19)) and not trailer) xor d(6) xor d(5) xor
120  c(14) xor c(13) xor c(3);
121  c(8) <= d(63) xor d(62) xor d(52) xor d(48) xor d(37) xor d(36) xor
122  d(35) xor d(34) xor ((d(22) xor d(20)) and not trailer) xor d(7) xor d(6) xor
123  c(15) xor c(14) xor c(4) xor c(0);
124  c(9) <= d(63) xor d(53) xor d(49) xor d(38) xor d(37) xor d(36) xor
125  d(35) xor ((d(23) xor d(21)) and not trailer) xor d(8) xor d(7) xor c(15) xor
126  c(5) xor c(1);
127  c(10) <= d(54) xor d(50) xor d(39) xor d(38) xor d(37) xor d(36) xor
128  ((d(24) xor d(22)) and not trailer) xor d(9) xor d(8) xor c(6) xor c(2);
129  c(11) <= d(55) xor d(51) xor d(40) xor d(39) xor d(38) xor d(37) xor
130  ((d(25) xor d(23)) and not trailer) xor d(10) xor d(9) xor c(7) xor c(3);
131  c(12) <= d(56) xor d(52) xor d(41) xor d(40) xor d(39) xor d(38) xor
132  ((d(26) xor d(24)) and not trailer) xor d(11) xor d(10) xor c(8) xor c(4);
133  c(13) <= d(57) xor d(53) xor d(42) xor d(41) xor d(40) xor d(39) xor
134  ((d(27) xor d(25)) and not trailer) xor d(12) xor d(11) xor c(9) xor c(5);
135  c(14) <= d(58) xor d(54) xor d(43) xor d(42) xor d(41) xor d(40) xor
136  ((d(28) xor d(26)) and not trailer) xor d(13) xor d(12) xor c(10) xor c(6);
137  c(15) <= d(63) xor d(62) xor d(61) xor d(60) xor d(59) xor d(54) xor
138  d(53) xor d(52) xor d(51) xor d(50) xor d(49) xor d(48) xor
139  d(47) xor d(46) xor d(45) xor d(44) xor d(42) xor d(40) xor
140  d(39) xor d(38) xor d(37) xor d(36) xor d(35) xor d(34) xor
141  d(33) xor d(32) xor ((d(31) xor d(30) xor d(29) xor d(26) xor
142  d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(20) xor
143  d(19) xor d(18) xor d(17) xor d(16)) and not trailer) xor d(15) xor d(14) xor
144  d(12) xor d(11) xor d(10) xor d(9) xor d(8) xor d(7) xor
145  d(6) xor d(5) xor d(4) xor d(3) xor d(2) xor d(1) xor
146  d(0) xor c(15) xor c(14) xor c(13) xor c(12) xor c(11) xor
147  c(6) xor c(5) xor c(4) xor c(3) xor c(2) xor c(1) xor
148  c(0);
149  end if;
150  end if;
151 end process;
152 
153 end Behavioral;
154