OpenCores
URL https://opencores.org/ocsvn/fast-crc/fast-crc/trunk

Subversion Repositories fast-crc

[/] [fast-crc/] [trunk/] [vhdl/] [CRC_top.vhd] - Blame information for rev 5

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 trueno
-------------------------------------------------------------------------------
2
--
3
-------------------------------------------------------------------------------
4
 
5
library IEEE;
6
use IEEE.std_logic_1164.all;
7
 
8
entity CRC_top is
9
 
10
  port (
11
    phi1    : in  std_logic;
12
                                        -- We will use the two phase discipline
13
                                        -- which we don't generate.
14
    phi2    : in  std_logic;
15
    reset   : in  std_logic;            -- #RESET
16
    input   : in  std_logic_vector(15 downto 0);
17
                                        -- The serial/parallel conversion has
18
                                        -- been made somewhere else
19
    fcs_out : out std_logic_vector(31 downto 0));
20
    -- "inout" because we have to read this value (feedback to the multiplier)
21
 
22
end CRC_top;
23
 
24
architecture structural of CRC_top is
25
 
26
  component input_wait
27
    port (
28
      reset  : in  std_logic;
29
      phi1   : in  std_logic;
30
      phi2   : in  std_logic;
31
      input  : in  std_logic_vector(15 downto 0);
32
      output : out std_logic_vector(15 downto 0));
33
  end component;
34
 
35
  component gf_multiplier
36
    port (
37
      reset      : in  std_logic;
38
      phi1       : in  std_logic;
39
      phi2       : in  std_logic;
40
      input      : in  std_logic_vector(31 downto 0);
41
      output_fcs : out std_logic_vector(15 downto 0);     -- LS Word
42
      -- "inout" since we have to read this value (feedback)
43
      output_xor : out std_logic_vector(15 downto 0));    -- MS Word
44
  end component;
45
 
46
  component big_xor
47
    port (
48
      reset       : in  std_logic;
49
      phi2        : in  std_logic;
50
      input_input : in  std_logic_vector(15 downto 0);
51
      fcs_input   : in  std_logic_vector(15 downto 0);
52
      gf_input    : in  std_logic_vector(15 downto 0);
53
      output      : out std_logic_vector(31 downto 0));
54
  end component;
55
 
56
  component ff_reset is
57
    port (
58
      phi2         : in  std_logic;
59
      reset_glitch : in  std_logic;
60
      reset_clean  : out std_logic);
61
  end component;
62
 
63
  signal wait_intermediate : std_logic_vector(15 downto 0);
64
  -- Connects the input_wait component with the big_xor one
65
  signal fcs_intermediate : std_logic_vector(15 downto 0);
66
  -- Connects the multiplier with the output register
67
  signal xor_intermediate : std_logic_vector(15 downto 0);
68
  -- Connects the multiplier with the final XOR
69
  signal fcs_out_read : std_logic_vector (31 downto 0);
70
  -- This signal will avoid the use of "inout" ports
71
  signal reset_intermediate : std_logic;
72
  -- Clean reset to feed the whole circuit
73
 
74
begin
75
 
76
  ff_reset_1 : ff_reset port map (phi2 => phi2, reset_glitch => reset,
77
                                  reset_clean => reset_intermediate);
78
 
79
  input_wait_1 : input_wait port map (reset => reset_intermediate, phi1 => phi1,
80
                                      phi2 => phi2, input  => input,
81
                                      output => wait_intermediate);
82
 
83
  gf_multiplier_1 : gf_multiplier port map (reset => reset_intermediate,
84
                                            phi1 => phi1, phi2=> phi2,
85
                                            input => fcs_out_read,
86
                                            output_xor => xor_intermediate,
87
                                            output_fcs => fcs_intermediate);
88
 
89
  big_xor_1 : big_xor port map (reset => reset_intermediate, phi2 => phi2,
90
                                input_input => wait_intermediate,
91
                                fcs_input   => fcs_intermediate,
92
                                gf_input    => xor_intermediate,
93
                                output      => fcs_out_read);
94
 
95
  fcs_out <= fcs_out_read;
96
 
97
end structural;
98
 
99
configuration cfg_CRC_top_structural of CRC_top is
100
 
101
  for structural
102
    for input_wait_1 : input_wait use entity work.input_wait(structural); end for;
103
    for gf_multiplier_1 : gf_multiplier use entity work.gf_multiplier(structural); end for;
104
    for big_xor_1 : big_xor use entity work.big_xor(behavior); end for;
105
    for ff_reset_1 : ff_reset use entity work.ff_reset(behavior); end for;
106
  end for;
107
 
108
end cfg_CRC_top_structural;

powered by: WebSVN 2.1.0

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