back.pysim: implement Part.
This commit is contained in:
parent
1adf58f561
commit
20a04bca88
|
@ -118,7 +118,11 @@ class _RHSValueCompiler(ValueTransformer):
|
||||||
return lambda state: normalize((arg(state) >> shift) & mask, shape)
|
return lambda state: normalize((arg(state) >> shift) & mask, shape)
|
||||||
|
|
||||||
def on_Part(self, value):
|
def on_Part(self, value):
|
||||||
raise NotImplementedError
|
shape = value.shape()
|
||||||
|
arg = self(value.value)
|
||||||
|
shift = self(value.offset)
|
||||||
|
mask = (1 << value.width) - 1
|
||||||
|
return lambda state: normalize((arg(state) >> shift(state)) & mask, shape)
|
||||||
|
|
||||||
def on_Cat(self, value):
|
def on_Cat(self, value):
|
||||||
shape = value.shape()
|
shape = value.shape()
|
||||||
|
|
|
@ -405,7 +405,7 @@ class Part(Value):
|
||||||
return self.value._lhs_signals()
|
return self.value._lhs_signals()
|
||||||
|
|
||||||
def _rhs_signals(self):
|
def _rhs_signals(self):
|
||||||
return self.value._rhs_signals()
|
return self.value._rhs_signals() | self.offset._rhs_signals()
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "(part {} {} {})".format(repr(self.value), repr(self.offset), self.width)
|
return "(part {} {} {})".format(repr(self.value), repr(self.offset), self.width)
|
||||||
|
|
|
@ -130,6 +130,12 @@ class SimulatorUnitTestCase(FHDLTestCase):
|
||||||
stmt2 = lambda a: a[2:4]
|
stmt2 = lambda a: a[2:4]
|
||||||
self.assertOperator(stmt2, [C(0b10110100, 8)], C(0b01, 2))
|
self.assertOperator(stmt2, [C(0b10110100, 8)], C(0b01, 2))
|
||||||
|
|
||||||
|
def test_part(self):
|
||||||
|
stmt = lambda a, b: a.part(b, 3)
|
||||||
|
self.assertOperator(stmt, [C(0b10110100, 8), C(0)], C(0b100, 3))
|
||||||
|
self.assertOperator(stmt, [C(0b10110100, 8), C(2)], C(0b101, 3))
|
||||||
|
self.assertOperator(stmt, [C(0b10110100, 8), C(3)], C(0b110, 3))
|
||||||
|
|
||||||
def test_cat(self):
|
def test_cat(self):
|
||||||
self.assertOperator(Cat, [C(0b10, 2), C(0b01, 2)], C(0b0110, 4))
|
self.assertOperator(Cat, [C(0b10, 2), C(0b01, 2)], C(0b0110, 4))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue