Skip to content

Commit 4431814

Browse files
authored
sim._pyrtl: mask Mux selection operand.
Otherwise it behaves funny when it's eg. the result of operator ~.
1 parent adef3b2 commit 4431814

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

nmigen/sim/_pyrtl.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ def sign(value):
177177
elif len(value.operands) == 3:
178178
if value.operator == "m":
179179
sel, val1, val0 = value.operands
180-
return f"({self(val1)} if {self(sel)} else {self(val0)})"
180+
return f"({self(val1)} if {mask(sel)} else {self(val0)})"
181181
raise NotImplementedError("Operator '{}' not implemented".format(value.operator)) # :nocov:
182182

183183
def on_Slice(self, value):

tests/test_sim.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,11 @@ def test_mux(self):
186186
self.assertStatement(stmt, [C(2, 4), C(3, 4), C(0)], C(3, 4))
187187
self.assertStatement(stmt, [C(2, 4), C(3, 4), C(1)], C(2, 4))
188188

189+
def test_mux_invert(self):
190+
stmt = lambda y, a, b, c: y.eq(Mux(~c, a, b))
191+
self.assertStatement(stmt, [C(2, 4), C(3, 4), C(0)], C(2, 4))
192+
self.assertStatement(stmt, [C(2, 4), C(3, 4), C(1)], C(3, 4))
193+
189194
def test_abs(self):
190195
stmt = lambda y, a: y.eq(abs(a))
191196
self.assertStatement(stmt, [C(3, unsigned(8))], C(3, unsigned(8)))

0 commit comments

Comments
 (0)