lib.io: Expose Pin path and name as attributes.

This commit is contained in:
Wanda 2024-02-28 12:43:12 +01:00 committed by Catherine
parent 1dd2e6150c
commit f2dab705ee
2 changed files with 18 additions and 1 deletions

View file

@ -1,6 +1,7 @@
from .. import *
from ..lib import wiring
from ..lib.wiring import In, Out
from .. import tracer
__all__ = ["Pin"]
@ -123,9 +124,14 @@ class Pin(wiring.PureInterface):
def __init__(self, width, dir, *, xdr=0, name=None, path=None, src_loc_at=0):
if name is not None:
if path is None:
if path is not None:
raise ValueError("Cannot pass both name and path")
path = (name,)
if path is None:
name = tracer.get_var_name(depth=2 + src_loc_at, default="$pin")
path = (name,)
self.path = tuple(path)
self.name = path[-1]
signature = Pin.Signature(width, dir, xdr=xdr)
super().__init__(signature, path=path, src_loc_at=src_loc_at + 1)

View file

@ -218,3 +218,14 @@ class PinTestCase(FHDLTestCase):
self.assertEqual(pin.signature.width, 2)
self.assertEqual(pin.signature.dir, "io")
self.assertEqual(pin.signature.xdr, 2)
self.assertEqual(pin.name, "pin")
self.assertEqual(pin.path, ("pin",))
self.assertEqual(pin.i0.name, "pin__i0")
pin = Pin(2, dir="io", xdr=2, name="testpin")
self.assertEqual(pin.name, "testpin")
self.assertEqual(pin.path, ("testpin",))
self.assertEqual(pin.i0.name, "testpin__i0")
pin = Pin(2, dir="io", xdr=2, path=["a", "b"])
self.assertEqual(pin.name, "b")
self.assertEqual(pin.path, ("a", "b"))
self.assertEqual(pin.i0.name, "a__b__i0")