OpenCores
URL https://opencores.org/ocsvn/core1990_interlaken/core1990_interlaken/trunk

Subversion Repositories core1990_interlaken

[/] [core1990_interlaken/] [trunk/] [gateware/] [sources/] [interlaken/] [crc/] [crc-24.vhd] - Blame information for rev 11

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.