11 use IEEE.STD_LOGIC_1164.
all;
12 use ieee.numeric_std.
all;
16 use ipbus_lib.ipbus.
all;
23 generic (DISABLE : std_logic := '0');
25 clk_ipb : in std_logic;
28 ipb_out : out ipb_rbus;
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)
42 component AlgoInputRAM
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);
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)
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);
65 signal ipb_out_int : std_logic_vector(31 downto 0);
66 signal q_int : std_logic_vector(127 downto 0);
69 IPBUS_RAM :
process(clk_ipb)
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';
75 ipbus_write(0) <= '0';
77 ack2 <= ipb_in.ipb_strobe and (not ack2) and (not ack);
83 ipb_out.ipb_ack <= ack;
84 ipb_out.ipb_err <= '0';
85 write_enable(0) <= we;
87 ALGO_INPUT_RAM : AlgoInputRAM
90 ena => ipb_in.ipb_strobe,
92 addra => ipb_in.ipb_addr
(5 downto 0),
93 dina => ipb_in.ipb_wdata,
103 q <= q_int when DISABLE = '0' else (others => '0');
104 ipb_out.ipb_rdata <= ipb_out_int when DISABLE = '0' else x"d15ab1ed";