1 |
11 |
N.Boukadid |
|
2 |
|
|
--******************************************************************************
|
3 |
|
|
--* *
|
4 |
|
|
--* Calculates a CRC-32 over the data at Din, data may *
|
5 |
|
|
--* already arrive when Reset is high *
|
6 |
|
|
--* The process from Din to CRC takes 2 Clk cycles *
|
7 |
|
|
--* Frans Schreuder (Nikhef) franss@nikhef.nl *
|
8 |
|
|
--* *
|
9 |
|
|
--******************************************************************************
|
10 |
|
|
|
11 |
|
|
|
12 |
|
|
library ieee;
|
13 |
|
|
use ieee.std_logic_1164.all;
|
14 |
|
|
library work;
|
15 |
|
|
|
16 |
|
|
entity CRC_32 is
|
17 |
|
|
-- generic(
|
18 |
|
|
-- Nbits : positive := 64;
|
19 |
|
|
-- CRC_Width : positive := 32;
|
20 |
|
|
-- G_Poly: Std_Logic_Vector :=x"1EDC_6F41"; --c1acf
|
21 |
|
|
-- G_InitVal: std_logic_vector:=x"ffff_ffff"
|
22 |
|
|
-- );
|
23 |
|
|
port(
|
24 |
|
|
CRC : out std_logic_vector(31 downto 0);
|
25 |
|
|
Calc : in std_logic;
|
26 |
|
|
Clk : in std_logic;
|
27 |
|
|
DIn : in std_logic_vector(63 downto 0);
|
28 |
|
|
Reset : in std_logic);
|
29 |
|
|
end CRC_32;
|
30 |
|
|
|
31 |
|
|
|
32 |
|
|
architecture rtl of CRC_32 is
|
33 |
|
|
|
34 |
|
|
-- function ToIndirectInitVal(Direct:std_logic_vector; CRC_Width: positive; Poly: std_logic_vector) return std_logic_vector is
|
35 |
|
|
-- variable InDirect: std_logic_vector(Direct'high downto Direct'low);
|
36 |
|
|
-- begin
|
37 |
|
|
-- for k in 0 to CRC_Width loop
|
38 |
|
|
-- if(k = 0) then
|
39 |
|
|
-- InDirect := Direct;
|
40 |
|
|
-- else
|
41 |
|
|
-- if(InDirect(0)='1') then
|
42 |
|
|
-- InDirect := (('0'&InDirect(CRC_Width-1 downto 1)) xor ('1'&Poly(CRC_Width-1 downto 1)));
|
43 |
|
|
-- else
|
44 |
|
|
-- InDirect := '0'&InDirect(CRC_Width-1 downto 1);
|
45 |
|
|
-- end if;
|
46 |
|
|
-- end if;
|
47 |
|
|
-- end loop;
|
48 |
|
|
-- return InDirect;
|
49 |
|
|
-- end function ToIndirectInitVal;
|
50 |
|
|
|
51 |
|
|
-- constant Poly: Std_Logic_Vector(CRC_Width-1 downto 0) := G_Poly;
|
52 |
|
|
-- constant InitVal: Std_Logic_Vector(CRC_Width-1 downto 0) := G_InitVal;
|
53 |
|
|
|
54 |
|
|
-- constant InDirectInitVal: std_logic_vector(CRC_Width-1 downto 0):=ToIndirectInitVal(InitVal, CRC_Width, Poly);
|
55 |
|
|
-- signal Reg_s : std_logic_vector(CRC_Width-1 downto 0);
|
56 |
|
|
--begin
|
57 |
|
|
|
58 |
|
|
|
59 |
|
|
-- process (Clk)
|
60 |
|
|
-- variable Reg, Reg2: Std_Logic_Vector (CRC_Width-1 downto 0);
|
61 |
|
|
-- variable ApplyPoly: std_logic;
|
62 |
|
|
-- begin
|
63 |
|
|
|
64 |
|
|
-- if rising_Edge(Clk) then
|
65 |
|
|
-- if Reset = '1' then
|
66 |
|
|
-- if(Calc = '1') then
|
67 |
|
|
-- for k In 0 to Nbits loop
|
68 |
|
|
-- if(k = 0) then
|
69 |
|
|
-- Reg := (InDirectInitVal);--(CRC_Width-1 downto 0)&dinP(k))xor ('0'&Poly);
|
70 |
|
|
-- else
|
71 |
|
|
-- if Reg(CRC_Width-1) = '1' then
|
72 |
|
|
-- Reg := (Reg(CRC_Width-2 downto 0)&din(Nbits - k))xor (Poly);
|
73 |
|
|
-- else
|
74 |
|
|
-- Reg := Reg(CRC_Width-2 downto 0)&din(Nbits - k);
|
75 |
|
|
-- end if;
|
76 |
|
|
-- end if;
|
77 |
|
|
-- end loop;
|
78 |
|
|
-- else
|
79 |
|
|
-- Reg := InDirectInitVal;
|
80 |
|
|
-- end if;
|
81 |
|
|
-- else
|
82 |
|
|
-- if Calc = '1' then
|
83 |
|
|
-- for k In 1 to Nbits loop
|
84 |
|
|
-- if Reg(CRC_Width-1) = '1' then
|
85 |
|
|
-- Reg := (Reg(CRC_Width-2 downto 0)&din(Nbits - k))xor (Poly);
|
86 |
|
|
-- else
|
87 |
|
|
-- Reg := Reg(CRC_Width-2 downto 0)&din(Nbits - k);
|
88 |
|
|
-- end if;
|
89 |
|
|
-- end loop;
|
90 |
|
|
-- else
|
91 |
|
|
-- Reg := Reg;
|
92 |
|
|
-- end if;
|
93 |
|
|
-- end if;
|
94 |
|
|
|
95 |
|
|
-- Reg_s <= Reg;
|
96 |
|
|
-- Reg2 := Reg_s;
|
97 |
|
|
-- --we need one more loop to output the CRC register to the output.
|
98 |
|
|
-- for k In 1 to CRC_Width loop
|
99 |
|
|
-- if Reg2(CRC_Width-1) = '1' then
|
100 |
|
|
-- Reg2 := (Reg2(CRC_Width-2 downto 0)&'0')xor (Poly);
|
101 |
|
|
-- else
|
102 |
|
|
-- Reg2:= Reg2(CRC_Width-2 downto 0)&'0';
|
103 |
|
|
-- end if;
|
104 |
|
|
-- end loop;
|
105 |
|
|
-- CRC <= Reg2;--(CRC_width-1 downto 0);
|
106 |
|
|
-- end if;
|
107 |
|
|
-- end process;
|
108 |
|
|
|
109 |
|
|
signal c: std_logic_vector(31 downto 0);
|
110 |
|
|
signal d: std_logic_vector(63 downto 0);
|
111 |
|
|
signal crc_out: std_logic_vector(31 downto 0);
|
112 |
|
|
begin
|
113 |
|
|
|
114 |
|
|
process(clk)
|
115 |
|
|
begin
|
116 |
|
|
if rising_edge(clk) then
|
117 |
|
|
d <= Din;
|
118 |
|
|
if Reset = '1' then
|
119 |
|
|
c <= (others => '1');
|
120 |
|
|
else
|
121 |
|
|
if Calc = '1' then
|
122 |
|
|
c <= crc_out;
|
123 |
|
|
end if;
|
124 |
|
|
end if;
|
125 |
|
|
CRC <= not crc_out;
|
126 |
|
|
end if;
|
127 |
|
|
end process;
|
128 |
|
|
|
129 |
|
|
|
130 |
|
|
crc_out(0) <=
|
131 |
|
|
c(3) xor c(4) xor c(5) xor c(10) xor c(11) xor c(13) xor
|
132 |
|
|
c(14) xor c(15) xor c(16) xor c(19) xor c(21) xor c(22) xor c(27) xor
|
133 |
|
|
c(30) xor d(62) xor d(59) xor d(54) xor d(53) xor d(51) xor d(48) xor
|
134 |
|
|
d(47) xor d(46) xor d(45) xor d(43) xor d(42) xor d(37) xor d(36) xor
|
135 |
|
|
d(35) xor d(31) xor d(30) xor d(28) xor d(27) xor d(26) xor d(25) xor
|
136 |
|
|
d(23) xor d(21) xor d(18) xor d(17) xor d(16) xor d(12) xor d(9) xor
|
137 |
|
|
d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(0);
|
138 |
|
|
|
139 |
|
|
crc_out(1) <=
|
140 |
|
|
c(0) xor c(4) xor c(5) xor c(6) xor c(11) xor c(12) xor
|
141 |
|
|
c(14) xor c(15) xor c(16) xor c(17) xor c(20) xor c(22) xor c(23) xor
|
142 |
|
|
c(28) xor c(31) xor d(63) xor d(60) xor d(55) xor d(54) xor d(52) xor
|
143 |
|
|
d(49) xor d(48) xor d(47) xor d(46) xor d(44) xor d(43) xor d(38) xor
|
144 |
|
|
d(37) xor d(36) xor d(32) xor d(31) xor d(29) xor d(28) xor d(27) xor
|
145 |
|
|
d(26) xor d(24) xor d(22) xor d(19) xor d(18) xor d(17) xor d(13) xor
|
146 |
|
|
d(10) xor d(9) xor d(8) xor d(7) xor d(6) xor d(5) xor d(1);
|
147 |
|
|
|
148 |
|
|
crc_out(2) <=
|
149 |
|
|
c(0) xor c(1) xor c(5) xor c(6) xor c(7) xor c(12) xor
|
150 |
|
|
c(13) xor c(15) xor c(16) xor c(17) xor c(18) xor c(21) xor c(23) xor
|
151 |
|
|
c(24) xor c(29) xor d(61) xor d(56) xor d(55) xor d(53) xor d(50) xor
|
152 |
|
|
d(49) xor d(48) xor d(47) xor d(45) xor d(44) xor d(39) xor d(38) xor
|
153 |
|
|
d(37) xor d(33) xor d(32) xor d(30) xor d(29) xor d(28) xor d(27) xor
|
154 |
|
|
d(25) xor d(23) xor d(20) xor d(19) xor d(18) xor d(14) xor d(11) xor
|
155 |
|
|
d(10) xor d(9) xor d(8) xor d(7) xor d(6) xor d(2);
|
156 |
|
|
|
157 |
|
|
crc_out(3) <=
|
158 |
|
|
c(1) xor c(2) xor c(6) xor c(7) xor c(8) xor c(13) xor
|
159 |
|
|
c(14) xor c(16) xor c(17) xor c(18) xor c(19) xor c(22) xor c(24) xor
|
160 |
|
|
c(25) xor c(30) xor d(62) xor d(57) xor d(56) xor d(54) xor d(51) xor
|
161 |
|
|
d(50) xor d(49) xor d(48) xor d(46) xor d(45) xor d(40) xor d(39) xor
|
162 |
|
|
d(38) xor d(34) xor d(33) xor d(31) xor d(30) xor d(29) xor d(28) xor
|
163 |
|
|
d(26) xor d(24) xor d(21) xor d(20) xor d(19) xor d(15) xor d(12) xor
|
164 |
|
|
d(11) xor d(10) xor d(9) xor d(8) xor d(7) xor d(3);
|
165 |
|
|
|
166 |
|
|
crc_out(4) <=
|
167 |
|
|
c(0) xor c(2) xor c(3) xor c(7) xor c(8) xor c(9) xor
|
168 |
|
|
c(14) xor c(15) xor c(17) xor c(18) xor c(19) xor c(20) xor c(23) xor
|
169 |
|
|
c(25) xor c(26) xor c(31) xor d(63) xor d(58) xor d(57) xor d(55) xor
|
170 |
|
|
d(52) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(41) xor
|
171 |
|
|
d(40) xor d(39) xor d(35) xor d(34) xor d(32) xor d(31) xor d(30) xor
|
172 |
|
|
d(29) xor d(27) xor d(25) xor d(22) xor d(21) xor d(20) xor d(16) xor
|
173 |
|
|
d(13) xor d(12) xor d(11) xor d(10) xor d(9) xor d(8) xor d(4);
|
174 |
|
|
|
175 |
|
|
crc_out(5) <=
|
176 |
|
|
c(0) xor c(1) xor c(3) xor c(4) xor c(8) xor c(9) xor
|
177 |
|
|
c(10) xor c(15) xor c(16) xor c(18) xor c(19) xor c(20) xor c(21) xor
|
178 |
|
|
c(24) xor c(26) xor c(27) xor d(59) xor d(58) xor d(56) xor d(53) xor
|
179 |
|
|
d(52) xor d(51) xor d(50) xor d(48) xor d(47) xor d(42) xor d(41) xor
|
180 |
|
|
d(40) xor d(36) xor d(35) xor d(33) xor d(32) xor d(31) xor d(30) xor
|
181 |
|
|
d(28) xor d(26) xor d(23) xor d(22) xor d(21) xor d(17) xor d(14) xor
|
182 |
|
|
d(13) xor d(12) xor d(11) xor d(10) xor d(9) xor d(5);
|
183 |
|
|
|
184 |
|
|
crc_out(6) <=
|
185 |
|
|
c(0) xor c(1) xor c(2) xor c(3) xor c(9) xor c(13) xor
|
186 |
|
|
c(14) xor c(15) xor c(17) xor c(20) xor c(25) xor c(28) xor c(30) xor
|
187 |
|
|
d(62) xor d(60) xor d(57) xor d(52) xor d(49) xor d(47) xor d(46) xor
|
188 |
|
|
d(45) xor d(41) xor d(35) xor d(34) xor d(33) xor d(32) xor d(30) xor
|
189 |
|
|
d(29) xor d(28) xor d(26) xor d(25) xor d(24) xor d(22) xor d(21) xor
|
190 |
|
|
d(17) xor d(16) xor d(15) xor d(14) xor d(13) xor d(11) xor d(10) xor
|
191 |
|
|
d(9) xor d(8) xor d(7) xor d(5) xor d(4) xor d(0);
|
192 |
|
|
|
193 |
|
|
crc_out(7) <=
|
194 |
|
|
c(1) xor c(2) xor c(3) xor c(4) xor c(10) xor c(14) xor
|
195 |
|
|
c(15) xor c(16) xor c(18) xor c(21) xor c(26) xor c(29) xor c(31) xor
|
196 |
|
|
d(63) xor d(61) xor d(58) xor d(53) xor d(50) xor d(48) xor d(47) xor
|
197 |
|
|
d(46) xor d(42) xor d(36) xor d(35) xor d(34) xor d(33) xor d(31) xor
|
198 |
|
|
d(30) xor d(29) xor d(27) xor d(26) xor d(25) xor d(23) xor d(22) xor
|
199 |
|
|
d(18) xor d(17) xor d(16) xor d(15) xor d(14) xor d(12) xor d(11) xor
|
200 |
|
|
d(10) xor d(9) xor d(8) xor d(6) xor d(5) xor d(1);
|
201 |
|
|
|
202 |
|
|
crc_out(8) <=
|
203 |
|
|
c(0) xor c(2) xor c(10) xor c(13) xor c(14) xor c(17) xor
|
204 |
|
|
c(21) xor d(53) xor d(49) xor d(46) xor d(45) xor d(42) xor d(34) xor
|
205 |
|
|
d(32) xor d(25) xor d(24) xor d(21) xor d(19) xor d(15) xor d(13) xor
|
206 |
|
|
d(11) xor d(10) xor d(8) xor d(5) xor d(4) xor d(2) xor d(0);
|
207 |
|
|
|
208 |
|
|
crc_out(9) <=
|
209 |
|
|
c(1) xor c(4) xor c(5) xor c(10) xor c(13) xor c(16) xor
|
210 |
|
|
c(18) xor c(19) xor c(21) xor c(27) xor c(30) xor d(62) xor d(59) xor
|
211 |
|
|
d(53) xor d(51) xor d(50) xor d(48) xor d(45) xor d(42) xor d(37) xor
|
212 |
|
|
d(36) xor d(33) xor d(31) xor d(30) xor d(28) xor d(27) xor d(23) xor
|
213 |
|
|
d(22) xor d(21) xor d(20) xor d(18) xor d(17) xor d(14) xor d(11) xor
|
214 |
|
|
d(8) xor d(7) xor d(4) xor d(3) xor d(1) xor d(0);
|
215 |
|
|
|
216 |
|
|
crc_out(10) <=
|
217 |
|
|
c(0) xor c(2) xor c(3) xor c(4) xor c(6) xor c(10) xor
|
218 |
|
|
c(13) xor c(15) xor c(16) xor c(17) xor c(20) xor c(21) xor c(27) xor
|
219 |
|
|
c(28) xor c(30) xor c(31) xor d(63) xor d(62) xor d(60) xor d(59) xor
|
220 |
|
|
d(53) xor d(52) xor d(49) xor d(48) xor d(47) xor d(45) xor d(42) xor
|
221 |
|
|
d(38) xor d(36) xor d(35) xor d(34) xor d(32) xor d(30) xor d(29) xor
|
222 |
|
|
d(27) xor d(26) xor d(25) xor d(24) xor d(22) xor d(19) xor d(17) xor
|
223 |
|
|
d(16) xor d(15) xor d(7) xor d(6) xor d(2) xor d(1) xor d(0);
|
224 |
|
|
|
225 |
|
|
crc_out(11) <=
|
226 |
|
|
c(1) xor c(7) xor c(10) xor c(13) xor c(15) xor c(17) xor
|
227 |
|
|
c(18) xor c(19) xor c(27) xor c(28) xor c(29) xor c(30) xor c(31) xor
|
228 |
|
|
d(63) xor d(62) xor d(61) xor d(60) xor d(59) xor d(51) xor d(50) xor
|
229 |
|
|
d(49) xor d(47) xor d(45) xor d(42) xor d(39) xor d(33) xor d(21) xor
|
230 |
|
|
d(20) xor d(12) xor d(9) xor d(6) xor d(5) xor d(4) xor d(3) xor
|
231 |
|
|
d(2) xor d(1) xor d(0);
|
232 |
|
|
|
233 |
|
|
crc_out(12) <=
|
234 |
|
|
c(2) xor c(8) xor c(11) xor c(14) xor c(16) xor c(18) xor
|
235 |
|
|
c(19) xor c(20) xor c(28) xor c(29) xor c(30) xor c(31) xor d(63) xor
|
236 |
|
|
d(62) xor d(61) xor d(60) xor d(52) xor d(51) xor d(50) xor d(48) xor
|
237 |
|
|
d(46) xor d(43) xor d(40) xor d(34) xor d(22) xor d(21) xor d(13) xor
|
238 |
|
|
d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(2) xor
|
239 |
|
|
d(1);
|
240 |
|
|
|
241 |
|
|
crc_out(13) <=
|
242 |
|
|
c(4) xor c(5) xor c(9) xor c(10) xor c(11) xor c(12) xor
|
243 |
|
|
c(13) xor c(14) xor c(16) xor c(17) xor c(20) xor c(22) xor c(27) xor
|
244 |
|
|
c(29) xor c(31) xor d(63) xor d(61) xor d(59) xor d(54) xor d(52) xor
|
245 |
|
|
d(49) xor d(48) xor d(46) xor d(45) xor d(44) xor d(43) xor d(42) xor
|
246 |
|
|
d(41) xor d(37) xor d(36) xor d(31) xor d(30) xor d(28) xor d(27) xor
|
247 |
|
|
d(26) xor d(25) xor d(22) xor d(21) xor d(18) xor d(17) xor d(16) xor
|
248 |
|
|
d(14) xor d(12) xor d(11) xor d(9) xor d(3) xor d(2) xor d(0);
|
249 |
|
|
|
250 |
|
|
crc_out(14) <=
|
251 |
|
|
c(0) xor c(3) xor c(4) xor c(6) xor c(12) xor c(16) xor
|
252 |
|
|
c(17) xor c(18) xor c(19) xor c(22) xor c(23) xor c(27) xor c(28) xor
|
253 |
|
|
d(60) xor d(59) xor d(55) xor d(54) xor d(51) xor d(50) xor d(49) xor
|
254 |
|
|
d(48) xor d(44) xor d(38) xor d(36) xor d(35) xor d(32) xor d(30) xor
|
255 |
|
|
d(29) xor d(25) xor d(22) xor d(21) xor d(19) xor d(16) xor d(15) xor
|
256 |
|
|
d(13) xor d(10) xor d(9) xor d(8) xor d(7) xor d(6) xor d(5) xor
|
257 |
|
|
d(3) xor d(1) xor d(0);
|
258 |
|
|
|
259 |
|
|
crc_out(15) <=
|
260 |
|
|
c(1) xor c(4) xor c(5) xor c(7) xor c(13) xor c(17) xor
|
261 |
|
|
c(18) xor c(19) xor c(20) xor c(23) xor c(24) xor c(28) xor c(29) xor
|
262 |
|
|
d(61) xor d(60) xor d(56) xor d(55) xor d(52) xor d(51) xor d(50) xor
|
263 |
|
|
d(49) xor d(45) xor d(39) xor d(37) xor d(36) xor d(33) xor d(31) xor
|
264 |
|
|
d(30) xor d(26) xor d(23) xor d(22) xor d(20) xor d(17) xor d(16) xor
|
265 |
|
|
d(14) xor d(11) xor d(10) xor d(9) xor d(8) xor d(7) xor d(6) xor
|
266 |
|
|
d(4) xor d(2) xor d(1);
|
267 |
|
|
|
268 |
|
|
crc_out(16) <=
|
269 |
|
|
c(0) xor c(2) xor c(5) xor c(6) xor c(8) xor c(14) xor
|
270 |
|
|
c(18) xor c(19) xor c(20) xor c(21) xor c(24) xor c(25) xor c(29) xor
|
271 |
|
|
c(30) xor d(62) xor d(61) xor d(57) xor d(56) xor d(53) xor d(52) xor
|
272 |
|
|
d(51) xor d(50) xor d(46) xor d(40) xor d(38) xor d(37) xor d(34) xor
|
273 |
|
|
d(32) xor d(31) xor d(27) xor d(24) xor d(23) xor d(21) xor d(18) xor
|
274 |
|
|
d(17) xor d(15) xor d(12) xor d(11) xor d(10) xor d(9) xor d(8) xor
|
275 |
|
|
d(7) xor d(5) xor d(3) xor d(2);
|
276 |
|
|
|
277 |
|
|
crc_out(17) <=
|
278 |
|
|
c(0) xor c(1) xor c(3) xor c(6) xor c(7) xor c(9) xor
|
279 |
|
|
c(15) xor c(19) xor c(20) xor c(21) xor c(22) xor c(25) xor c(26) xor
|
280 |
|
|
c(30) xor c(31) xor d(63) xor d(62) xor d(58) xor d(57) xor d(54) xor
|
281 |
|
|
d(53) xor d(52) xor d(51) xor d(47) xor d(41) xor d(39) xor d(38) xor
|
282 |
|
|
d(35) xor d(33) xor d(32) xor d(28) xor d(25) xor d(24) xor d(22) xor
|
283 |
|
|
d(19) xor d(18) xor d(16) xor d(13) xor d(12) xor d(11) xor d(10) xor
|
284 |
|
|
d(9) xor d(8) xor d(6) xor d(4) xor d(3);
|
285 |
|
|
|
286 |
|
|
crc_out(18) <=
|
287 |
|
|
c(1) xor c(2) xor c(3) xor c(5) xor c(7) xor c(8) xor
|
288 |
|
|
c(11) xor c(13) xor c(14) xor c(15) xor c(19) xor c(20) xor c(23) xor
|
289 |
|
|
c(26) xor c(30) xor c(31) xor d(63) xor d(62) xor d(58) xor d(55) xor
|
290 |
|
|
d(52) xor d(51) xor d(47) xor d(46) xor d(45) xor d(43) xor d(40) xor
|
291 |
|
|
d(39) xor d(37) xor d(35) xor d(34) xor d(33) xor d(31) xor d(30) xor
|
292 |
|
|
d(29) xor d(28) xor d(27) xor d(21) xor d(20) xor d(19) xor d(18) xor
|
293 |
|
|
d(16) xor d(14) xor d(13) xor d(11) xor d(10) xor d(8) xor d(6) xor
|
294 |
|
|
d(0);
|
295 |
|
|
|
296 |
|
|
crc_out(19) <=
|
297 |
|
|
c(0) xor c(2) xor c(5) xor c(6) xor c(8) xor c(9) xor
|
298 |
|
|
c(10) xor c(11) xor c(12) xor c(13) xor c(19) xor c(20) xor c(22) xor
|
299 |
|
|
c(24) xor c(30) xor c(31) xor d(63) xor d(62) xor d(56) xor d(54) xor
|
300 |
|
|
d(52) xor d(51) xor d(45) xor d(44) xor d(43) xor d(42) xor d(41) xor
|
301 |
|
|
d(40) xor d(38) xor d(37) xor d(34) xor d(32) xor d(29) xor d(27) xor
|
302 |
|
|
d(26) xor d(25) xor d(23) xor d(22) xor d(20) xor d(19) xor d(18) xor
|
303 |
|
|
d(16) xor d(15) xor d(14) xor d(11) xor d(8) xor d(6) xor d(5) xor
|
304 |
|
|
d(4) xor d(1) xor d(0);
|
305 |
|
|
|
306 |
|
|
crc_out(20) <=
|
307 |
|
|
c(1) xor c(4) xor c(5) xor c(6) xor c(7) xor c(9) xor
|
308 |
|
|
c(12) xor c(15) xor c(16) xor c(19) xor c(20) xor c(22) xor c(23) xor
|
309 |
|
|
c(25) xor c(27) xor c(30) xor c(31) xor d(63) xor d(62) xor d(59) xor
|
310 |
|
|
d(57) xor d(55) xor d(54) xor d(52) xor d(51) xor d(48) xor d(47) xor
|
311 |
|
|
d(44) xor d(41) xor d(39) xor d(38) xor d(37) xor d(36) xor d(33) xor
|
312 |
|
|
d(31) xor d(25) xor d(24) xor d(20) xor d(19) xor d(18) xor d(15) xor
|
313 |
|
|
d(8) xor d(4) xor d(2) xor d(1) xor d(0);
|
314 |
|
|
|
315 |
|
|
crc_out(21) <=
|
316 |
|
|
c(0) xor c(2) xor c(5) xor c(6) xor c(7) xor c(8) xor
|
317 |
|
|
c(10) xor c(13) xor c(16) xor c(17) xor c(20) xor c(21) xor c(23) xor
|
318 |
|
|
c(24) xor c(26) xor c(28) xor c(31) xor d(63) xor d(60) xor d(58) xor
|
319 |
|
|
d(56) xor d(55) xor d(53) xor d(52) xor d(49) xor d(48) xor d(45) xor
|
320 |
|
|
d(42) xor d(40) xor d(39) xor d(38) xor d(37) xor d(34) xor d(32) xor
|
321 |
|
|
d(26) xor d(25) xor d(21) xor d(20) xor d(19) xor d(16) xor d(9) xor
|
322 |
|
|
d(5) xor d(3) xor d(2) xor d(1);
|
323 |
|
|
|
324 |
|
|
crc_out(22) <=
|
325 |
|
|
c(1) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor
|
326 |
|
|
c(9) xor c(10) xor c(13) xor c(15) xor c(16) xor c(17) xor c(18) xor
|
327 |
|
|
c(19) xor c(24) xor c(25) xor c(29) xor c(30) xor d(62) xor d(61) xor
|
328 |
|
|
d(57) xor d(56) xor d(51) xor d(50) xor d(49) xor d(48) xor d(47) xor
|
329 |
|
|
d(45) xor d(42) xor d(41) xor d(40) xor d(39) xor d(38) xor d(37) xor
|
330 |
|
|
d(36) xor d(33) xor d(31) xor d(30) xor d(28) xor d(25) xor d(23) xor
|
331 |
|
|
d(22) xor d(20) xor d(18) xor d(16) xor d(12) xor d(10) xor d(9) xor
|
332 |
|
|
d(8) xor d(7) xor d(5) xor d(3) xor d(2) xor d(0);
|
333 |
|
|
|
334 |
|
|
crc_out(23) <=
|
335 |
|
|
c(0) xor c(2) xor c(3) xor c(4) xor c(6) xor c(7) xor
|
336 |
|
|
c(8) xor c(9) xor c(13) xor c(15) xor c(17) xor c(18) xor c(20) xor
|
337 |
|
|
c(21) xor c(22) xor c(25) xor c(26) xor c(27) xor c(31) xor d(63) xor
|
338 |
|
|
d(59) xor d(58) xor d(57) xor d(54) xor d(53) xor d(52) xor d(50) xor
|
339 |
|
|
d(49) xor d(47) xor d(45) xor d(41) xor d(40) xor d(39) xor d(38) xor
|
340 |
|
|
d(36) xor d(35) xor d(34) xor d(32) xor d(30) xor d(29) xor d(28) xor
|
341 |
|
|
d(27) xor d(25) xor d(24) xor d(19) xor d(18) xor d(16) xor d(13) xor
|
342 |
|
|
d(12) xor d(11) xor d(10) xor d(7) xor d(5) xor d(3) xor d(1) xor
|
343 |
|
|
d(0);
|
344 |
|
|
|
345 |
|
|
crc_out(24) <=
|
346 |
|
|
c(1) xor c(3) xor c(4) xor c(5) xor c(7) xor c(8) xor
|
347 |
|
|
c(9) xor c(10) xor c(14) xor c(16) xor c(18) xor c(19) xor c(21) xor
|
348 |
|
|
c(22) xor c(23) xor c(26) xor c(27) xor c(28) xor d(60) xor d(59) xor
|
349 |
|
|
d(58) xor d(55) xor d(54) xor d(53) xor d(51) xor d(50) xor d(48) xor
|
350 |
|
|
d(46) xor d(42) xor d(41) xor d(40) xor d(39) xor d(37) xor d(36) xor
|
351 |
|
|
d(35) xor d(33) xor d(31) xor d(30) xor d(29) xor d(28) xor d(26) xor
|
352 |
|
|
d(25) xor d(20) xor d(19) xor d(17) xor d(14) xor d(13) xor d(12) xor
|
353 |
|
|
d(11) xor d(8) xor d(6) xor d(4) xor d(2) xor d(1);
|
354 |
|
|
|
355 |
|
|
crc_out(25) <=
|
356 |
|
|
c(0) xor c(2) xor c(3) xor c(6) xor c(8) xor c(9) xor
|
357 |
|
|
c(13) xor c(14) xor c(16) xor c(17) xor c(20) xor c(21) xor c(23) xor
|
358 |
|
|
c(24) xor c(28) xor c(29) xor c(30) xor d(62) xor d(61) xor d(60) xor
|
359 |
|
|
d(56) xor d(55) xor d(53) xor d(52) xor d(49) xor d(48) xor d(46) xor
|
360 |
|
|
d(45) xor d(41) xor d(40) xor d(38) xor d(35) xor d(34) xor d(32) xor
|
361 |
|
|
d(29) xor d(28) xor d(25) xor d(23) xor d(20) xor d(17) xor d(16) xor
|
362 |
|
|
d(15) xor d(14) xor d(13) xor d(8) xor d(6) xor d(4) xor d(3) xor
|
363 |
|
|
d(2) xor d(0);
|
364 |
|
|
|
365 |
|
|
crc_out(26) <=
|
366 |
|
|
c(1) xor c(5) xor c(7) xor c(9) xor c(11) xor c(13) xor
|
367 |
|
|
c(16) xor c(17) xor c(18) xor c(19) xor c(24) xor c(25) xor c(27) xor
|
368 |
|
|
c(29) xor c(31) xor d(63) xor d(61) xor d(59) xor d(57) xor d(56) xor
|
369 |
|
|
d(51) xor d(50) xor d(49) xor d(48) xor d(45) xor d(43) xor d(41) xor
|
370 |
|
|
d(39) xor d(37) xor d(33) xor d(31) xor d(29) xor d(28) xor d(27) xor
|
371 |
|
|
d(25) xor d(24) xor d(23) xor d(15) xor d(14) xor d(12) xor d(8) xor
|
372 |
|
|
d(6) xor d(3) xor d(1) xor d(0);
|
373 |
|
|
|
374 |
|
|
crc_out(27) <=
|
375 |
|
|
c(0) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor
|
376 |
|
|
c(8) xor c(11) xor c(12) xor c(13) xor c(15) xor c(16) xor c(17) xor
|
377 |
|
|
c(18) xor c(20) xor c(21) xor c(22) xor c(25) xor c(26) xor c(27) xor
|
378 |
|
|
c(28) xor d(60) xor d(59) xor d(58) xor d(57) xor d(54) xor d(53) xor
|
379 |
|
|
d(52) xor d(50) xor d(49) xor d(48) xor d(47) xor d(45) xor d(44) xor
|
380 |
|
|
d(43) xor d(40) xor d(38) xor d(37) xor d(36) xor d(35) xor d(34) xor
|
381 |
|
|
d(32) xor d(31) xor d(29) xor d(27) xor d(24) xor d(23) xor d(21) xor
|
382 |
|
|
d(18) xor d(17) xor d(15) xor d(13) xor d(12) xor d(8) xor d(6) xor
|
383 |
|
|
d(5) xor d(2) xor d(1) xor d(0);
|
384 |
|
|
|
385 |
|
|
crc_out(28) <=
|
386 |
|
|
c(0) xor c(1) xor c(6) xor c(7) xor c(9) xor c(10) xor
|
387 |
|
|
c(11) xor c(12) xor c(15) xor c(17) xor c(18) xor c(23) xor c(26) xor
|
388 |
|
|
c(28) xor c(29) xor c(30) xor d(62) xor d(61) xor d(60) xor d(58) xor
|
389 |
|
|
d(55) xor d(50) xor d(49) xor d(47) xor d(44) xor d(43) xor d(42) xor
|
390 |
|
|
d(41) xor d(39) xor d(38) xor d(33) xor d(32) xor d(31) xor d(27) xor
|
391 |
|
|
d(26) xor d(24) xor d(23) xor d(22) xor d(21) xor d(19) xor d(17) xor
|
392 |
|
|
d(14) xor d(13) xor d(12) xor d(8) xor d(5) xor d(4) xor d(3) xor
|
393 |
|
|
d(2) xor d(1) xor d(0);
|
394 |
|
|
|
395 |
|
|
crc_out(29) <=
|
396 |
|
|
c(0) xor c(1) xor c(2) xor c(7) xor c(8) xor c(10) xor
|
397 |
|
|
c(11) xor c(12) xor c(13) xor c(16) xor c(18) xor c(19) xor c(24) xor
|
398 |
|
|
c(27) xor c(29) xor c(30) xor c(31) xor d(63) xor d(62) xor d(61) xor
|
399 |
|
|
d(59) xor d(56) xor d(51) xor d(50) xor d(48) xor d(45) xor d(44) xor
|
400 |
|
|
d(43) xor d(42) xor d(40) xor d(39) xor d(34) xor d(33) xor d(32) xor
|
401 |
|
|
d(28) xor d(27) xor d(25) xor d(24) xor d(23) xor d(22) xor d(20) xor
|
402 |
|
|
d(18) xor d(15) xor d(14) xor d(13) xor d(9) xor d(6) xor d(5) xor
|
403 |
|
|
d(4) xor d(3) xor d(2) xor d(1);
|
404 |
|
|
|
405 |
|
|
crc_out(30) <=
|
406 |
|
|
c(1) xor c(2) xor c(3) xor c(8) xor c(9) xor c(11) xor
|
407 |
|
|
c(12) xor c(13) xor c(14) xor c(17) xor c(19) xor c(20) xor c(25) xor
|
408 |
|
|
c(28) xor c(30) xor c(31) xor d(63) xor d(62) xor d(60) xor d(57) xor
|
409 |
|
|
d(52) xor d(51) xor d(49) xor d(46) xor d(45) xor d(44) xor d(43) xor
|
410 |
|
|
d(41) xor d(40) xor d(35) xor d(34) xor d(33) xor d(29) xor d(28) xor
|
411 |
|
|
d(26) xor d(25) xor d(24) xor d(23) xor d(21) xor d(19) xor d(16) xor
|
412 |
|
|
d(15) xor d(14) xor d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor
|
413 |
|
|
d(3) xor d(2);
|
414 |
|
|
|
415 |
|
|
crc_out(31) <=
|
416 |
|
|
c(2) xor c(3) xor c(4) xor c(9) xor c(10) xor c(12) xor
|
417 |
|
|
c(13) xor c(14) xor c(15) xor c(18) xor c(20) xor c(21) xor c(26) xor
|
418 |
|
|
c(29) xor c(31) xor d(63) xor d(61) xor d(58) xor d(53) xor d(52) xor
|
419 |
|
|
d(50) xor d(47) xor d(46) xor d(45) xor d(44) xor d(42) xor d(41) xor
|
420 |
|
|
d(36) xor d(35) xor d(34) xor d(30) xor d(29) xor d(27) xor d(26) xor
|
421 |
|
|
d(25) xor d(24) xor d(22) xor d(20) xor d(17) xor d(16) xor d(15) xor
|
422 |
|
|
d(11) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3);
|
423 |
|
|
|
424 |
|
|
|
425 |
|
|
|
426 |
|
|
|
427 |
|
|
end architecture rtl ; -- of CRC
|
428 |
|
|
|