-- gpio_it_detect.vhd -- Eurobot 2004 : APB Team -- Auteur : Pierre-André Galmes -- detecteur d'interruption avec masque. -- Remarque : -- masque : si bit à 1 => on détecte l'interruption. -- si bit à 0 => on détecte pas l'interruption. --ATTENTION : On prendra soin de faire dureer le it_mask à 0 -- au moins 1 cycle, sinon, on aura une interruption au début !!! -- ICI j'ai encore des soucis... library ieee; use ieee.std_logic_1164.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_unsigned.all; use work.isa_const.all; use work.nono_const.all; entity gpio_it_detect is port ( clk : in std_logic; rst : in std_logic; data_in : in T_DATA; it_mask : in T_DATA; it_detected : out std_logic ); end entity; architecture RTL of gpio_it_detect is -- Constantes -- constant IT_ENABLE : std_logic := '1'; -- Signal interne signal state_p : T_DATA; -- etat passe begin -- process séquentiel process (rst, clk) begin if (rst = '1') then -- ne pas déclencher d'it après rst. state_p <= data_in; it_detected <= '0'; elsif (clk'event and clk = '1') then if (state_p /= data_in) then -- bit ayant droit de générer une interruption ? if (((data_in xor state_p) and it_mask) /= x"00") then -- on émet le signal d'interruption. it_detected <= '1'; end if; end if; state_p <= data_in; end if; end process; -- process (data_in) -- begin -- if (((data_in xor state_p) and it_mask) /= x"00") then -- on émet le signal d'interruption. -- it_detected <= '1'; -- end if; -- end process; end RTL;