--==================================================================== -- IPBus access to a TCDS2 TTS2 stream. -- -- Corresponds to version 0 of the TTS2 protocol. --==================================================================== library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use work.ipbus.all; use work.ipbus_reg_types.all; use work.constants_tcds2.all; use work.tcds2_streams_pkg.all; entity tcds2_tts2_spy is port ( -- The IPBus interface. clk_ipb : in std_logic; rst_ipb : in std_logic; ipb_in : in ipb_wbus; ipb_out : out ipb_rbus; -- The incoming TTS2 stream. stream_i : in tcds2_tts2 ); end tcds2_tts2_spy; architecture v0 of tcds2_tts2_spy is signal stat : ipb_reg_v(C_TCDS2_TTS2_NUM_VALUES - 1 downto 0); begin csr : entity work.ipbus_ctrlreg_v generic map ( N_CTRL => 0, N_STAT => stat'length ) port map ( clk => clk_ipb, reset => rst_ipb, ipbus_in => ipb_in, ipbus_out => ipb_out, q => open, d => stat ); -- The actual TTS values. assign_values : for i in 0 to C_TCDS2_TTS2_NUM_VALUES - 1 generate stat(i) <= std_logic_vector(to_unsigned(stream_i(i), C_IPBUS_WORD_WIDTH)); end generate; -- -- Left-overs. -- assign_reserved_0 : for i in 0 to ((C_TCDS2_TTS2_RESERVED_WIDTH / C_IPBUS_WORD_WIDTH) - 1) generate -- stat(C_TCDS2_TTS2_NUM_VALUES + i) <= stream_i.reserved(((i + 1) * C_IPBUS_WORD_WIDTH - 1) downto (i * C_IPBUS_WORD_WIDTH)); -- end generate; -- assign_reserved_1 : if ((C_TCDS2_TTS2_RESERVED_WIDTH rem C_IPBUS_WORD_WIDTH) /= 0) generate -- stat(C_TCDS2_TTS2_NUM_VALUES + C_TCDS2_TTS2_RESERVED_WIDTH / C_IPBUS_WORD_WIDTH) <= -- std_logic_vector(resize(unsigned(stream_i.reserved(C_TCDS2_TTS2_RESERVED_WIDTH - 1 downto (C_TCDS2_TTS2_RESERVED_WIDTH / C_IPBUS_WORD_WIDTH) * C_IPBUS_WORD_WIDTH)), C_IPBUS_WORD_WIDTH)); -- end generate; end v0; --====================================================================