diff --git a/nmigen/hdl/ast.py b/nmigen/hdl/ast.py index 15d1d654..34c8e2be 100644 --- a/nmigen/hdl/ast.py +++ b/nmigen/hdl/ast.py @@ -556,10 +556,7 @@ def _bitwise_binary_shape(a_shape, b_shape): if self.operator in ("+", "~"): return Shape(a_width, a_signed) if self.operator == "-": - if not a_signed: - return Shape(a_width + 1, True) - else: - return Shape(a_width, a_signed) + return Shape(a_width + 1, True) if self.operator in ("b", "r|", "r&", "r^"): return Shape(1, False) elif len(op_shapes) == 2: diff --git a/nmigen/test/test_hdl_ast.py b/nmigen/test/test_hdl_ast.py index 84f81843..d5e19f18 100644 --- a/nmigen/test/test_hdl_ast.py +++ b/nmigen/test/test_hdl_ast.py @@ -252,7 +252,7 @@ def test_neg(self): self.assertEqual(v1.shape(), signed(5)) v2 = -Const(0, signed(4)) self.assertEqual(repr(v2), "(- (const 4'sd0))") - self.assertEqual(v2.shape(), signed(4)) + self.assertEqual(v2.shape(), signed(5)) def test_add(self): v1 = Const(0, unsigned(4)) + Const(0, unsigned(6))