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

Back to eFEX documentation
ipbus_inputRAM_wrapper.vhd
Go to the documentation of this file.
1 -------------------------------------------------------
7 -------------------------------------------------------
8 
10 library IEEE;
11 use IEEE.STD_LOGIC_1164.all;
12 use ieee.numeric_std.all;
13 
15 library ipbus_lib;
16 use ipbus_lib.ipbus.all;
17 
19 use work.DataTypes.all;
20 
23  generic (DISABLE : std_logic := '0');
24  port(
25  clk_ipb : in std_logic;
26  rst : in std_logic;
27  ipb_in : in ipb_wbus;
28  ipb_out : out ipb_rbus;
29  rclk : in std_logic;
30 
31  din : in std_logic_vector(127 downto 0);
32  we : in std_logic := '0';
33  q : out std_logic_vector(127 downto 0);
34  addr : in std_logic_vector(3 downto 0) --contains 16 BCs
35  );
36 
38 
40 architecture rtl of ipbus_inputRAM_wrapper is
41 
42  component AlgoInputRAM
43  port (
44  clka : in std_logic;
45  ena : in std_logic;
46  wea : in std_logic_vector(0 downto 0);
47  addra : in std_logic_vector(5 downto 0);
48  dina : in std_logic_vector(31 downto 0);
49  douta : out std_logic_vector(31 downto 0);
50  clkb : in std_logic;
51  enb : in std_logic;
52  web : in std_logic_vector(0 downto 0);
53  addrb : in std_logic_vector(3 downto 0);
54  dinb : in std_logic_vector(127 downto 0);
55  doutb : out std_logic_vector(127 downto 0)
56  );
57  end component;
58 
59  --ipbus signals
60  signal ack, ack2 : std_logic;
61  signal ipbus_write : std_logic_vector(0 downto 0);
62  signal write_enable : std_logic_vector(0 downto 0);
63 
64  --signal for disabling the RAM
65  signal ipb_out_int : std_logic_vector(31 downto 0);
66  signal q_int : std_logic_vector(127 downto 0);
67 
68 begin
69  IPBUS_RAM : process(clk_ipb)
70  begin
71  if rising_edge(clk_ipb) then
72  if ipb_in.ipb_strobe = '1' and ipb_in.ipb_write = '1' then
73  ipbus_write(0) <= '1';
74  else
75  ipbus_write(0) <= '0';
76  end if;
77  ack2 <= ipb_in.ipb_strobe and (not ack2) and (not ack);
78  ack <= ack2;
79 
80  end if;
81  end process;
82 
83  ipb_out.ipb_ack <= ack;
84  ipb_out.ipb_err <= '0';
85  write_enable(0) <= we;
86 
87  ALGO_INPUT_RAM : AlgoInputRAM
88  port map (
89  clka => clk_ipb,
90  ena => ipb_in.ipb_strobe,
91  wea => ipbus_write,
92  addra => ipb_in.ipb_addr(5 downto 0),
93  dina => ipb_in.ipb_wdata,
94  douta => ipb_out_int, --ipb_out.ipb_rdata,
95  clkb => rclk,
96  enb => '1',
97  web => write_enable,
98  addrb => addr,
99  dinb => din,
100  doutb => q_int
101  );
102 
103  q <= q_int when DISABLE = '0' else (others => '0');
104  ipb_out.ipb_rdata <= ipb_out_int when DISABLE = '0' else x"d15ab1ed";
105 
106 end rtl;
Wrapper for the input spy/playback RAM.
Wrapper for the input spy/playback RAM.