1 -------------------------------------------------------------------------------
2 -- CRC module for data(31:0)
3 -- lfsr(15:0)=1+x^2+x^15+x^16;
4 -------------------------------------------------------------------------------
6 use ieee.std_logic_1164.
all;
12 crc_en
: in std_logic;
13 data_in
: in std_logic_vector (31 downto 0);
14 crc_out
: out std_logic_vector (15 downto 0)
18 architecture rtl
of crc16_data32
is
19 signal lfsr_q
: std_logic_vector (15 downto 0);
20 signal lfsr_c
: std_logic_vector (15 downto 0);
24 lfsr_c
(0) <= lfsr_q
(0) xor lfsr_q
(1) xor lfsr_q
(2) xor lfsr_q
(3) xor lfsr_q
(4) xor lfsr_q
(5) xor lfsr_q
(6) xor lfsr_q
(7) xor lfsr_q
(8) xor lfsr_q
(9) xor lfsr_q
(10) xor lfsr_q
(11) xor lfsr_q
(14) xor lfsr_q
(15) xor data_in
(0) xor data_in
(1) xor data_in
(2) xor data_in
(3) xor data_in
(4) xor data_in
(5) xor data_in
(6) xor data_in
(7) xor data_in
(8) xor data_in
(9) xor data_in
(10) xor data_in
(11) xor data_in
(12) xor data_in
(13) xor data_in
(15) xor data_in
(16) xor data_in
(17) xor data_in
(18) xor data_in
(19) xor data_in
(20) xor data_in
(21) xor data_in
(22) xor data_in
(23) xor data_in
(24) xor data_in
(25) xor data_in
(26) xor data_in
(27) xor data_in
(30) xor data_in
(31);
25 lfsr_c
(1) <= lfsr_q
(0) xor lfsr_q
(1) xor lfsr_q
(2) xor lfsr_q
(3) xor lfsr_q
(4) xor lfsr_q
(5) xor lfsr_q
(6) xor lfsr_q
(7) xor lfsr_q
(8) xor lfsr_q
(9) xor lfsr_q
(10) xor lfsr_q
(11) xor lfsr_q
(12) xor lfsr_q
(15) xor data_in
(1) xor data_in
(2) xor data_in
(3) xor data_in
(4) xor data_in
(5) xor data_in
(6) xor data_in
(7) xor data_in
(8) xor data_in
(9) xor data_in
(10) xor data_in
(11) xor data_in
(12) xor data_in
(13) xor data_in
(14) xor data_in
(16) xor data_in
(17) xor data_in
(18) xor data_in
(19) xor data_in
(20) xor data_in
(21) xor data_in
(22) xor data_in
(23) xor data_in
(24) xor data_in
(25) xor data_in
(26) xor data_in
(27) xor data_in
(28) xor data_in
(31);
26 lfsr_c
(2) <= lfsr_q
(0) xor lfsr_q
(12) xor lfsr_q
(13) xor lfsr_q
(14) xor lfsr_q
(15) xor data_in
(0) xor data_in
(1) xor data_in
(14) xor data_in
(16) xor data_in
(28) xor data_in
(29) xor data_in
(30) xor data_in
(31);
27 lfsr_c
(3) <= lfsr_q
(1) xor lfsr_q
(13) xor lfsr_q
(14) xor lfsr_q
(15) xor data_in
(1) xor data_in
(2) xor data_in
(15) xor data_in
(17) xor data_in
(29) xor data_in
(30) xor data_in
(31);
28 lfsr_c
(4) <= lfsr_q
(0) xor lfsr_q
(2) xor lfsr_q
(14) xor lfsr_q
(15) xor data_in
(2) xor data_in
(3) xor data_in
(16) xor data_in
(18) xor data_in
(30) xor data_in
(31);
29 lfsr_c
(5) <= lfsr_q
(1) xor lfsr_q
(3) xor lfsr_q
(15) xor data_in
(3) xor data_in
(4) xor data_in
(17) xor data_in
(19) xor data_in
(31);
30 lfsr_c
(6) <= lfsr_q
(2) xor lfsr_q
(4) xor data_in
(4) xor data_in
(5) xor data_in
(18) xor data_in
(20);
31 lfsr_c
(7) <= lfsr_q
(3) xor lfsr_q
(5) xor data_in
(5) xor data_in
(6) xor data_in
(19) xor data_in
(21);
32 lfsr_c
(8) <= lfsr_q
(4) xor lfsr_q
(6) xor data_in
(6) xor data_in
(7) xor data_in
(20) xor data_in
(22);
33 lfsr_c
(9) <= lfsr_q
(5) xor lfsr_q
(7) xor data_in
(7) xor data_in
(8) xor data_in
(21) xor data_in
(23);
34 lfsr_c
(10) <= lfsr_q
(6) xor lfsr_q
(8) xor data_in
(8) xor data_in
(9) xor data_in
(22) xor data_in
(24);
35 lfsr_c
(11) <= lfsr_q
(7) xor lfsr_q
(9) xor data_in
(9) xor data_in
(10) xor data_in
(23) xor data_in
(25);
36 lfsr_c
(12) <= lfsr_q
(8) xor lfsr_q
(10) xor data_in
(10) xor data_in
(11) xor data_in
(24) xor data_in
(26);
37 lfsr_c
(13) <= lfsr_q
(9) xor lfsr_q
(11) xor data_in
(11) xor data_in
(12) xor data_in
(25) xor data_in
(27);
38 lfsr_c
(14) <= lfsr_q
(10) xor lfsr_q
(12) xor data_in
(12) xor data_in
(13) xor data_in
(26) xor data_in
(28);
39 lfsr_c
(15) <= lfsr_q
(0) xor lfsr_q
(1) xor lfsr_q
(2) xor lfsr_q
(3) xor lfsr_q
(4) xor lfsr_q
(5) xor lfsr_q
(6) xor lfsr_q
(7) xor lfsr_q
(8) xor lfsr_q
(9) xor lfsr_q
(10) xor lfsr_q
(13) xor lfsr_q
(14) xor lfsr_q
(15) xor data_in
(0) xor data_in
(1) xor data_in
(2) xor data_in
(3) xor data_in
(4) xor data_in
(5) xor data_in
(6) xor data_in
(7) xor data_in
(8) xor data_in
(9) xor data_in
(10) xor data_in
(11) xor data_in
(12) xor data_in
(14) xor data_in
(15) xor data_in
(16) xor data_in
(17) xor data_in
(18) xor data_in
(19) xor data_in
(20) xor data_in
(21) xor data_in
(22) xor data_in
(23) xor data_in
(24) xor data_in
(25) xor data_in
(26) xor data_in
(29) xor data_in
(30) xor data_in
(31);
42 process (clk
,rst
) begin
44 lfsr_q
<= b"
1111111111111111"
;
45 elsif (clk
'EVENT and clk
= '1') then
46 if (crc_en
= '1') then