aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom/Sequential.py
diff options
context:
space:
mode:
authorPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-08-17 12:17:51 +0200
committerumarcor <unai.martinezcorral@ehu.eus>2021-08-23 16:35:36 +0200
commitd0dc820554320ad076854481f5cb0957edd3cda5 (patch)
tree6959f4781d454962bfea54886a0c42a90d97d3ac /pyGHDL/dom/Sequential.py
parent2488e55caba1c369785a93ab2578c4a1e0c40c65 (diff)
downloadghdl-d0dc820554320ad076854481f5cb0957edd3cda5.tar.gz
ghdl-d0dc820554320ad076854481f5cb0957edd3cda5.tar.bz2
ghdl-d0dc820554320ad076854481f5cb0957edd3cda5.zip
Implemented handling of wait statements.
Diffstat (limited to 'pyGHDL/dom/Sequential.py')
-rw-r--r--pyGHDL/dom/Sequential.py53
1 files changed, 51 insertions, 2 deletions
diff --git a/pyGHDL/dom/Sequential.py b/pyGHDL/dom/Sequential.py
index b0f1d2e97..d2efef8eb 100644
--- a/pyGHDL/dom/Sequential.py
+++ b/pyGHDL/dom/Sequential.py
@@ -51,6 +51,7 @@ from pyVHDLModel.SyntaxModel import (
SequentialProcedureCall as VHDLModel_SequentialProcedureCall,
SequentialAssertStatement as VHDLModel_SequentialAssertStatement,
SequentialReportStatement as VHDLModel_SequentialReportStatement,
+ WaitStatement as VHDLModel_WaitStatement,
Name,
SequentialStatement,
Expression,
@@ -476,7 +477,11 @@ class SequentialAssertStatement(VHDLModel_SequentialAssertStatement, DOMMixin):
condition = GetExpressionFromNode(nodes.Get_Assertion_Condition(assertNode))
message = GetExpressionFromNode(nodes.Get_Report_Expression(assertNode))
severityNode = nodes.Get_Severity_Expression(assertNode)
- severity = None if severityNode is nodes.Null_Iir else GetExpressionFromNode(severityNode)
+ severity = (
+ None
+ if severityNode is nodes.Null_Iir
+ else GetExpressionFromNode(severityNode)
+ )
return cls(assertNode, condition, message, severity, label)
@@ -499,6 +504,50 @@ class SequentialReportStatement(VHDLModel_SequentialReportStatement, DOMMixin):
message = GetExpressionFromNode(nodes.Get_Report_Expression(reportNode))
severityNode = nodes.Get_Severity_Expression(reportNode)
- severity = None if severityNode is nodes.Null_Iir else GetExpressionFromNode(severityNode)
+ severity = (
+ None
+ if severityNode is nodes.Null_Iir
+ else GetExpressionFromNode(severityNode)
+ )
return cls(reportNode, message, severity, label)
+
+
+@export
+class WaitStatement(VHDLModel_WaitStatement, DOMMixin):
+ def __init__(
+ self,
+ waitNode: Iir,
+ sensitivityList: Iterable[Name] = None,
+ condition: Expression = None,
+ timeout: Expression = None,
+ label: str = None,
+ ):
+ super().__init__(sensitivityList, condition, timeout, label)
+ DOMMixin.__init__(self, waitNode)
+
+ @classmethod
+ def parse(cls, waitNode: Iir, label: str) -> "WaitStatement":
+ from pyGHDL.dom._Utils import GetIirKindOfNode
+ from pyGHDL.dom._Translate import GetExpressionFromNode
+
+ sensitivityList = None
+ sensitivityListNode = nodes.Get_Sensitivity_List(waitNode)
+ if sensitivityListNode is not nodes.Null_Iir:
+ print(GetIirKindOfNode(sensitivityListNode))
+
+ conditionNode = nodes.Get_Condition_Clause(waitNode)
+ condition = (
+ None
+ if conditionNode is nodes.Null_Iir
+ else GetExpressionFromNode(conditionNode)
+ )
+
+ timeoutNode = nodes.Get_Timeout_Clause(waitNode)
+ timeout = (
+ None
+ if timeoutNode is nodes.Null_Iir
+ else GetExpressionFromNode(timeoutNode)
+ )
+
+ return cls(waitNode, sensitivityList, condition, timeout, label)