library ieee; use ieee.std_logic_1164.all; entity impure_ex is port ( clk : in std_logic; arg : in std_logic; res : out std_logic ); end impure_ex; architecture rtl of impure_ex is -- An impure function called from a combinatorial process with "all" -- sensitivity triggers an exception. impure function foo return std_logic is begin return arg; end function foo; signal ns : std_logic; begin --comb_process : process(res) -- this works comb_process : process(all) begin ns <= res XOR foo; end process; process(clk) begin if rising_edge(clk) then res <= ns; end if; end process; end rtl;