ROD firmware  1.0.5
ATLAS l1-calo - ROD_eFEX and ROD_jFEX firmware for the L1Calo ROD board

Back to ROD documentation
dual_input_fifo_4k.vhd
1 ----------------------------------------------------------------------------------
2 -- Company:
3 -- Engineer:
4 --
5 -- Create Date: 10.01.2022 16:30:58
6 -- Design Name:
7 -- Module Name: input_buffer_4k - RTL
8 -- Project Name:
9 -- Target Devices:
10 -- Tool Versions:
11 -- Description:
12 --
13 -- Dependencies:
14 --
15 -- Revision:
16 -- Revision 0.01 - File Created
17 -- Additional Comments:
18 --
19 ----------------------------------------------------------------------------------
20 
21 
22 library IEEE;
23 use IEEE.STD_LOGIC_1164.ALL;
24 
25 -- Uncomment the following library declaration if using
26 -- arithmetic functions with Signed or Unsigned values
27 --use IEEE.NUMERIC_STD.ALL;
28 
29 -- Uncomment the following library declaration if instantiating
30 -- any Xilinx leaf cells in this code.
31 --library UNISIM;
32 --use UNISIM.VComponents.all;
33 
35  Port (
36  m_aclk : IN STD_LOGIC;
37  s_aclk : IN STD_LOGIC;
38  s_aresetn : IN STD_LOGIC;
39  s_axis_tvalid : IN STD_LOGIC;
40  s_axis_tready : OUT STD_LOGIC;
41  s_axis_tdata : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
42  s_axis_tlast : IN STD_LOGIC;
43  s_axis_tuser : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
44  m_axis_tvalid : OUT STD_LOGIC;
45  m_axis_tready : IN STD_LOGIC;
46  m_axis_tdata : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
47  m_axis_tlast : OUT STD_LOGIC;
48  m_axis_tuser : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
49  axis_wr_data_count : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
50  axis_rd_data_count : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
51 
52 
53  );
54 
55 
56 
57 
59 
60 architecture RTL of dual_input_fifo_4k is
61 
62 
63 
64 COMPONENT aurora_in_fifo_512
65  PORT (
66  wr_rst_busy : OUT STD_LOGIC;
67  rd_rst_busy : OUT STD_LOGIC;
68  m_aclk : IN STD_LOGIC;
69  s_aclk : IN STD_LOGIC;
70  s_aresetn : IN STD_LOGIC;
71  s_axis_tvalid : IN STD_LOGIC;
72  s_axis_tready : OUT STD_LOGIC;
73  s_axis_tdata : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
74  s_axis_tlast : IN STD_LOGIC;
75  s_axis_tuser : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
76  m_axis_tvalid : OUT STD_LOGIC;
77  m_axis_tready : IN STD_LOGIC;
78  m_axis_tdata : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
79  m_axis_tlast : OUT STD_LOGIC;
80  m_axis_tuser : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
81  axis_wr_data_count : OUT STD_LOGIC_VECTOR(9 DOWNTO 0);
82  axis_rd_data_count : OUT STD_LOGIC_VECTOR(9 DOWNTO 0)
83  );
84 END COMPONENT;
85 
86 COMPONENT processor_in_fifo_4k
87  PORT (
88  wr_rst_busy : OUT STD_LOGIC;
89  rd_rst_busy : OUT STD_LOGIC;
90  s_aclk : IN STD_LOGIC;
91  s_aresetn : IN STD_LOGIC;
92  s_axis_tvalid : IN STD_LOGIC;
93  s_axis_tready : OUT STD_LOGIC;
94  s_axis_tdata : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
95  s_axis_tlast : IN STD_LOGIC;
96  s_axis_tuser : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
97  m_axis_tvalid : OUT STD_LOGIC;
98  m_axis_tready : IN STD_LOGIC;
99  m_axis_tdata : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
100  m_axis_tlast : OUT STD_LOGIC;
101  m_axis_tuser : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
102  axis_data_count : OUT STD_LOGIC_VECTOR(12 DOWNTO 0)
103  );
104 END COMPONENT;
105 
106 signal mid_fifo_tvalid : std_logic;
107 signal mid_fifo_tready : std_logic;
108 signal mid_fifo_tdata : std_logic_vector(63 downto 0);
109 signal mid_fifo_tlast : std_logic;
110 signal mid_fifo_tuser : std_logic_vector(3 downto 0);
111 signal axis_data_count_i : std_logic_vector(31 downto 0);
112 signal axis_data_count : std_logic_vector(31 downto 0);
113 begin
114 
115 
116 clk_cross_fifo : aurora_in_fifo_512
117 PORT MAP (
118  wr_rst_busy => open,
119  rd_rst_busy => open,
120  m_aclk => m_aclk,
121  s_aclk => s_aclk,
122  s_aresetn => s_aresetn,
123  s_axis_tvalid => s_axis_tvalid,
124  s_axis_tready => s_axis_tready,
125  s_axis_tdata => s_axis_tdata,
126  s_axis_tlast => s_axis_tlast,
127  s_axis_tuser => s_axis_tuser,
128 -- s_axis_tuser(0) => first_cyc,
129 -- s_axis_tuser(1) => pipe_m_axis_tlast,
130 -- s_axis_tuser(2) => s_crc_error,
131 -- s_axis_tuser(3) => pipe_m_comb_error,
132  m_axis_tvalid => mid_fifo_tvalid,
133  m_axis_tready => mid_fifo_tready,
134  m_axis_tdata => mid_fifo_tdata,
135  m_axis_tlast => mid_fifo_tlast,
136  m_axis_tuser => mid_fifo_tuser,
137  axis_wr_data_count => open,
138  axis_rd_data_count => open
139 );
140 
141 input_fifo : processor_in_fifo_4k
142 PORT MAP (
143  wr_rst_busy => open,
144  rd_rst_busy => open,
145  s_aclk => m_aclk,
146  s_aresetn => s_aresetn,
147  s_axis_tvalid => mid_fifo_tvalid,
148  s_axis_tready => mid_fifo_tready,
149  s_axis_tdata => mid_fifo_tdata,
150  s_axis_tlast => mid_fifo_tlast,
151  s_axis_tuser => mid_fifo_tuser,
152  m_axis_tvalid => m_axis_tvalid,
153  m_axis_tready => m_axis_tready,
154  m_axis_tdata => m_axis_tdata,
155  m_axis_tlast => m_axis_tlast,
156  m_axis_tuser => m_axis_tuser,
157  axis_data_count => axis_data_count_i(12 downto 0)
158 );
159 axis_data_count <= x"0000" & "000" & axis_data_count_i(12 downto 0);
160 
161 axis_rd_data_count <= axis_data_count;
162 axis_wr_data_count <= axis_data_count;
163 
164 end RTL;