It looks like a limitation in Altera Quartus II, since the outer case
may be changed to if
as shown below, and then it can run through synthesis:
p0 : process(ps, CLR, CLK) is
begin
if std_logic_vector'(ps, CLR) = "00" then
temp_Q <= '1';
temp_Qcompl <= '1';
elsif std_logic_vector'(ps, CLR) = "01" then
temp_Q <= '1';
temp_Qcompl <= '0';
elsif std_logic_vector'(ps, CLR) = "10" then
temp_Q <= '0';
temp_Qcompl <= '1';
else -- Preset = 1 , Clear = 1
if rising_edge (CLK) then -- Clock turns from 0 -> 1
case std_logic_vector'(J, K) is
when "11" =>
temp_Q <= not temp_Q;
temp_Qcompl <= not temp_Qcompl;
when "10" =>
temp_Q <= '1';
temp_Qcompl <= '0';
when "01" =>
temp_Q <= '0';
temp_Qcompl <= '1';
when others =>
null;
end case;
end if;
end if;
end process p0;
If the specific target device does not allow flip flops with both asynchronous set and reset, then a warning is issued.