AMC13
Firmwares for the different applications of the AMC13 uTCA board made at Boston University
 All Classes Variables
CRC16_DATA32.vhd
1 
2 -- ########################################################################
3 -- CRC Engine RTL Design
4 -- Copyright (C) www.ElectronicDesignworks.com
5 -- Source code generated by ElectronicDesignworks IP Generator (CRC).
6 -- Documentation can be downloaded from www.ElectronicDesignworks.com
7 -- ********************************
8 -- License
9 -- ********************************
10 -- This source file may be used and distributed freely provided that this
11 -- copyright notice, list of conditions and the following disclaimer is
12 -- not removed from the file.
13 -- Any derivative work should contain this copyright notice and associated disclaimer.
14 -- This source code file is provided "AS IS" AND WITHOUT ANY WARRANTY,
15 -- without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
16 -- PARTICULAR PURPOSE.
17 -- ********************************
18 -- Specification
19 -- ********************************
20 -- File Name : CRC16_DATA32.vhd
21 -- Description : CRC Engine ENTITY
22 -- Clock : Positive Edge
23 -- Reset : Active High
24 -- First Serial : MSB
25 -- Data Bus Width : 32 bits
26 -- Polynomial : (0 2 15 16)
27 -- Date : 27-Feb-2012
28 -- Version : 1.0
29 -- ########################################################################
30 
31 LIBRARY IEEE ;
32 USE ieee.std_logic_1164.all ;
33 USE ieee.std_logic_arith.all ;
34 USE ieee.std_logic_unsigned.all ;
35 
37  PORT(
38  clock : IN STD_LOGIC;
39  reset : IN STD_LOGIC;
40  --soc : IN STD_LOGIC;
41  data : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
42  data_valid : IN STD_LOGIC;
43  eoc : IN STD_LOGIC;
44  crc : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
45  crc_valid : OUT STD_LOGIC
46  );
47 END crc_gen_usb_32to16;
48 
49 ARCHITECTURE behave OF crc_gen_usb_32to16 IS
50 
51  SIGNAL crc_r : STD_LOGIC_VECTOR(15 DOWNTO 0);
52  SIGNAL crc_c : STD_LOGIC_VECTOR(15 DOWNTO 0);
53  SIGNAL crc_i : STD_LOGIC_VECTOR(15 DOWNTO 0);
54  SIGNAL crc_const : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0000000000000000";
55 
56 BEGIN
57 
58 
59 crc_i <= --crc_const when soc = '1' else
60  crc_r;
61 
62 crc_c(0) <= data(0) XOR data(1) XOR data(15) XOR data(30) XOR crc_i(14) XOR data(2) XOR data(16) XOR crc_i(0) XOR data(31) XOR crc_i(15) XOR data(3) XOR data(17) XOR crc_i(1) XOR data(4) XOR data(18) XOR crc_i(2) XOR data(5) XOR data(19) XOR crc_i(3) XOR data(6) XOR data(20) XOR crc_i(4) XOR data(7) XOR data(21) XOR crc_i(5) XOR data(8) XOR data(22) XOR crc_i(6) XOR data(9) XOR data(23) XOR crc_i(7) XOR data(10) XOR data(24) XOR crc_i(8) XOR data(11) XOR data(25) XOR crc_i(9) XOR data(12) XOR data(26) XOR crc_i(10) XOR data(13) XOR data(27) XOR crc_i(11);
63 crc_c(1) <= data(1) XOR data(2) XOR data(16) XOR crc_i(0) XOR data(31) XOR crc_i(15) XOR data(3) XOR data(17) XOR crc_i(1) XOR data(4) XOR data(18) XOR crc_i(2) XOR data(5) XOR data(19) XOR crc_i(3) XOR data(6) XOR data(20) XOR crc_i(4) XOR data(7) XOR data(21) XOR crc_i(5) XOR data(8) XOR data(22) XOR crc_i(6) XOR data(9) XOR data(23) XOR crc_i(7) XOR data(10) XOR data(24) XOR crc_i(8) XOR data(11) XOR data(25) XOR crc_i(9) XOR data(12) XOR data(26) XOR crc_i(10) XOR data(13) XOR data(27) XOR crc_i(11) XOR data(14) XOR data(28) XOR crc_i(12);
64 crc_c(2) <= data(0) XOR data(14) XOR data(28) XOR crc_i(12) XOR data(29) XOR crc_i(13) XOR data(1) XOR data(30) XOR crc_i(14) XOR data(16) XOR crc_i(0) XOR data(31) XOR crc_i(15);
65 crc_c(3) <= data(1) XOR data(15) XOR data(29) XOR crc_i(13) XOR data(30) XOR crc_i(14) XOR data(2) XOR data(31) XOR crc_i(15) XOR data(17) XOR crc_i(1);
66 crc_c(4) <= data(2) XOR data(16) XOR data(30) XOR crc_i(14) XOR crc_i(0) XOR data(31) XOR crc_i(15) XOR data(3) XOR data(18) XOR crc_i(2);
67 crc_c(5) <= data(3) XOR data(17) XOR data(31) XOR crc_i(15) XOR crc_i(1) XOR data(4) XOR data(19) XOR crc_i(3);
68 crc_c(6) <= data(4) XOR data(18) XOR crc_i(2) XOR data(5) XOR data(20) XOR crc_i(4);
69 crc_c(7) <= data(5) XOR data(19) XOR crc_i(3) XOR data(6) XOR data(21) XOR crc_i(5);
70 crc_c(8) <= data(6) XOR data(20) XOR crc_i(4) XOR data(7) XOR data(22) XOR crc_i(6);
71 crc_c(9) <= data(7) XOR data(21) XOR crc_i(5) XOR data(8) XOR data(23) XOR crc_i(7);
72 crc_c(10) <= data(8) XOR data(22) XOR crc_i(6) XOR data(9) XOR data(24) XOR crc_i(8);
73 crc_c(11) <= data(9) XOR data(23) XOR crc_i(7) XOR data(10) XOR data(25) XOR crc_i(9);
74 crc_c(12) <= data(10) XOR data(24) XOR crc_i(8) XOR data(11) XOR data(26) XOR crc_i(10);
75 crc_c(13) <= data(11) XOR data(25) XOR crc_i(9) XOR data(12) XOR data(27) XOR crc_i(11);
76 crc_c(14) <= data(12) XOR data(26) XOR crc_i(10) XOR data(13) XOR data(28) XOR crc_i(12);
77 crc_c(15) <= data(0) XOR data(14) XOR data(29) XOR crc_i(13) XOR data(1) XOR data(15) XOR data(30) XOR crc_i(14) XOR data(2) XOR data(16) XOR crc_i(0) XOR data(31) XOR crc_i(15) XOR data(3) XOR data(17) XOR crc_i(1) XOR data(4) XOR data(18) XOR crc_i(2) XOR data(5) XOR data(19) XOR crc_i(3) XOR data(6) XOR data(20) XOR crc_i(4) XOR data(7) XOR data(21) XOR crc_i(5) XOR data(8) XOR data(22) XOR crc_i(6) XOR data(9) XOR data(23) XOR crc_i(7) XOR data(10) XOR data(24) XOR crc_i(8) XOR data(11) XOR data(25) XOR crc_i(9) XOR data(12) XOR data(26) XOR crc_i(10);
78 
79 
80 crc_gen_process : PROCESS(clock, reset)
81 BEGIN
82  IF(reset = '1') THEN
83  crc_r <= "0000000000000000" ;
84  ELSIF rising_edge(clock) THEN
85  IF(data_valid = '1') THEN
86  crc_r <= crc_c;
87  END IF;
88  END IF;
89 END PROCESS crc_gen_process;
90 
91 
92 crc_valid_gen : PROCESS(clock, reset)
93 BEGIN
94  If(reset = '1') THEN
95  crc_valid <= '0';
96  ELSIF rising_edge(clock) THEN
97  IF(data_valid = '1' AND eoc = '1') THEN
98  crc_valid <= '1';
99  ELSE
100  crc_valid <= '0';
101  END IF;
102  END IF;
103 END PROCESS crc_valid_gen;
104 
105 crc <= crc_r;
106 
107 END behave;
108 
109 
110 
111 
112 
113 
114 
115 
116 
117