hdl.ast: accept Signals with identical min/max bounds.
And produce a 0-bit signal. Fixes #58.
This commit is contained in:
parent
083016d747
commit
33f9bd2a1d
|
@ -593,11 +593,15 @@ class Signal(Value, DUID):
|
||||||
if max is None:
|
if max is None:
|
||||||
max = 2
|
max = 2
|
||||||
max -= 1 # make both bounds inclusive
|
max -= 1 # make both bounds inclusive
|
||||||
if not min < max:
|
if min > max:
|
||||||
raise ValueError("Lower bound {} should be less than higher bound {}"
|
raise ValueError("Lower bound {} should be less or equal to higher bound {}"
|
||||||
.format(min, max))
|
.format(min, max + 1))
|
||||||
self.signed = min < 0 or max < 0
|
self.signed = min < 0 or max < 0
|
||||||
self.nbits = builtins.max(bits_for(min, self.signed), bits_for(max, self.signed))
|
if min == max:
|
||||||
|
self.nbits = 0
|
||||||
|
else:
|
||||||
|
self.nbits = builtins.max(bits_for(min, self.signed),
|
||||||
|
bits_for(max, self.signed))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if not (min is None and max is None):
|
if not (min is None and max is None):
|
||||||
|
|
|
@ -414,13 +414,18 @@ class SignalTestCase(FHDLTestCase):
|
||||||
self.assertEqual(s8.shape(), (6, True))
|
self.assertEqual(s8.shape(), (6, True))
|
||||||
s9 = Signal(0)
|
s9 = Signal(0)
|
||||||
self.assertEqual(s9.shape(), (0, False))
|
self.assertEqual(s9.shape(), (0, False))
|
||||||
|
s10 = Signal(max=1)
|
||||||
|
self.assertEqual(s10.shape(), (0, False))
|
||||||
|
|
||||||
def test_shape_bad(self):
|
def test_shape_bad(self):
|
||||||
with self.assertRaises(ValueError):
|
with self.assertRaises(ValueError,
|
||||||
|
msg="Lower bound 10 should be less or equal to higher bound 4"):
|
||||||
Signal(min=10, max=4)
|
Signal(min=10, max=4)
|
||||||
with self.assertRaises(ValueError):
|
with self.assertRaises(ValueError,
|
||||||
|
msg="Only one of bits/signedness or bounds may be specified"):
|
||||||
Signal(2, min=10)
|
Signal(2, min=10)
|
||||||
with self.assertRaises(TypeError):
|
with self.assertRaises(TypeError,
|
||||||
|
msg="Width must be a non-negative integer, not '-10'"):
|
||||||
Signal(-10)
|
Signal(-10)
|
||||||
|
|
||||||
def test_name(self):
|
def test_name(self):
|
||||||
|
|
Loading…
Reference in a new issue