fhdl: handle negative constants correctly

This commit is contained in:
Sebastien Bourdeauducq 2012-03-08 20:49:24 +01:00
parent f4adb0fe9c
commit bfcd4e636b
1 changed files with 4 additions and 2 deletions

View File

@ -8,7 +8,9 @@ def bits_for(n):
if isinstance(n, Constant): if isinstance(n, Constant):
return n.bv.width return n.bv.width
else: else:
if n == 0: if n < 0:
return bits_for(-n) + 1
elif n == 0:
return 1 return 1
else: else:
return int(math.ceil(math.log(n+1, 2))) return int(math.ceil(math.log(n+1, 2)))
@ -118,7 +120,7 @@ class Replicate(Value):
class Constant(Value): class Constant(Value):
def __init__(self, n, bv=None): def __init__(self, n, bv=None):
self.bv = bv or BV(bits_for(n)) self.bv = bv or BV(bits_for(n), n < 0)
self.n = n self.n = n
def __repr__(self): def __repr__(self):