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

Subversion Repositories xmatchpro

[/] [xmatchpro/] [trunk/] [xmw4-comdec/] [src/] [crc_unit.vhd] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 8 eejlny
--This library is free software; you can redistribute it and/or
2
--modify it under the terms of the GNU Lesser General Public
3
--License as published by the Free Software Foundation; either
4
--version 2.1 of the License, or (at your option) any later version.
5
 
6
--This library is distributed in the hope that it will be useful,
7
--but WITHOUT ANY WARRANTY; without even the implied warranty of
8
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
9
--Lesser General Public License for more details.
10
 
11
--You should have received a copy of the GNU Lesser General Public
12
--License along with this library; if not, write to the Free Software
13
--Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
14
 
15
-- e_mail : j.l.nunez-yanez@byacom.co.uk
16
 
17
---------------------------------
18
--  ENTITY       = CRC_UNIT    --
19
--  version      = 1.0         --
20
--  last update  = 30/08/01    --
21
--  author       = Jose Nunez  --
22
---------------------------------
23
 
24
 
25
-- FUNCTION
26
-- calculates a 16 bit X25 CRC code
27
-- Purpose: VHDL package containing a synthesizable CRC function
28
--   * polynomial: (0 5 12 16)
29
--   * data width: 32
30
 
31
--  PIN LIST
32
--  DIN   = input data
33
--  ENABLE = activate CRC calculation
34
--  CRC_OUT = CRC output
35
 
36
library ieee;
37
use ieee.std_logic_1164.all;
38
 
39
entity CRC_UNIT is
40
 
41
port(DIN : in bit_vector(31 downto 0);
42
         ENABLE : in bit;
43
         CLK : in bit;
44
         RESET : in bit;
45
         CLEAR : in bit;
46
         CRC_OUT : out bit_vector(15 downto 0)
47
);
48
 
49
end CRC_UNIT;
50
 
51
architecture CRC1 of CRC_UNIT is
52
 
53
signal CRC_AUX : bit_vector(15 downto 0);
54
signal CRC_NEW : bit_vector(15 downto 0);
55
 
56
begin
57
 
58
 
59
FLIP_FLOPS : process (CLK,CLEAR)
60
begin
61
 
62
if (CLEAR = '0') then
63
        CRC_AUX <= x"0000";
64
elsif ((CLK'event) and (CLK = '1')) then
65
        if (RESET = '0') then
66
                CRC_AUX <= x"0000";
67
        elsif (ENABLE = '1') then
68
                CRC_AUX <= CRC_NEW;
69
        else
70
                CRC_AUX <= CRC_AUX;
71
        end if;
72
end if;
73
 
74
end process FLIP_FLOPS;
75
 
76
 
77
 
78
NEXT_CRC : process(DIN, CRC_AUX)
79
 
80
variable D: bit_vector(31 downto 0);
81
variable C: bit_vector(15 downto 0);
82
variable NewCRC : bit_vector(15 downto 0);
83
 
84
begin
85
 
86
    D := DIN;
87
    C := CRC_AUX;
88
 
89
    NewCRC(0) := D(28) xor D(27) xor D(26) xor D(22) xor D(20) xor D(19) xor
90
                 D(12) xor D(11) xor D(8) xor D(4) xor D(0) xor C(3) xor
91
                 C(4) xor C(6) xor C(10) xor C(11) xor C(12);
92
    NewCRC(1) := D(29) xor D(28) xor D(27) xor D(23) xor D(21) xor D(20) xor
93
                 D(13) xor D(12) xor D(9) xor D(5) xor D(1) xor C(4) xor
94
                 C(5) xor C(7) xor C(11) xor C(12) xor C(13);
95
    NewCRC(2) := D(30) xor D(29) xor D(28) xor D(24) xor D(22) xor D(21) xor
96
                 D(14) xor D(13) xor D(10) xor D(6) xor D(2) xor C(5) xor
97
                 C(6) xor C(8) xor C(12) xor C(13) xor C(14);
98
    NewCRC(3) := D(31) xor D(30) xor D(29) xor D(25) xor D(23) xor D(22) xor
99
                 D(15) xor D(14) xor D(11) xor D(7) xor D(3) xor C(6) xor
100
                 C(7) xor C(9) xor C(13) xor C(14) xor C(15);
101
    NewCRC(4) := D(31) xor D(30) xor D(26) xor D(24) xor D(23) xor D(16) xor
102
                 D(15) xor D(12) xor D(8) xor D(4) xor C(0) xor C(7) xor
103
                 C(8) xor C(10) xor C(14) xor C(15);
104
    NewCRC(5) := D(31) xor D(28) xor D(26) xor D(25) xor D(24) xor D(22) xor
105
                 D(20) xor D(19) xor D(17) xor D(16) xor D(13) xor D(12) xor
106
                 D(11) xor D(9) xor D(8) xor D(5) xor D(4) xor D(0) xor
107
                 C(0) xor C(1) xor C(3) xor C(4) xor C(6) xor C(8) xor
108
                 C(9) xor C(10) xor C(12) xor C(15);
109
    NewCRC(6) := D(29) xor D(27) xor D(26) xor D(25) xor D(23) xor D(21) xor
110
                 D(20) xor D(18) xor D(17) xor D(14) xor D(13) xor D(12) xor
111
                 D(10) xor D(9) xor D(6) xor D(5) xor D(1) xor C(1) xor
112
                 C(2) xor C(4) xor C(5) xor C(7) xor C(9) xor C(10) xor
113
                 C(11) xor C(13);
114
    NewCRC(7) := D(30) xor D(28) xor D(27) xor D(26) xor D(24) xor D(22) xor
115
                 D(21) xor D(19) xor D(18) xor D(15) xor D(14) xor D(13) xor
116
                 D(11) xor D(10) xor D(7) xor D(6) xor D(2) xor C(2) xor
117
                 C(3) xor C(5) xor C(6) xor C(8) xor C(10) xor C(11) xor
118
                 C(12) xor C(14);
119
    NewCRC(8) := D(31) xor D(29) xor D(28) xor D(27) xor D(25) xor D(23) xor
120
                 D(22) xor D(20) xor D(19) xor D(16) xor D(15) xor D(14) xor
121
                 D(12) xor D(11) xor D(8) xor D(7) xor D(3) xor C(0) xor
122
                 C(3) xor C(4) xor C(6) xor C(7) xor C(9) xor C(11) xor
123
                 C(12) xor C(13) xor C(15);
124
    NewCRC(9) := D(30) xor D(29) xor D(28) xor D(26) xor D(24) xor D(23) xor
125
                 D(21) xor D(20) xor D(17) xor D(16) xor D(15) xor D(13) xor
126
                 D(12) xor D(9) xor D(8) xor D(4) xor C(0) xor C(1) xor
127
                 C(4) xor C(5) xor C(7) xor C(8) xor C(10) xor C(12) xor
128
                 C(13) xor C(14);
129
    NewCRC(10) := D(31) xor D(30) xor D(29) xor D(27) xor D(25) xor D(24) xor
130
                  D(22) xor D(21) xor D(18) xor D(17) xor D(16) xor D(14) xor
131
                  D(13) xor D(10) xor D(9) xor D(5) xor C(0) xor C(1) xor
132
                  C(2) xor C(5) xor C(6) xor C(8) xor C(9) xor C(11) xor
133
                  C(13) xor C(14) xor C(15);
134
    NewCRC(11) := D(31) xor D(30) xor D(28) xor D(26) xor D(25) xor D(23) xor
135
                  D(22) xor D(19) xor D(18) xor D(17) xor D(15) xor D(14) xor
136
                  D(11) xor D(10) xor D(6) xor C(1) xor C(2) xor C(3) xor
137
                  C(6) xor C(7) xor C(9) xor C(10) xor C(12) xor C(14) xor
138
                  C(15);
139
    NewCRC(12) := D(31) xor D(29) xor D(28) xor D(24) xor D(23) xor D(22) xor
140
                  D(18) xor D(16) xor D(15) xor D(8) xor D(7) xor D(4) xor
141
                  D(0) xor C(0) xor C(2) xor C(6) xor C(7) xor C(8) xor
142
                  C(12) xor C(13) xor C(15);
143
    NewCRC(13) := D(30) xor D(29) xor D(25) xor D(24) xor D(23) xor D(19) xor
144
                  D(17) xor D(16) xor D(9) xor D(8) xor D(5) xor D(1) xor
145
                  C(0) xor C(1) xor C(3) xor C(7) xor C(8) xor C(9) xor
146
                  C(13) xor C(14);
147
    NewCRC(14) := D(31) xor D(30) xor D(26) xor D(25) xor D(24) xor D(20) xor
148
                  D(18) xor D(17) xor D(10) xor D(9) xor D(6) xor D(2) xor
149
                  C(1) xor C(2) xor C(4) xor C(8) xor C(9) xor C(10) xor
150
                  C(14) xor C(15);
151
    NewCRC(15) := D(31) xor D(27) xor D(26) xor D(25) xor D(21) xor D(19) xor
152
                  D(18) xor D(11) xor D(10) xor D(7) xor D(3) xor C(2) xor
153
                  C(3) xor C(5) xor C(9) xor C(10) xor C(11) xor C(15);
154
 
155
CRC_NEW <= NewCRC;
156
 
157
end process NEXT_CRC;
158
 
159
CRC_OUT <= CRC_AUX;
160
 
161
end CRC1;
162
 
163
 

powered by: WebSVN 2.1.0

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