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: |         elif len(value.operands) == 3: | ||||||
|             if value.operator == "m": |             if value.operator == "m": | ||||||
|                 sel, val1, val0 = value.operands |                 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: |         raise NotImplementedError("Operator '{}' not implemented".format(value.operator)) # :nocov: | ||||||
| 
 | 
 | ||||||
|     def on_Slice(self, value): |     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(0)], C(3, 4)) | ||||||
|         self.assertStatement(stmt, [C(2, 4), C(3, 4), C(1)], C(2, 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): |     def test_abs(self): | ||||||
|         stmt = lambda y, a: y.eq(abs(a)) |         stmt = lambda y, a: y.eq(abs(a)) | ||||||
|         self.assertStatement(stmt, [C(3,  unsigned(8))], C(3,  unsigned(8))) |         self.assertStatement(stmt, [C(3,  unsigned(8))], C(3,  unsigned(8))) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Marcelina Kościelnicka
						Marcelina Kościelnicka