sim._pyrtl: mask Mux selection operand.
Otherwise it behaves funny when it's eg. the result of operator ~.
This commit is contained in:
parent
adef3b2e7b
commit
44318149e0
|
@ -177,7 +177,7 @@ class _RHSValueCompiler(_ValueCompiler):
|
|||
elif len(value.operands) == 3:
|
||||
if value.operator == "m":
|
||||
sel, val1, val0 = value.operands
|
||||
return f"({self(val1)} if {self(sel)} else {self(val0)})"
|
||||
return f"({self(val1)} if {mask(sel)} else {self(val0)})"
|
||||
raise NotImplementedError("Operator '{}' not implemented".format(value.operator)) # :nocov:
|
||||
|
||||
def on_Slice(self, value):
|
||||
|
|
|
@ -186,6 +186,11 @@ class SimulatorUnitTestCase(FHDLTestCase):
|
|||
self.assertStatement(stmt, [C(2, 4), C(3, 4), C(0)], C(3, 4))
|
||||
self.assertStatement(stmt, [C(2, 4), C(3, 4), C(1)], C(2, 4))
|
||||
|
||||
def test_mux_invert(self):
|
||||
stmt = lambda y, a, b, c: y.eq(Mux(~c, a, b))
|
||||
self.assertStatement(stmt, [C(2, 4), C(3, 4), C(0)], C(2, 4))
|
||||
self.assertStatement(stmt, [C(2, 4), C(3, 4), C(1)], C(3, 4))
|
||||
|
||||
def test_abs(self):
|
||||
stmt = lambda y, a: y.eq(abs(a))
|
||||
self.assertStatement(stmt, [C(3, unsigned(8))], C(3, unsigned(8)))
|
||||
|
|
Loading…
Reference in a new issue