library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; Entity D_FILTER is port( CLK,NRST: in std_logic; S_IN: in std_logic_vector(1 downto 0); DFIR: in std_logic; S_OUT: out std_logic_vector(1 downto 0) ); end D_FILTER; architecture D_FILTER_ARCH of D_FILTER is signal countA: std_logic_vector(1 downto 0); signal countB: std_logic_vector(1 downto 0); signal DS_OUT: std_logic_vector(1 downto 0); begin process(CLK, NRST) begin if NRST='0' then countA <= (others=>'0'); elsif CLK='1' and CLK'event then if S_IN(0) ='1' and countA /= 2 then countA <= countA + 1; elsif S_IN(0) ='0' and countA /= 0 then countA <= countA - 1; end if; end if; end process; process(CLK) begin --if DFIR = '1' then -- S_OUT <= S_IN; --else if CLK='1' and CLK'event then if countA=2 then DS_OUT(0) <= '1'; elsif countA = 0 then DS_OUT(0) <= '0'; end if; end if; --end if; end process; process(DFIR, S_IN, DS_OUT) begin if DFIR = '1' then S_OUT(0) <= S_IN(0); else S_OUT(0) <= DS_OUT(0); end if; end process; process(CLK, NRST) begin if NRST='0' then countB <= (others=>'0'); elsif CLK='1' and CLK'event then if S_IN(1) ='1' and countB /= 2 then countB <= countB + 1; elsif S_IN(1) ='0' and countB /= 0 then countB <= countB - 1; end if; end if; end process; process(CLK) begin --if DFIR = '1' then -- S_OUT <= S_IN; --else if CLK='1' and CLK'event then if countB=2 then DS_OUT(1) <= '1'; elsif countB = 0 then DS_OUT(1) <= '0'; end if; end if; --end if; end process; process(DFIR, S_IN, DS_OUT) begin if DFIR = '1' then S_OUT(1) <= S_IN(1); else S_OUT(1) <= DS_OUT(1); end if; end process; end D_FILTER_ARCH;