add ram dual and single port
[vhdl_digital_base_blocks.git] / crc16_data32.vhd
blob1bbc32efc9f2d6bfd94f2ffd18863f2c5a126dbd
1 -------------------------------------------------------------------------------
2 -- CRC module for data(31:0)
3 -- lfsr(15:0)=1+x^2+x^15+x^16;
4 -------------------------------------------------------------------------------
5 library ieee;
6 use ieee.std_logic_1164.all;
8 entity crc16_data32 is
9 port (
10 rst : in std_logic;
11 clk : in std_logic;
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)
16 end crc16_data32;
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);
21 begin
22 crc_out <= lfsr_q;
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
43 if (rst = '1') then
44 lfsr_q <= b"1111111111111111";
45 elsif (clk'EVENT and clk = '1') then
46 if (crc_en = '1') then
47 lfsr_q <= lfsr_c;
48 end if;
49 end if;
50 end process;
52 end architecture rtl;