eFEX firmware  1.7.3
ATLAS l1-calo - electron and tau feature extraction firmware for eFEX boards

Back to eFEX documentation
osum_crc9d32.vhd
1 library ieee;
2 use ieee.std_logic_1164.all;
3 use ieee.numeric_std.all;
4 
5 -- 1+x^1+x^3+x^4+x^5+x^6+x^7+x^9;
6 
7 entity osum_crc9d32 is
8  generic(
9  REVERSE_BIT_ORDER : boolean := false);
10  port(
11  clock : in std_logic;
12  crc_start : in std_logic;
13  d_in : in std_logic_vector(31 downto 0);
14  crc_out : out std_logic_vector(8 downto 0));
15 
16 end osum_crc9d32;
17 
18 architecture behavioral of osum_crc9d32 is
19 
20  signal d_in_s : std_logic_vector(31 downto 0) := (others => '0');
21  signal crc_r : std_logic_vector(8 downto 0) := (others => '0');
22  signal crc_s : std_logic_vector(8 downto 0) := (others => '0');
23 
24 begin
25 
26  crc_s <= B"1_1111_1111" when crc_start = '1' else crc_r;
27 
28  process(clock)
29  begin
30  if clock'event and clock = '1' then
31  crc_r(0) <= crc_s(0) xor crc_s(2) xor crc_s(3) xor crc_s(6) xor crc_s(8) xor d_in_s(0) xor d_in_s(2) xor d_in_s(3) xor d_in_s(5) xor d_in_s(6) xor d_in_s(7) xor d_in_s(8) xor d_in_s(9) xor d_in_s(10) xor d_in_s(11) xor d_in_s(15) xor d_in_s(18) xor d_in_s(19) xor d_in_s(20) xor d_in_s(21) xor d_in_s(22) xor d_in_s(23) xor d_in_s(25) xor d_in_s(26) xor d_in_s(29) xor d_in_s(31);
32  crc_r(1) <= crc_s(1) xor crc_s(2) xor crc_s(4) xor crc_s(6) xor crc_s(7) xor crc_s(8) xor d_in_s(0) xor d_in_s(1) xor d_in_s(2) xor d_in_s(4) xor d_in_s(5) xor d_in_s(12) xor d_in_s(15) xor d_in_s(16) xor d_in_s(18) xor d_in_s(24) xor d_in_s(25) xor d_in_s(27) xor d_in_s(29) xor d_in_s(30) xor d_in_s(31);
33  crc_r(2) <= crc_s(2) xor crc_s(3) xor crc_s(5) xor crc_s(7) xor crc_s(8) xor d_in_s(1) xor d_in_s(2) xor d_in_s(3) xor d_in_s(5) xor d_in_s(6) xor d_in_s(13) xor d_in_s(16) xor d_in_s(17) xor d_in_s(19) xor d_in_s(25) xor d_in_s(26) xor d_in_s(28) xor d_in_s(30) xor d_in_s(31);
34  crc_r(3) <= crc_s(0) xor crc_s(2) xor crc_s(4) xor d_in_s(0) xor d_in_s(4) xor d_in_s(5) xor d_in_s(8) xor d_in_s(9) xor d_in_s(10) xor d_in_s(11) xor d_in_s(14) xor d_in_s(15) xor d_in_s(17) xor d_in_s(19) xor d_in_s(21) xor d_in_s(22) xor d_in_s(23) xor d_in_s(25) xor d_in_s(27);
35  crc_r(4) <= crc_s(1) xor crc_s(2) xor crc_s(5) xor crc_s(6) xor crc_s(8) xor d_in_s(0) xor d_in_s(1) xor d_in_s(2) xor d_in_s(3) xor d_in_s(7) xor d_in_s(8) xor d_in_s(12) xor d_in_s(16) xor d_in_s(19) xor d_in_s(21) xor d_in_s(24) xor d_in_s(25) xor d_in_s(28) xor d_in_s(29) xor d_in_s(31);
36  crc_r(5) <= crc_s(0) xor crc_s(7) xor crc_s(8) xor d_in_s(0) xor d_in_s(1) xor d_in_s(4) xor d_in_s(5) xor d_in_s(6) xor d_in_s(7) xor d_in_s(10) xor d_in_s(11) xor d_in_s(13) xor d_in_s(15) xor d_in_s(17) xor d_in_s(18) xor d_in_s(19) xor d_in_s(21) xor d_in_s(23) xor d_in_s(30) xor d_in_s(31);
37  crc_r(6) <= crc_s(0) xor crc_s(1) xor crc_s(2) xor crc_s(3) xor crc_s(6) xor d_in_s(0) xor d_in_s(1) xor d_in_s(3) xor d_in_s(9) xor d_in_s(10) xor d_in_s(12) xor d_in_s(14) xor d_in_s(15) xor d_in_s(16) xor d_in_s(21) xor d_in_s(23) xor d_in_s(24) xor d_in_s(25) xor d_in_s(26) xor d_in_s(29);
38  crc_r(7) <= crc_s(0) xor crc_s(1) xor crc_s(4) xor crc_s(6) xor crc_s(7) xor crc_s(8) xor d_in_s(0) xor d_in_s(1) xor d_in_s(3) xor d_in_s(4) xor d_in_s(5) xor d_in_s(6) xor d_in_s(7) xor d_in_s(8) xor d_in_s(9) xor d_in_s(13) xor d_in_s(16) xor d_in_s(17) xor d_in_s(18) xor d_in_s(19) xor d_in_s(20) xor d_in_s(21) xor d_in_s(23) xor d_in_s(24) xor d_in_s(27) xor d_in_s(29) xor d_in_s(30) xor d_in_s(31);
39  crc_r(8) <= crc_s(1) xor crc_s(2) xor crc_s(5) xor crc_s(7) xor crc_s(8) xor d_in_s(1) xor d_in_s(2) xor d_in_s(4) xor d_in_s(5) xor d_in_s(6) xor d_in_s(7) xor d_in_s(8) xor d_in_s(9) xor d_in_s(10) xor d_in_s(14) xor d_in_s(17) xor d_in_s(18) xor d_in_s(19) xor d_in_s(20) xor d_in_s(21) xor d_in_s(22) xor d_in_s(24) xor d_in_s(25) xor d_in_s(28) xor d_in_s(30) xor d_in_s(31);
40 
41  end if;
42  end process;
43 
44  if_rbo_g :
45  if REVERSE_BIT_ORDER generate
46  din_for_g :
47  for i in 0 to 31 generate
48  d_in_s(i) <= d_in(31-i);
49  end generate;
50  crc_out_for_g :
51  for i in 0 to 8 generate
52  crc_out(i) <= crc_r(8-i);
53  end generate;
54  end generate;
55 
56  if_not_rbo_g :
57  if not REVERSE_BIT_ORDER generate
58  d_in_s <= d_in;
59  crc_out <= crc_r;
60  end generate;
61 
62 end architecture behavioral;