Forum Discussion
Altera_Forum
Honored Contributor
13 years agoHere is the working version. Following kaz advice.
function detect_overflow(Tmp, A, B : in signed(7 downto 0); op : in std_logic_vector(1 downto 0)) return std_logic is
variable Tmp_xtnd : signed(8 downto 0);
variable A_xtnd : signed(8 downto 0);
variable B_xtnd : signed(8 downto 0);
begin
Tmp_xtnd := (Tmp(7) & Tmp); --resize(Tmp, 9);
A_xtnd := (A(7) & A); --resize(A, 9);
B_xtnd := (B(7) & B); --resize(A, 9);
case op is
when "10" =>
Tmp_xtnd := A_xtnd + B_xtnd;
if (Tmp_xtnd(8) /= Tmp_xtnd(7) ) then
return '1';
else
return '0';
end if;
when "11" =>
Tmp_xtnd := A_xtnd - B_xtnd;
if (Tmp_xtnd(8) /= Tmp_xtnd(7)) then
return '1';
else
return '0';
end if;
when others =>
return '0';
end case;
end detect_overflow;