Gast
#1699761
hallo, ich möchte zwei operanden miteinander multiplizieren. habe die operanden so angelegt: variable op_one : signed((OPERAND_WIDTH - 1) downto 0); variable op_two : signed((OPERAND_WIDTH - 1) downto 0); variable tmp : signed((2 * OPERAND_WIDTH - 1) downto 0); variable result : signed((OPERAND_WIDTH - 1) downto 0); so ich hab jetzt geschrieben: tmp := op_one * op_two; kein problem. funktioniert auch soweit. so ich möchte jetzt wissen, ob bei der multiplikation ein overflow aufgetreten ist, also das ergebnis eine 32 bit zahl sprengt. deswegen habe ich mir gedacht ich vergleich das ergebnis einfach mit den grenzen: if tmp < (2**(OPERAND_WIDTH - 1) - 1) and tmp > -(2**(OPERAND_WIDTH - 1)) then so und da sagt mir jetzt model sim: Integer exponentiation has overflowed; result is -2147483648. warum?