Closes #527.
return "(proxy (array [{}]) {!r})".format(", ".join(map(repr, self.elems)), self.index)
+# TODO(nmigen-0.4): remove
class UserValue(Value):
"""Value with custom lowering.
* Indexing or iterating through individual bits;
* Adding an assignment to the value to a ``Module`` using ``m.d.<domain> +=``.
"""
+ @deprecated("instead of `UserValue`, use `ValueCastable`", stacklevel=3)
def __init__(self, *, src_loc_at=0):
super().__init__(src_loc_at=1 + src_loc_at)
self.__lowered = None
providing fixed semantics upfront, it is kept abstract for as long as possible, only being
cast to a concrete nMigen value when required.
- Note that it is necessary to ensure that nMigen's view of representation of all values stays
+ Note that it is necessary to ensure that nMigen's view of representation of all values stays
internally consistent. The class deriving from ``ValueCastable`` must decorate the ``as_value``
method with the ``lowermethod`` decorator, which ensures that all calls to ``as_value``return the
same ``Value`` representation. If the class deriving from ``ValueCastable`` is mutable, it is
class UserValueTestCase(FHDLTestCase):
def test_shape(self):
- uv = MockUserValue(1)
- self.assertEqual(uv.shape(), unsigned(1))
- self.assertIsInstance(uv.shape(), Shape)
- uv.lowered = 2
- self.assertEqual(uv.shape(), unsigned(1))
- self.assertEqual(uv.lower_count, 1)
+ with warnings.catch_warnings():
+ warnings.filterwarnings(action="ignore", category=DeprecationWarning)
+ uv = MockUserValue(1)
+ self.assertEqual(uv.shape(), unsigned(1))
+ self.assertIsInstance(uv.shape(), Shape)
+ uv.lowered = 2
+ self.assertEqual(uv.shape(), unsigned(1))
+ self.assertEqual(uv.lower_count, 1)
def test_lower_to_user_value(self):
- uv = MockUserValue(MockUserValue(1))
- self.assertEqual(uv.shape(), unsigned(1))
- self.assertIsInstance(uv.shape(), Shape)
- uv.lowered = MockUserValue(2)
- self.assertEqual(uv.shape(), unsigned(1))
- self.assertEqual(uv.lower_count, 1)
+ with warnings.catch_warnings():
+ warnings.filterwarnings(action="ignore", category=DeprecationWarning)
+ uv = MockUserValue(MockUserValue(1))
+ self.assertEqual(uv.shape(), unsigned(1))
+ self.assertIsInstance(uv.shape(), Shape)
+ uv.lowered = MockUserValue(2)
+ self.assertEqual(uv.shape(), unsigned(1))
+ self.assertEqual(uv.lower_count, 1)
class MockValueCastableChanges(ValueCastable):
# nmigen: UnusedElaboratable=no
+import warnings
+
from nmigen.hdl.ast import *
from nmigen.hdl.cd import *
from nmigen.hdl.ir import *
def setUp(self):
self.s = Signal()
self.c = Signal()
- self.uv = MockUserValue(self.s)
+ with warnings.catch_warnings():
+ warnings.filterwarnings(action="ignore", category=DeprecationWarning)
+ self.uv = MockUserValue(self.s)
def test_lower(self):
sync = ClockDomain()
def setUp(self):
self.s = Signal()
self.c = Signal()
- self.uv = MockUserValue(MockUserValue(self.s))
+ with warnings.catch_warnings():
+ warnings.filterwarnings(action="ignore", category=DeprecationWarning)
+ self.uv = MockUserValue(MockUserValue(self.s))
# inherit the test_lower method from UserValueTestCase because the checks are the same