hdl.ast: Add Assert and Assign statements.
This commit is contained in:
parent
ea7e19ed5c
commit
e6517a33c7
|
@ -12,8 +12,9 @@ __all__ = [
|
||||||
"Value", "Const", "C", "Operator", "Mux", "Part", "Slice", "Cat", "Repl",
|
"Value", "Const", "C", "Operator", "Mux", "Part", "Slice", "Cat", "Repl",
|
||||||
"Array", "ArrayProxy",
|
"Array", "ArrayProxy",
|
||||||
"Signal", "ClockSignal", "ResetSignal",
|
"Signal", "ClockSignal", "ResetSignal",
|
||||||
"Statement", "Assign", "Switch", "Delay", "Tick", "Passive",
|
"Statement", "Assign", "Assert", "Assume", "Switch", "Delay", "Tick",
|
||||||
"ValueKey", "ValueDict", "ValueSet", "SignalKey", "SignalDict", "SignalSet",
|
"Passive", "ValueKey", "ValueDict", "ValueSet", "SignalKey", "SignalDict",
|
||||||
|
"SignalSet",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -826,6 +827,54 @@ class Assign(Statement):
|
||||||
return "(eq {!r} {!r})".format(self.lhs, self.rhs)
|
return "(eq {!r} {!r})".format(self.lhs, self.rhs)
|
||||||
|
|
||||||
|
|
||||||
|
class Assert(Statement):
|
||||||
|
def __init__(self, test, _check=None, _en=None):
|
||||||
|
self.test = Value.wrap(test)
|
||||||
|
|
||||||
|
self._check = _check
|
||||||
|
if self._check is None:
|
||||||
|
self._check = Signal(reset_less=True, name="$assert$check")
|
||||||
|
self._check.src_loc = self.test.src_loc
|
||||||
|
|
||||||
|
self._en = _en
|
||||||
|
if _en is None:
|
||||||
|
self._en = Signal(reset_less=True, name="$assert$en")
|
||||||
|
self._en.src_loc = self.test.src_loc
|
||||||
|
|
||||||
|
def _lhs_signals(self):
|
||||||
|
return ValueSet((self._en, self._check))
|
||||||
|
|
||||||
|
def _rhs_signals(self):
|
||||||
|
return self.test._rhs_signals()
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "(assert {!r})".format(self.test)
|
||||||
|
|
||||||
|
|
||||||
|
class Assume(Statement):
|
||||||
|
def __init__(self, test, _check=None, _en=None):
|
||||||
|
self.test = Value.wrap(test)
|
||||||
|
|
||||||
|
self._check = _check
|
||||||
|
if self._check is None:
|
||||||
|
self._check = Signal(reset_less=True, name="$assume$check")
|
||||||
|
self._check.src_loc = self.test.src_loc
|
||||||
|
|
||||||
|
self._en = _en
|
||||||
|
if self._en is None:
|
||||||
|
self._en = Signal(reset_less=True, name="$assume$en")
|
||||||
|
self._en.src_loc = self.test.src_loc
|
||||||
|
|
||||||
|
def _lhs_signals(self):
|
||||||
|
return ValueSet((self._en, self._check))
|
||||||
|
|
||||||
|
def _rhs_signals(self):
|
||||||
|
return self.test._rhs_signals()
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "(assume {!r})".format(self.test)
|
||||||
|
|
||||||
|
|
||||||
class Switch(Statement):
|
class Switch(Statement):
|
||||||
def __init__(self, test, cases):
|
def __init__(self, test, cases):
|
||||||
self.test = Value.wrap(test)
|
self.test = Value.wrap(test)
|
||||||
|
|
Loading…
Reference in a new issue