AMC13
Firmwares for the different applications of the AMC13 uTCA board made at Boston University
 All Classes Variables
EthernetCRCD16B.vhd
1 --------------------------------------------------------------------------------
2 -- Copyright (C) 1999-2008 Easics NV.
3 -- This source file may be used and distributed without restriction
4 -- provided that this copyright statement is not removed from the file
5 -- and that any derivative work contains the original copyright notice
6 -- and the associated disclaimer.
7 --
8 -- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
9 -- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
10 -- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
11 --
12 -- Purpose : synthesizable CRC function
13 -- * polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32)
14 -- * data width: 8
15 --
16 -- Info : tools@easics.be
17 -- http://www.easics.com
18 --------------------------------------------------------------------------------
19 ----------------------------------------------------------------------------------
20 -- Company:
21 -- Engineer:
22 --
23 -- Create Date: 13:20:34 12/01/2011
24 -- Design Name:
25 -- Module Name: EthernetCRC - Behavioral
26 -- Project Name:
27 -- Target Devices:
28 -- Tool versions:
29 -- !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER
30 -- This module is provided only as an example, no correctness or any usefullness is implied.
31 -- Use of it is at users' own risk.
32 -- Do not remove this disclaimer.
33 -- !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER
34 -- Description: Ethernet CRC calculation, derived from PCK_CRC32_D8 generated using easics.com tools
35 --
36 -- Dependencies:
37 --
38 -- Revision:
39 -- Revision 0.01 - File Created
40 -- Additional Comments:
41 --
42 ----------------------------------------------------------------------------------
43 library IEEE;
44 use IEEE.STD_LOGIC_1164.ALL;
45 
46 -- Uncomment the following library declaration if using
47 -- arithmetic functions with Signed or Unsigned values
48 --use IEEE.NUMERIC_STD.ALL;
49 
50 -- Uncomment the following library declaration if instantiating
51 -- any Xilinx primitives in this code.
52 --library UNISIM;
53 --use UNISIM.VComponents.all;
54 
55 entity EthernetCRCD16B is
56  Port ( clk : in STD_LOGIC;
57  init : in STD_LOGIC;
58  save : in std_logic;
59  restore : in std_logic;
60  ce : in STD_LOGIC;
61  d : in STD_LOGIC_VECTOR (15 downto 0);
62  crc : out STD_LOGIC_VECTOR (31 downto 0);
63  bad_crc : out STD_LOGIC
64  );
65 end EthernetCRCD16B;
66 
67 architecture Behavioral of EthernetCRCD16B is
68 constant crc_R : std_logic_vector(31 downto 0) := x"c704dd7b";
69 signal c : std_logic_vector(31 downto 0) := (others => '0');
70 signal s : std_logic_vector(31 downto 0) := (others => '0');
71 signal di : std_logic_vector(15 downto 0) := (others => '0');
72 begin
73 process(c,d)
74 begin
75  for i in 0 to 31 loop
76  crc(i) <= not c(31-i);
77  end loop;
78  for i in 0 to 15 loop
79  di(i) <= d(15-i);
80  end loop;
81 end process;
82 bad_crc <= '0' when c = crc_R else '1';
83 process(clk)
84 begin
85  if(clk'event and clk = '1')then
86  if(init = '1')then
87  s <= (others => '1');
88  elsif(save = '1')then
89  s <= c;
90  end if;
91  if(init = '1')then
92  c <= (others => '1');
93  elsif(restore = '1')then
94  c <= s;
95  elsif(ce = '1')then
96  c(0) <= di(12) xor di(10) xor di(9) xor di(6) xor di(0) xor c(16) xor c(22) xor c(25) xor c(26) xor c(28);
97  c(1) <= di(13) xor di(12) xor di(11) xor di(9) xor di(7) xor di(6) xor di(1) xor di(0) xor c(16) xor c(17) xor c(22) xor c(23) xor c(25) xor c(27) xor c(28) xor c(29);
98  c(2) <= di(14) xor di(13) xor di(9) xor di(8) xor di(7) xor di(6) xor di(2) xor di(1) xor di(0) xor 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);
99  c(3) <= di(15) xor di(14) xor di(10) xor di(9) xor di(8) xor di(7) xor di(3) xor di(2) xor di(1) xor 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);
100  c(4) <= di(15) xor di(12) xor di(11) xor di(8) xor di(6) xor di(4) xor di(3) xor di(2) xor di(0) xor 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);
101  c(5) <= di(13) xor di(10) xor di(7) xor di(6) xor di(5) xor di(4) xor di(3) xor di(1) xor di(0) xor 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);
102  c(6) <= di(14) xor di(11) xor di(8) xor di(7) xor di(6) xor di(5) xor di(4) xor di(2) xor di(1) xor 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);
103  c(7) <= di(15) xor di(10) xor di(8) xor di(7) xor di(5) xor di(3) xor di(2) xor di(0) xor c(16) xor c(18) xor c(19) xor c(21) xor c(23) xor c(24) xor c(26) xor c(31);
104  c(8) <= di(12) xor di(11) xor di(10) xor di(8) xor di(4) xor di(3) xor di(1) xor di(0) xor c(16) xor c(17) xor c(19) xor c(20) xor c(24) xor c(26) xor c(27) xor c(28);
105  c(9) <= di(13) xor di(12) xor di(11) xor di(9) xor di(5) xor di(4) xor di(2) xor di(1) xor c(17) xor c(18) xor c(20) xor c(21) xor c(25) xor c(27) xor c(28) xor c(29);
106  c(10) <= di(14) xor di(13) xor di(9) xor di(5) xor di(3) xor di(2) xor di(0) xor c(16) xor c(18) xor c(19) xor c(21) xor c(25) xor c(29) xor c(30);
107  c(11) <= di(15) xor di(14) xor di(12) xor di(9) xor di(4) xor di(3) xor di(1) xor di(0) xor c(16) xor c(17) xor c(19) xor c(20) xor c(25) xor c(28) xor c(30) xor c(31);
108  c(12) <= di(15) xor di(13) xor di(12) xor di(9) xor di(6) xor di(5) xor di(4) xor di(2) xor di(1) xor di(0) xor 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);
109  c(13) <= di(14) xor di(13) xor di(10) xor di(7) xor di(6) xor di(5) xor di(3) xor di(2) xor di(1) xor 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);
110  c(14) <= di(15) xor di(14) xor di(11) xor di(8) xor di(7) xor di(6) xor di(4) xor di(3) xor di(2) xor 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);
111  c(15) <= di(15) xor di(12) xor di(9) xor di(8) xor di(7) xor di(5) xor di(4) xor di(3) xor c(19) xor c(20) xor c(21) xor c(23) xor c(24) xor c(25) xor c(28) xor c(31);
112  c(16) <= di(13) xor di(12) xor di(8) xor di(5) xor di(4) xor di(0) xor c(0) xor c(16) xor c(20) xor c(21) xor c(24) xor c(28) xor c(29);
113  c(17) <= di(14) xor di(13) xor di(9) xor di(6) xor di(5) xor di(1) xor c(1) xor c(17) xor c(21) xor c(22) xor c(25) xor c(29) xor c(30);
114  c(18) <= di(15) xor di(14) xor di(10) xor di(7) xor di(6) xor di(2) xor c(2) xor c(18) xor c(22) xor c(23) xor c(26) xor c(30) xor c(31);
115  c(19) <= di(15) xor di(11) xor di(8) xor di(7) xor di(3) xor c(3) xor c(19) xor c(23) xor c(24) xor c(27) xor c(31);
116  c(20) <= di(12) xor di(9) xor di(8) xor di(4) xor c(4) xor c(20) xor c(24) xor c(25) xor c(28);
117  c(21) <= di(13) xor di(10) xor di(9) xor di(5) xor c(5) xor c(21) xor c(25) xor c(26) xor c(29);
118  c(22) <= di(14) xor di(12) xor di(11) xor di(9) xor di(0) xor c(6) xor c(16) xor c(25) xor c(27) xor c(28) xor c(30);
119  c(23) <= di(15) xor di(13) xor di(9) xor di(6) xor di(1) xor di(0) xor c(7) xor c(16) xor c(17) xor c(22) xor c(25) xor c(29) xor c(31);
120  c(24) <= di(14) xor di(10) xor di(7) xor di(2) xor di(1) xor c(8) xor c(17) xor c(18) xor c(23) xor c(26) xor c(30);
121  c(25) <= di(15) xor di(11) xor di(8) xor di(3) xor di(2) xor c(9) xor c(18) xor c(19) xor c(24) xor c(27) xor c(31);
122  c(26) <= di(10) xor di(6) xor di(4) xor di(3) xor di(0) xor c(10) xor c(16) xor c(19) xor c(20) xor c(22) xor c(26);
123  c(27) <= di(11) xor di(7) xor di(5) xor di(4) xor di(1) xor c(11) xor c(17) xor c(20) xor c(21) xor c(23) xor c(27);
124  c(28) <= di(12) xor di(8) xor di(6) xor di(5) xor di(2) xor c(12) xor c(18) xor c(21) xor c(22) xor c(24) xor c(28);
125  c(29) <= di(13) xor di(9) xor di(7) xor di(6) xor di(3) xor c(13) xor c(19) xor c(22) xor c(23) xor c(25) xor c(29);
126  c(30) <= di(14) xor di(10) xor di(8) xor di(7) xor di(4) xor c(14) xor c(20) xor c(23) xor c(24) xor c(26) xor c(30);
127  c(31) <= di(15) xor di(11) xor di(9) xor di(8) xor di(5) xor c(15) xor c(21) xor c(24) xor c(25) xor c(27) xor c(31);
128  end if;
129  end if;
130 end process;
131 
132 end Behavioral;
133