1 | -------------------------------------------------------------------------------
|
2 | -- Link zum Generieren des Files: http://outputlogic.com/?page_id=321
|
3 | -------------------------------------------------------------------------------
|
4 | -------------------------------------------------------------------------------
|
5 | -- Ports
|
6 | -- data_in : Paralleler Eingang der Daten
|
7 | -- crc_en : Startsignal
|
8 | -- rst : Reset
|
9 | -- clk : CLK-Signal
|
10 | -- crc_out : Paralleler Ausgang an dem die berechnete CRC bereitgestellt wird
|
11 |
|
12 |
|
13 | -------------------------------------------------------------------------------
|
14 | -- Copyright (C) 2009 OutputLogic.com
|
15 | -- This source file may be used and distributed without restriction
|
16 | -- provided that this copyright statement is not removed from the file
|
17 | -- and that any derivative work contains the original copyright notice
|
18 | -- and the associated disclaimer.
|
19 | --
|
20 | -- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
|
21 | -- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
22 | -- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
23 | -------------------------------------------------------------------------------
|
24 | -- CRC module for data(7:0)
|
25 | -- lfsr(7:0)=1+x^2+x^3+x^4+x^8;
|
26 | -------------------------------------------------------------------------------
|
27 | library ieee;
|
28 | use ieee.std_logic_1164.all;
|
29 |
|
30 | entity crc is
|
31 | port ( data_in : in std_logic_vector (7 downto 0);
|
32 | crc_en , rst, clk : in std_logic;
|
33 | crc_out : out std_logic_vector (7 downto 0));
|
34 | end crc;
|
35 |
|
36 | architecture imp_crc of crc is
|
37 | signal lfsr_q: std_logic_vector (7 downto 0);
|
38 | signal lfsr_c: std_logic_vector (7 downto 0);
|
39 | begin
|
40 | crc_out <= lfsr_q;
|
41 |
|
42 | lfsr_c(0) <= lfsr_q(0) xor lfsr_q(4) xor lfsr_q(5) xor lfsr_q(6) xor data_in(0) xor data_in(4) xor data_in(5) xor data_in(6);
|
43 | lfsr_c(1) <= lfsr_q(1) xor lfsr_q(5) xor lfsr_q(6) xor lfsr_q(7) xor data_in(1) xor data_in(5) xor data_in(6) xor data_in(7);
|
44 | lfsr_c(2) <= lfsr_q(0) xor lfsr_q(2) xor lfsr_q(4) xor lfsr_q(5) xor lfsr_q(7) xor data_in(0) xor data_in(2) xor data_in(4) xor data_in(5) xor data_in(7);
|
45 | lfsr_c(3) <= lfsr_q(0) xor lfsr_q(1) xor lfsr_q(3) xor lfsr_q(4) xor data_in(0) xor data_in(1) xor data_in(3) xor data_in(4);
|
46 | lfsr_c(4) <= lfsr_q(0) xor lfsr_q(1) xor lfsr_q(2) xor lfsr_q(6) xor data_in(0) xor data_in(1) xor data_in(2) xor data_in(6);
|
47 | lfsr_c(5) <= lfsr_q(1) xor lfsr_q(2) xor lfsr_q(3) xor lfsr_q(7) xor data_in(1) xor data_in(2) xor data_in(3) xor data_in(7);
|
48 | lfsr_c(6) <= lfsr_q(2) xor lfsr_q(3) xor lfsr_q(4) xor data_in(2) xor data_in(3) xor data_in(4);
|
49 | lfsr_c(7) <= lfsr_q(3) xor lfsr_q(4) xor lfsr_q(5) xor data_in(3) xor data_in(4) xor data_in(5);
|
50 |
|
51 |
|
52 | process (clk,rst) begin
|
53 | if (rst = '1') then
|
54 | lfsr_q <= b"11111111";
|
55 | elsif (clk'EVENT and clk = '1') then
|
56 | if (crc_en = '1') then
|
57 | lfsr_q <= lfsr_c;
|
58 | end if;
|
59 | end if;
|
60 | end process;
|
61 | end architecture imp_crc;
|