hdl,back: add support for name= in property checks (Assert, ...).
Co-authored-by: Jean THOMAS <virgule@jeanthomas.me>
This commit is contained in:
parent
666ee27fd0
commit
a7fec279aa
|
@ -751,7 +751,7 @@ class _StatementCompiler(xfrm.StatementVisitor):
|
||||||
self.state.rtlil.cell("$" + stmt._kind, ports={
|
self.state.rtlil.cell("$" + stmt._kind, ports={
|
||||||
"\\A": check_wire,
|
"\\A": check_wire,
|
||||||
"\\EN": en_wire,
|
"\\EN": en_wire,
|
||||||
}, src=_src(stmt.src_loc))
|
}, src=_src(stmt.src_loc), name=stmt.name)
|
||||||
|
|
||||||
on_Assert = on_property
|
on_Assert = on_property
|
||||||
on_Assume = on_property
|
on_Assume = on_property
|
||||||
|
|
|
@ -1405,11 +1405,15 @@ class UnusedProperty(UnusedMustUse):
|
||||||
class Property(Statement, MustUse):
|
class Property(Statement, MustUse):
|
||||||
_MustUse__warning = UnusedProperty
|
_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)
|
super().__init__(src_loc_at=src_loc_at)
|
||||||
self.test = Value.cast(test)
|
self.test = Value.cast(test)
|
||||||
self._check = _check
|
self._check = _check
|
||||||
self._en = _en
|
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:
|
if self._check is None:
|
||||||
self._check = Signal(reset_less=True, name="${}$check".format(self._kind))
|
self._check = Signal(reset_less=True, name="${}$check".format(self._kind))
|
||||||
self._check.src_loc = self.src_loc
|
self._check.src_loc = self.src_loc
|
||||||
|
@ -1424,6 +1428,8 @@ class Property(Statement, MustUse):
|
||||||
return self.test._rhs_signals()
|
return self.test._rhs_signals()
|
||||||
|
|
||||||
def __repr__(self):
|
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)
|
return "({} {!r})".format(self._kind, self.test)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -237,13 +237,13 @@ class StatementTransformer(StatementVisitor):
|
||||||
return Assign(self.on_value(stmt.lhs), self.on_value(stmt.rhs))
|
return Assign(self.on_value(stmt.lhs), self.on_value(stmt.rhs))
|
||||||
|
|
||||||
def on_Assert(self, stmt):
|
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):
|
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):
|
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):
|
def on_Switch(self, stmt):
|
||||||
cases = OrderedDict((k, self.on_statement(s)) for k, s in stmt.cases.items())
|
cases = OrderedDict((k, self.on_statement(s)) for k, s in stmt.cases.items())
|
||||||
|
|
Loading…
Reference in a new issue