hdl.ast: add Value.{as_signed,as_unsigned}.
Before this commit, there was no way to do so besides creating and assigning an intermediate signal, which could not be extracted into a helper function due to Module statefulness. Fixes #292.
This commit is contained in:
parent
9301e31b69
commit
27b47faf16
5 changed files with 51 additions and 0 deletions
|
|
@ -246,6 +246,16 @@ class OperatorTestCase(FHDLTestCase):
|
|||
self.assertEqual(repr(v), "(~ (const 4'd0))")
|
||||
self.assertEqual(v.shape(), unsigned(4))
|
||||
|
||||
def test_as_unsigned(self):
|
||||
v = Const(-1, signed(4)).as_unsigned()
|
||||
self.assertEqual(repr(v), "(u (const 4'sd-1))")
|
||||
self.assertEqual(v.shape(), unsigned(4))
|
||||
|
||||
def test_as_signed(self):
|
||||
v = Const(1, unsigned(4)).as_signed()
|
||||
self.assertEqual(repr(v), "(s (const 4'd1))")
|
||||
self.assertEqual(v.shape(), signed(4))
|
||||
|
||||
def test_neg(self):
|
||||
v1 = -Const(0, unsigned(4))
|
||||
self.assertEqual(repr(v1), "(- (const 4'd0))")
|
||||
|
|
|
|||
|
|
@ -56,6 +56,16 @@ class SimulatorUnitTestCase(FHDLTestCase):
|
|||
self.assertStatement(stmt, [C(1, 4)], C(1))
|
||||
self.assertStatement(stmt, [C(2, 4)], C(1))
|
||||
|
||||
def test_as_unsigned(self):
|
||||
stmt = lambda y, a, b: y.eq(a.as_unsigned() == b)
|
||||
self.assertStatement(stmt, [C(0b01, signed(2)), C(0b0001, unsigned(4))], C(1))
|
||||
self.assertStatement(stmt, [C(0b11, signed(2)), C(0b0011, unsigned(4))], C(1))
|
||||
|
||||
def test_as_signed(self):
|
||||
stmt = lambda y, a, b: y.eq(a.as_signed() == b)
|
||||
self.assertStatement(stmt, [C(0b01, unsigned(2)), C(0b0001, signed(4))], C(1))
|
||||
self.assertStatement(stmt, [C(0b11, unsigned(2)), C(0b1111, signed(4))], C(1))
|
||||
|
||||
def test_any(self):
|
||||
stmt = lambda y, a: y.eq(a.any())
|
||||
self.assertStatement(stmt, [C(0b00, 2)], C(0))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue