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

Subversion Repositories spi_slave

[/] [spi_slave/] [trunk/] [pcore/] [opb_spi_slave_v1_00_a/] [hdl/] [vhdl/] [crc_gen.vhd] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 20 dkoethe
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.std_logic_unsigned.all;
4
use ieee.std_logic_arith.all;
5
 
6
library work;
7
use work.PCK_CRC32_D32.all;
8
-- java -jar  jacksum.jar -a crc:32,04C11DB7,FFFFFFFF,false,false,00000000
9
-- -q 000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F
10
-- -x 
11
-- Result: eb99fa90        64
12
 
13
use work.PCK_CRC8_D8.all;
14
-- java -jar  jacksum.jar -a crc:8,07,FF,false,false,00
15
-- -q 000102030405060708090A0B0C0D0E0F
16
-- -x 
17
-- Result: B8              16
18
 
19
entity crc_gen is
20
  generic (
21
    C_SR_WIDTH      : integer                                 := 32;
22
    crc_start_value : std_logic_vector(31 downto 0) := (others => '1'));
23
  port (
24
    clk          : in  std_logic;
25
    crc_clear    : in  std_logic;
26
    crc_en       : in  std_logic;
27
    crc_data_in  : in  std_logic_vector(C_SR_WIDTH-1 downto 0);
28
    crc_data_out : out std_logic_vector(C_SR_WIDTH-1 downto 0));
29
end crc_gen;
30
 
31
architecture rtl of crc_gen is
32
  signal crc_data_int : std_logic_vector(C_SR_WIDTH-1 downto 0);
33 29 dkoethe
  signal crc_data_in_int : std_logic_vector(C_SR_WIDTH-1 downto 0);
34 20 dkoethe
 
35
begin  -- crc_gen
36
  process(clk)
37
  begin
38
    if rising_edge(clk) then
39
      if (crc_clear = '1') then
40
        crc_data_int <= crc_start_value(C_SR_WIDTH-1 downto 0);
41
      elsif (crc_en = '1') then
42
        case C_SR_WIDTH is
43
          when 32 =>
44 29 dkoethe
            crc_data_int <= nextCRC32_D32(crc_data_in_int, crc_data_int);
45 20 dkoethe
          when 8 =>
46 29 dkoethe
            crc_data_int <= nextCRC8_D8(crc_data_in_int, crc_data_int);
47 20 dkoethe
          when others =>
48
            -- no crc calculation
49
            crc_data_int <= (others => '0');
50
        end case;
51
      end if;
52
    end if;
53
  end process;
54
 
55 29 dkoethe
  process(crc_data_int)
56
    begin
57
      for i  in 0 to 7 loop
58
          crc_data_out(24+7-i) <= not crc_data_int(i);
59
          crc_data_out(16+7-i) <= not crc_data_int(8+i);
60
          crc_data_out(8+7-i) <= not crc_data_int(16+i);
61
          crc_data_out(7-i) <= not crc_data_int(24+i);
62
      end loop;  -- i 
63
    end process;
64
 
65
  process(crc_data_in)
66
    begin
67
      for i  in 0 to 7 loop
68
          crc_data_in_int(7-i) <= crc_data_in(i);
69
          crc_data_in_int(8+7-i) <= crc_data_in(8+i);
70
          crc_data_in_int(16+7-i) <= crc_data_in(16+i);
71
          crc_data_in_int(24+7-i) <= crc_data_in(24+i);
72
      end loop;  -- i 
73
    end process;
74
 
75
 
76 20 dkoethe
end rtl;

powered by: WebSVN 2.1.0

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