-- -- -- Encode (in needed) and map output signals -- -- -- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; library utils; use utils.pkg_types.all; library hsio; use hsio.pkg_core_globals.all; entity outsigs_enc_map is port( invert_mux_i : in std_logic; reg_outsigs_i : in std_logic_vector(15 downto 0); rawsigs_i : in std_logic_vector(15 downto 0); --l1r_i : in std_logic; l1_auto_i : in std_logic; l0_trig_all_i : in std_logic; com_genc_i : in std_logic; --trg80_all_o : out std_logic; --trg_all_o : out std_logic; trg_all_mask_o : out std_logic_vector(15 downto 0); --rawsigs_trg_all_o : out std_logic; outsigs_o : out std_logic_vector(15 downto 0); strobe40 : in std_logic; rst : in std_logic; clk : in std_logic ); -- Declarations end outsigs_enc_map; architecture rtl of outsigs_enc_map is signal stt_mode : std_logic_vector(2 downto 0); signal stb_mode : std_logic_vector(2 downto 0); signal id0_mode : std_logic_vector(2 downto 0); signal id1_mode : std_logic_vector(2 downto 0); signal stt_trg : std_logic; signal stb_trg : std_logic; signal id0_trg : std_logic; signal id1_trg : std_logic; signal stt_trg_mask : std_logic_vector(15 downto 0); signal stb_trg_mask : std_logic_vector(15 downto 0); signal id0_trg_mask : std_logic_vector(15 downto 0); signal id1_trg_mask : std_logic_vector(15 downto 0); signal a13sigs : std_logic_vector(15 downto 0); signal hccsigs : std_logic_vector(15 downto 0); begin id1_mode <= reg_outsigs_i(14 downto 12); id0_mode <= reg_outsigs_i(10 downto 8); stb_mode <= reg_outsigs_i(6 downto 4); stt_mode <= reg_outsigs_i(2 downto 0); -- ABC 130 signals mux ------------------------------------------------------------------------------ prc_encoder : process (clk) begin if rising_edge(clk) then if (strobe40 = invert_mux_i) then -- BCO falling a13sigs(OS_ID1_L1R) <= rawsigs_i(RS_ID1_R3); --L1R3S a13sigs(OS_ID1_COM) <= rawsigs_i(RS_IDC_L0) or l0_trig_all_i; --COML0 a13sigs(OS_ID0_L1R) <= rawsigs_i(RS_ID0_R3); --L1R3S a13sigs(OS_ID0_COM) <= rawsigs_i(RS_IDC_L0) or l0_trig_all_i; --COML0 a13sigs(OS_STB_L1R) <= rawsigs_i(RS_STB_R3); --L1R3S a13sigs(OS_STB_COM) <= rawsigs_i(RS_STB_L0) or l0_trig_all_i; --COML0 a13sigs(OS_STT_L1R) <= rawsigs_i(RS_STT_R3); --L1R3S a13sigs(OS_STT_COM) <= rawsigs_i(RS_STT_L0) or l0_trig_all_i; --COML0 else -- BCO rising ----------------------------- a13sigs(OS_ID1_L1R) <= rawsigs_i(RS_IDC_L1) or l1_auto_i; --L1R3S a13sigs(OS_ID1_COM) <= rawsigs_i(RS_ID1_COM) or com_genc_i; --COML0 a13sigs(OS_ID0_L1R) <= rawsigs_i(RS_IDC_L1) or l1_auto_i; --L1R3S a13sigs(OS_ID0_COM) <= rawsigs_i(RS_ID0_COM) or com_genc_i; --COML0 a13sigs(OS_STB_L1R) <= rawsigs_i(RS_STB_L1) or l1_auto_i; --L1R3S a13sigs(OS_STB_COM) <= rawsigs_i(RS_STB_COM) or com_genc_i; --COML0 a13sigs(OS_STT_L1R) <= rawsigs_i(RS_STT_L1) or l1_auto_i; --L1R3S a13sigs(OS_STT_COM) <= rawsigs_i(RS_STT_COM) or com_genc_i; --COML0 end if; end if; end process; -- HCC signals mux ------------------------------------------------------------------------------ prc_hcc_mux : process (clk) begin if rising_edge(clk) then if (strobe40 = invert_mux_i) then -- BCO falling hccsigs(OS_ID1_L1R) <= rawsigs_i(RS_ID1_R3); --L1R3S hccsigs(OS_ID1_COM) <= rawsigs_i(RS_IDC_L0) or l0_trig_all_i; --COML0 hccsigs(OS_ID0_L1R) <= rawsigs_i(RS_ID0_R3); --L1R3S hccsigs(OS_ID0_COM) <= rawsigs_i(RS_IDC_L0) or l0_trig_all_i; --COML0 hccsigs(OS_STB_L1R) <= rawsigs_i(RS_STB_R3); --L1R3S hccsigs(OS_STB_COM) <= rawsigs_i(RS_STB_L0) or l0_trig_all_i; --COML0 hccsigs(OS_STT_L1R) <= rawsigs_i(RS_STT_R3); --L1R3S hccsigs(OS_STT_COM) <= rawsigs_i(RS_STT_L0) or l0_trig_all_i; --COML0 else -- BCO rising ----------------------------- hccsigs(OS_ID1_L1R) <= not(rawsigs_i(RS_IDC_L1) or l1_auto_i); --L1R3S hccsigs(OS_ID1_COM) <= not(rawsigs_i(RS_ID1_COM) or com_genc_i); --COML0 hccsigs(OS_ID0_L1R) <= not(rawsigs_i(RS_IDC_L1) or l1_auto_i); --L1R3S hccsigs(OS_ID0_COM) <= not(rawsigs_i(RS_ID0_COM) or com_genc_i); --COML0 hccsigs(OS_STB_L1R) <= not(rawsigs_i(RS_STB_L1) or l1_auto_i); --L1R3S hccsigs(OS_STB_COM) <= not(rawsigs_i(RS_STB_COM) or com_genc_i); --COML0 hccsigs(OS_STT_L1R) <= not(rawsigs_i(RS_STT_L1) or l1_auto_i); --L1R3S hccsigs(OS_STT_COM) <= not(rawsigs_i(RS_STT_COM) or com_genc_i); --COML0 end if; end if; end process; prc_mapper : process(hccsigs, a13sigs, rawsigs_i, id1_mode, id0_mode, stb_mode, stt_mode, l0_trig_all_i ) begin -- IDC1 --------------------------- case id1_mode is when C_OS_HCC => id1_trg <= l0_trig_all_i; id1_trg_mask <= BIT_MASK(RS_IDC_L0); outsigs_o(OS_ID1_RST) <= '0'; outsigs_o(OS_ID1_COM) <= hccsigs(RS_ID1_COM); outsigs_o(OS_ID1_L1R) <= hccsigs(RS_IDC_L1); when C_OS_ABC130 => id1_trg <= l0_trig_all_i; id1_trg_mask <= BIT_MASK(RS_IDC_L0); outsigs_o(OS_ID1_RST) <= '0'; outsigs_o(OS_ID1_COM) <= a13sigs(OS_ID1_COM); outsigs_o(OS_ID1_L1R) <= a13sigs(OS_ID1_L1R); when C_OS_ABCN => id1_trg <= l0_trig_all_i; id1_trg_mask <= BIT_MASK(RS_IDC_L1); outsigs_o(OS_ID1_RST) <= rawsigs_i(RS_ID1_R3); outsigs_o(OS_ID1_L1R) <= rawsigs_i(RS_IDC_L1); -- or l1r_i; outsigs_o(OS_ID1_COM) <= rawsigs_i(RS_ID1_COM); when others => -- C_OS_OFF id1_trg <= '0'; id1_trg_mask <= (others => '0'); outsigs_o(OS_ID1_L1R) <= '0'; outsigs_o(OS_ID1_COM) <= '0'; end case; -- IDC0 --------------------------- case id0_mode is when C_OS_HCC => id0_trg <= l0_trig_all_i; id0_trg_mask <= BIT_MASK(RS_IDC_L0); outsigs_o(OS_ID0_RST) <= '0'; outsigs_o(OS_ID0_COM) <= hccsigs(RS_ID0_COM); outsigs_o(OS_ID0_L1R) <= hccsigs(RS_IDC_L1); when C_OS_ABC130 => id0_trg <= l0_trig_all_i; id0_trg_mask <= BIT_MASK(RS_IDC_L0); outsigs_o(OS_ID0_RST) <= '0'; outsigs_o(OS_ID0_COM) <= a13sigs(OS_ID0_COM); outsigs_o(OS_ID0_L1R) <= a13sigs(OS_ID0_L1R); when C_OS_ABCN => id0_trg <= l0_trig_all_i; id0_trg_mask <= BIT_MASK(RS_IDC_L1); outsigs_o(OS_ID0_RST) <= rawsigs_i(RS_ID0_R3); outsigs_o(OS_ID0_L1R) <= rawsigs_i(RS_IDC_L1); outsigs_o(OS_ID0_COM) <= rawsigs_i(RS_ID0_COM); when others => -- C_OS_OFF id0_trg <= '0'; id0_trg_mask <= (others => '0'); outsigs_o(OS_ID0_L1R) <= '0'; outsigs_o(OS_ID0_COM) <= '0'; end case; -- Stave Bottom --------------------------- case stb_mode is when C_OS_HCC => stb_trg <= l0_trig_all_i; stb_trg_mask <= BIT_MASK(RS_STB_L0); outsigs_o(OS_STB_L1R) <= hccsigs(RS_STB_L1); --L1R3E outsigs_o(OS_STB_COM) <= hccsigs(RS_STB_COM); --COML0E when C_OS_ABC130 => stb_trg <= l0_trig_all_i; stb_trg_mask <= BIT_MASK(RS_STB_L0); outsigs_o(OS_STB_L1R) <= a13sigs(OS_STB_L1R); --L1R3S outsigs_o(OS_STB_COM) <= a13sigs(OS_STB_COM); --COML0 when C_OS_ABCN => stb_trg <= l0_trig_all_i; stb_trg_mask <= BIT_MASK(RS_STB_L1); outsigs_o(OS_STB_L1R) <= rawsigs_i(RS_STB_L1); outsigs_o(OS_STB_COM) <= rawsigs_i(RS_STB_COM); when others => -- C_OS_OFF stb_trg <= '0'; stb_trg_mask <= (others => '0'); outsigs_o(OS_STB_L1R) <= '0'; outsigs_o(OS_STB_COM) <= '0'; end case; -- Stave Top --------------------------- case stt_mode is when C_OS_HCC => stt_trg <= l0_trig_all_i; stt_trg_mask <= BIT_MASK(RS_STT_L0); outsigs_o(OS_STT_L1R) <= hccsigs(RS_STT_L1); --L1R3E outsigs_o(OS_STT_COM) <= hccsigs(RS_STT_COM); --COML0E when C_OS_ABC130 => stt_trg <= l0_trig_all_i; stt_trg_mask <= BIT_MASK(RS_STT_L0); outsigs_o(OS_STT_L1R) <= a13sigs(OS_STT_L1R); --L1R3S outsigs_o(OS_STT_COM) <= a13sigs(OS_STT_COM); --COML0 when C_OS_ABCN => stt_trg <= l0_trig_all_i; stt_trg_mask <= BIT_MASK(RS_STT_L1); outsigs_o(OS_STT_L1R) <= rawsigs_i(OS_STT_L1R); outsigs_o(OS_STT_COM) <= rawsigs_i(OS_STT_COM); when others => -- C_OS_OFF stt_trg <= '0'; stt_trg_mask <= (others => '0'); outsigs_o(OS_STT_L1R) <= '0'; outsigs_o(OS_STT_COM) <= '0'; end case; -- NOISE outputs outsigs_o(OS_STT_NOS) <= rawsigs_i(RS_STT_NOS); outsigs_o(OS_STB_NOS) <= rawsigs_i(RS_STB_NOS); ----------------------------------------------------------------------- end process; --trg_all_o <= stt_trg or stb_trg or id1_trg or id0_trg; trg_all_mask_o <= stt_trg_mask or stb_trg_mask or id1_trg_mask or id0_trg_mask; --rawsigs_trg_all_o <= stt_rawsigs_trg or stb_rawsigs_trg or id1_rawsigs_trg or id0_rawsigs_trg; --trg80_all_o <= ((stt_trg or stb_trg or id1_trg or id0_trg) and not(strobe40)) when rising_edge(clk); end rtl;