diff options
| author | Unai Martinez-Corral <38422348+umarcor@users.noreply.github.com> | 2021-08-27 20:25:31 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-27 20:25:31 +0100 |
| commit | 14fd4f9e22e0e0a4320559925ae74ee52b7b35e9 (patch) | |
| tree | 3ee3c7c68900377358bbcd89bcb1920790f2645c /pyGHDL/dom/Concurrent.py | |
| parent | 6ae2325726c7d5dc347149cfb564e34dd9cb883d (diff) | |
| parent | ca71f18daa2f8fdea623b5733c7ab439e37388b6 (diff) | |
| download | ghdl-14fd4f9e22e0e0a4320559925ae74ee52b7b35e9.tar.gz ghdl-14fd4f9e22e0e0a4320559925ae74ee52b7b35e9.tar.bz2 ghdl-14fd4f9e22e0e0a4320559925ae74ee52b7b35e9.zip | |
pyGHDL.dom: improvements (#1848)
# New Features
* Translate null statements.
* Sequential procedure call.
* Concurrent assert statement (but without condition)
This needs either PSL translations or help from @tgingold to have partial elaboration to a PSL assert becomes a normal VHDL assertion like in VHDL-93.
* Translate sensitivity lists.
# Changes
* None
# Bug fixes
* Changes due to typo in pyVHDLModel for `Choises`.
Diffstat (limited to 'pyGHDL/dom/Concurrent.py')
| -rw-r--r-- | pyGHDL/dom/Concurrent.py | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/pyGHDL/dom/Concurrent.py b/pyGHDL/dom/Concurrent.py index 560acafb2..33973a455 100644 --- a/pyGHDL/dom/Concurrent.py +++ b/pyGHDL/dom/Concurrent.py @@ -57,6 +57,7 @@ from pyVHDLModel.SyntaxModel import ( WaveformElement as VHDLModel_WaveformElement, ConcurrentSimpleSignalAssignment as VHDLModel_ConcurrentSimpleSignalAssignment, ConcurrentProcedureCall as VHDLModel_ConcurrentProcedureCall, + ConcurrentAssertStatement as VHDLModel_ConcurrentAssertStatement, Name, ConcurrentStatement, SequentialStatement, @@ -258,10 +259,9 @@ class ProcessStatement(VHDLModel_ProcessStatement, DOMMixin): sensitivityList = None if hasSensitivityList: - pass - # FIXME: sensitity list - # sensitivityListNode = nodes.Get_Sensitivity_List(processNode) - # print("sensi", GetIirKindOfNode(sensitivityListNode)) + sensitivityList = [] + for item in utils.list_iter(nodes.Get_Sensitivity_List(processNode)): + sensitivityList.append(GetNameOfNode(item)) declaredItems = GetDeclaredItemsFromChainedNodes(nodes.Get_Declaration_Chain(processNode), "process", label) statements = GetSequentialStatementsFromChainedNodes( @@ -719,3 +719,31 @@ class ConcurrentProcedureCall(VHDLModel_ConcurrentProcedureCall, DOMMixin): parameterAssociations = GetParameterMapAspect(nodes.Get_Parameter_Association_Chain(callNode)) return cls(concurrentCallNode, label, procedureName, parameterAssociations) + + +@export +class ConcurrentAssertStatement(VHDLModel_ConcurrentAssertStatement, DOMMixin): + def __init__( + self, + assertNode: Iir, + condition: ExpressionUnion, + message: ExpressionUnion = None, + severity: ExpressionUnion = None, + label: str = None, + ): + super().__init__(condition, message, severity, label) + DOMMixin.__init__(self, assertNode) + + @classmethod + def parse(cls, assertNode: Iir, label: str) -> "ConcurrentAssertStatement": + from pyGHDL.dom._Translate import GetExpressionFromNode + + # FIXME: how to get the condition? + # assertNode is a Psl_Assert_Directive + condition = None # GetExpressionFromNode(nodes.Get_Assertion_Condition(assertNode)) + messageNode = nodes.Get_Report_Expression(assertNode) + message = None if messageNode is nodes.Null_Iir else GetExpressionFromNode(messageNode) + severityNode = nodes.Get_Severity_Expression(assertNode) + severity = None if severityNode is nodes.Null_Iir else GetExpressionFromNode(severityNode) + + return cls(assertNode, condition, message, severity, label) |
