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

Subversion Repositories esoc

[/] [esoc/] [trunk/] [Sources/] [logixa/] [package_crc32_8b.vhd] - Blame information for rev 42

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 42 lmaarsen
--------------------------------------------------------------------------------
2
-- Object        : Package work.package_crc32_8b
3
-- Last modified : Thu Oct 10 12:37:58 2013.
4
--------------------------------------------------------------------------------
5
 
6
 
7
 
8
library ieee, std;
9
use ieee.std_logic_1164.all;
10
use std.textio.all;
11
use ieee.numeric_std.all;
12
---------------------------------------------------------------------------------------------------------------
13
-- Package declaration
14
---------------------------------------------------------------------------------------------------------------
15
package package_crc32_8b is
16
 
17
  -----------------------------------------------------------------------------------------
18
  -- functions to invert data/CRC (data: only applicable for the first 32 bits of a packet)
19
  -----------------------------------------------------------------------------------------
20
  function INVERT_CRC32_DATA
21
    (din : std_logic_vector(7 downto 0))
22
  return std_logic_vector;
23
 
24
  function INVERT_CRC32_RESULT
25
    (din : std_logic_vector(31 downto 0))
26
  return std_logic_vector;
27
 
28
  -------------------------------------------------------------------------
29
  -- functions to swap bit order due to bit order on physical interface
30
  -------------------------------------------------------------------------
31
  function SWAP_CRC32_DATA
32
    (din : std_logic_vector(7 downto 0))
33
  return std_logic_vector;
34
 
35
  function SWAP_CRC32_RESULT
36
    (din : std_logic_vector(31 downto 0))
37
  return std_logic_vector;
38
 
39
  -------------------------------------------------------------------------
40
  -- functions to calculate CRC on the fly
41
  -------------------------------------------------------------------------
42
  function CALC_CRC32
43
    (din : std_logic_vector(7 downto 0);
44
     cin : std_logic_vector(31 downto 0))
45
    return std_logic_vector;
46
end package_crc32_8b;
47
 
48
package body package_crc32_8b is
49
 
50
--=============================================================================================================
51
-- Process                : 
52
-- Description  : 
53
--=============================================================================================================
54
  function INVERT_CRC32_DATA
55
    (din : std_logic_vector(7 downto 0))
56
  return std_logic_vector is
57
  begin
58
    return not(din);
59
  end INVERT_CRC32_DATA;
60
 
61
--=============================================================================================================
62
-- Process                : 
63
-- Description  : 
64
--=============================================================================================================  
65
  function INVERT_CRC32_RESULT
66
    (din : std_logic_vector(31 downto 0))
67
  return std_logic_vector is
68
  begin
69
   return not(din);
70
  end INVERT_CRC32_RESULT;
71
 
72
--=============================================================================================================
73
-- Process                : 
74
-- Description  : 
75
--=============================================================================================================  
76
  function SWAP_CRC32_DATA
77
    (din : std_logic_vector(7 downto 0))
78
  return std_logic_vector is
79
 
80
  variable d   : std_logic_vector(7 downto 0);
81
 
82
  begin
83
    d(7) := din(0);
84
    d(6) := din(1);
85
    d(5) := din(2);
86
    d(4) := din(3);
87
    d(3) := din(4);
88
    d(2) := din(5);
89
    d(1) := din(6);
90
    d(0) := din(7);
91
 
92
    return d;
93
  end SWAP_CRC32_DATA;
94
 
95
--=============================================================================================================
96
-- Process                : 
97
-- Description  : 
98
--=============================================================================================================      
99
  function SWAP_CRC32_RESULT
100
    (din : std_logic_vector(31 downto 0))
101
  return std_logic_vector is
102
 
103
  variable d   : std_logic_vector(31 downto 0);
104
 
105
  begin
106
    for i in 3 downto 0 loop
107
      d(i*8+7) := din(i*8);
108
      d(i*8+6) := din(i*8+1);
109
      d(i*8+5) := din(i*8+2);
110
      d(i*8+4) := din(i*8+3);
111
      d(i*8+3) := din(i*8+4);
112
      d(i*8+2) := din(i*8+5);
113
      d(i*8+1) := din(i*8+6);
114
      d(i*8+0) := din(i*8+7);
115
    end loop;
116
 
117
    return d;
118
  end SWAP_CRC32_RESULT;
119
 
120
--=============================================================================================================
121
-- Process                : 
122
-- Description  : 
123
--=============================================================================================================     
124
    function CALC_CRC32
125
    (din : std_logic_vector(7 downto 0);
126
     cin :  std_logic_vector(31 downto 0))
127
    return std_logic_vector is
128
 
129
    variable d   : std_logic_vector(7 downto 0);
130
    variable c   : std_logic_vector(31 downto 0);
131
    variable cout: std_logic_vector(31 downto 0);
132
 
133
    begin
134
      d := din;
135
      c := cin;
136
 
137
      cout(0) := d(6) xor d(0) xor c(24) xor c(30);
138
      cout(1) := d(7) xor d(6) xor d(1) xor d(0) xor c(24) xor c(25) xor c(30) xor c(31);
139
      cout(2) := d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(24) xor c(25) xor c(26) xor c(30) xor c(31);
140
      cout(3) := d(7) xor d(3) xor d(2) xor d(1) xor c(25) xor c(26) xor c(27) xor c(31);
141
      cout(4) := d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(24) xor c(26) xor c(27) xor c(28) xor c(30);
142
      cout(5) := d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(24) xor c(25) xor c(27) xor c(28) xor c(29) xor c(30) xor c(31);
143
      cout(6) := d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31);
144
      cout(7) := d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(24) xor c(26) xor c(27) xor c(29) xor c(31);
145
      cout(8) := d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(24) xor c(25) xor c(27) xor c(28);
146
      cout(9) := d(5) xor d(4) xor d(2) xor d(1) xor c(1) xor c(25) xor c(26) xor c(28) xor c(29);
147
      cout(10) := d(5) xor d(3) xor d(2) xor d(0) xor c(2) xor c(24) xor c(26) xor c(27) xor c(29);
148
      cout(11) := d(4) xor d(3) xor d(1) xor d(0) xor c(3) xor c(24) xor c(25) xor c(27) xor c(28);
149
      cout(12) := d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(4) xor c(24) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30);
150
      cout(13) := d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(5) xor c(25) xor c(26) xor c(27) xor c(29) xor c(30) xor c(31);
151
      cout(14) := d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(6) xor c(26) xor c(27) xor c(28) xor c(30) xor c(31);
152
      cout(15) := d(7) xor d(5) xor d(4) xor d(3) xor c(7) xor c(27) xor c(28) xor c(29) xor c(31);
153
      cout(16) := d(5) xor d(4) xor d(0) xor c(8) xor c(24) xor c(28) xor c(29);
154
      cout(17) := d(6) xor d(5) xor d(1) xor c(9) xor c(25) xor c(29) xor c(30);
155
      cout(18) := d(7) xor d(6) xor d(2) xor c(10) xor c(26) xor c(30) xor c(31);
156
      cout(19) := d(7) xor d(3) xor c(11) xor c(27) xor c(31);
157
      cout(20) := d(4) xor c(12) xor c(28);
158
      cout(21) := d(5) xor c(13) xor c(29);
159
      cout(22) := d(0) xor c(14) xor c(24);
160
      cout(23) := d(6) xor d(1) xor d(0) xor c(15) xor c(24) xor c(25) xor c(30);
161
      cout(24) := d(7) xor d(2) xor d(1) xor c(16) xor c(25) xor c(26) xor c(31);
162
      cout(25) := d(3) xor d(2) xor c(17) xor c(26) xor c(27);
163
      cout(26) := d(6) xor d(4) xor d(3) xor d(0) xor c(18) xor c(24) xor c(27) xor c(28) xor c(30);
164
      cout(27) := d(7) xor d(5) xor d(4) xor d(1) xor c(19) xor c(25) xor c(28) xor c(29) xor c(31);
165
      cout(28) := d(6) xor d(5) xor d(2) xor c(20) xor c(26) xor c(29) xor c(30);
166
      cout(29) := d(7) xor d(6) xor d(3) xor c(21) xor c(27) xor c(30) xor c(31);
167
      cout(30) := d(7) xor d(4) xor c(22) xor c(28) xor c(31);
168
      cout(31) := d(5) xor c(23) xor c(29);
169
 
170
      return cout;
171
    end CALC_CRC32;
172
 
173
end package_crc32_8b;

powered by: WebSVN 2.1.0

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