PoC.comm.crcΒΆ

Computes the Cyclic Redundancy Check (CRC) for a data packet as remainder of the polynomial division of the message by the given generator polynomial (GEN).

The computation is unrolled so as to process an arbitrary number of message bits per step. The generated CRC is independent from the chosen processing width.

Entity Declaration:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
entity comm_crc is
  generic (
    GEN   : bit_vector;                                 -- Generator Polynomial
    BITS  : positive;                                   -- Number of Bits to be processed in parallel

    STARTUP_RMD : std_logic_vector  := "0";
    OUTPUT_REGS : boolean           := true
  );
  port (
    clk : in  std_logic;                                -- Clock

    set : in  std_logic;                                -- Parallel Preload of Remainder
    init : in std_logic_vector(abs(mssb_idx(GEN)-GEN'right)-1 downto 0);  --
    step : in std_logic;                                -- Process Input Data (MSB first)
    din : in  std_logic_vector(BITS-1 downto 0);        --

    rmd : out std_logic_vector(abs(mssb_idx(GEN)-GEN'right)-1 downto 0);  -- Remainder
    zero : out std_logic                                -- Remainder is Zero
  );
end entity comm_crc;