hdl,back: add support for name= in property checks (Assert, ...).

Co-authored-by: Jean THOMAS <virgule@jeanthomas.me>
This commit is contained in:
Jean THOMAS 2023-02-12 12:21:31 +01:00 committed by GitHub
parent 666ee27fd0
commit a7fec279aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 5 deletions

View file

@ -751,7 +751,7 @@ class _StatementCompiler(xfrm.StatementVisitor):
self.state.rtlil.cell("$" + stmt._kind, ports={
"\\A": check_wire,
"\\EN": en_wire,
}, src=_src(stmt.src_loc))
}, src=_src(stmt.src_loc), name=stmt.name)
on_Assert = on_property
on_Assume = on_property

View file

@ -1405,11 +1405,15 @@ class UnusedProperty(UnusedMustUse):
class Property(Statement, MustUse):
_MustUse__warning = UnusedProperty
def __init__(self, test, *, _check=None, _en=None, src_loc_at=0):
def __init__(self, test, *, _check=None, _en=None, name=None, src_loc_at=0):
super().__init__(src_loc_at=src_loc_at)
self.test = Value.cast(test)
self._check = _check
self._en = _en
self.name = name
if not isinstance(self.name, str) and self.name is not None:
raise TypeError("Property name must be a string or None, not {!r}"
.format(self.name))
if self._check is None:
self._check = Signal(reset_less=True, name="${}$check".format(self._kind))
self._check.src_loc = self.src_loc
@ -1424,6 +1428,8 @@ class Property(Statement, MustUse):
return self.test._rhs_signals()
def __repr__(self):
if self.name is not None:
return "({}: {} {!r})".format(self.name, self._kind, self.test)
return "({} {!r})".format(self._kind, self.test)

View file

@ -237,13 +237,13 @@ class StatementTransformer(StatementVisitor):
return Assign(self.on_value(stmt.lhs), self.on_value(stmt.rhs))
def on_Assert(self, stmt):
return Assert(self.on_value(stmt.test), _check=stmt._check, _en=stmt._en)
return Assert(self.on_value(stmt.test), _check=stmt._check, _en=stmt._en, name=stmt.name)
def on_Assume(self, stmt):
return Assume(self.on_value(stmt.test), _check=stmt._check, _en=stmt._en)
return Assume(self.on_value(stmt.test), _check=stmt._check, _en=stmt._en, name=stmt.name)
def on_Cover(self, stmt):
return Cover(self.on_value(stmt.test), _check=stmt._check, _en=stmt._en)
return Cover(self.on_value(stmt.test), _check=stmt._check, _en=stmt._en, name=stmt.name)
def on_Switch(self, stmt):
cases = OrderedDict((k, self.on_statement(s)) for k, s in stmt.cases.items())