LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; LIBRARY lpp; USE lpp.lpp_ad_conv.ALL; USE lpp.iir_filter.ALL; USE lpp.FILTERcfg.ALL; USE lpp.lpp_memory.ALL; --USE lpp.lpp_waveform_pkg.ALL; USE lpp.lpp_dma_pkg.ALL; --USE lpp.lpp_top_lfr_pkg.ALL; --USE lpp.lpp_lfr_pkg.ALL; USE lpp.general_purpose.ALL; LIBRARY techmap; USE techmap.gencomp.ALL; LIBRARY grlib; USE grlib.amba.ALL; USE grlib.stdlib.ALL; USE grlib.devices.ALL; USE GRLIB.DMA2AHB_Package.ALL; ENTITY DMA_SubSystem_Arbiter IS PORT ( clk : IN STD_LOGIC; rstn : IN STD_LOGIC; run : IN STD_LOGIC; -- data_burst_valid : IN STD_LOGIC_VECTOR(4 DOWNTO 0); data_burst_valid_grant : OUT STD_LOGIC_VECTOR(4 DOWNTO 0) ); END DMA_SubSystem_Arbiter; ARCHITECTURE beh OF DMA_SubSystem_Arbiter IS SIGNAL data_burst_valid_r : STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL dma_rr_grant_s : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL dma_rr_grant_ms : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL dma_rr_valid_ms : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN -- beh ----------------------------------------------------------------------------- -- REG the burst valid signal ----------------------------------------------------------------------------- PROCESS (clk, rstn) BEGIN -- PROCESS IF rstn = '0' THEN -- asynchronous reset (active low) data_burst_valid_r <= (OTHERS => '0'); ELSIF clk'event AND clk = '1' THEN -- rising clock edge IF run = '1' THEN data_burst_valid_r <= data_burst_valid; ELSE data_burst_valid_r <= (OTHERS => '0'); END IF; END IF; END PROCESS; ----------------------------------------------------------------------------- -- ARBITER Between all the "WAVEFORM_PICKER" channel ----------------------------------------------------------------------------- RR_Arbiter_4_1 : RR_Arbiter_4 PORT MAP ( clk => clk, rstn => rstn, in_valid => data_burst_valid_r(3 DOWNTO 0), out_grant => dma_rr_grant_s); dma_rr_valid_ms(0) <= data_burst_valid_r(4);--data_ms_valid OR data_ms_valid_burst; dma_rr_valid_ms(1) <= '0' WHEN dma_rr_grant_s = "0000" ELSE '1'; dma_rr_valid_ms(2) <= '0'; dma_rr_valid_ms(3) <= '0'; ----------------------------------------------------------------------------- -- ARBITER Between all the "WAVEFORM_PICKER" and "SPECTRAL MATRIX" ----------------------------------------------------------------------------- RR_Arbiter_4_2 : RR_Arbiter_4 PORT MAP ( clk => clk, rstn => rstn, in_valid => dma_rr_valid_ms, out_grant => dma_rr_grant_ms); data_burst_valid_grant <= dma_rr_grant_ms(0) & "0000" WHEN dma_rr_grant_ms(0) = '1' ELSE '0' & dma_rr_grant_s; END beh;