I want to design an ALU with signed and unsigned addition.
The problem is the overflow:
SIGNAL Sum : STD_LOGIC_VECTOR( 8 DOWNTO 0 );
SIGNAL ALU_output_mux : STD_LOGIC_VECTOR( 7 DOWNTO 0 );
SIGNAL Ainput, Binput : STD_LOGIC_VECTOR( 7 DOWNTO 0 );
Sum <= unsigned('0' & Ainput) + unsigned('0' & Binput);
ALU_output_mux <= Sum(7 DOWNTO 0) ;
Overflow <= Sum(8);
Overflow would be '1' when Sum is bigger than 255.
This works for unsigned addition well but I need that overflow for signed
values.
Why I cant write:
Overflow <= '1' when (Sum >= 128 or Sum < 127) else
'0';
Can someone help me?
Thx
> Why I cant write:
>
> Overflow <= '1' when (Sum >= 128 or Sum < 127) else
> '0';
>
> Can someone help me?
Your condition looks like it is always true. Maybe you should write "Sum
< -127" ?
--
____ _ __ ___
| _ \_)/ _|/ _ \ Adresse de retour invalide: retirez le -
| | | | | (_| |_| | Invalid return address: remove the -
|_| |_|_|\__|\___/
An alternative solution (without extension of the operands). Look at the
sign bits:
overflow <= '1' when (Ainput(7)=Binput(7)) and (Ainput(7)/=Sum(7)) ELSE
'0';
Egbert Molenkamp
"Zaki" <Klej...@web.de> wrote in message
news:2kfj3iF...@uni-berlin.de...