aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom/Concurrent.py
diff options
context:
space:
mode:
authorUnai Martinez-Corral <38422348+umarcor@users.noreply.github.com>2021-08-27 20:25:31 +0100
committerGitHub <noreply@github.com>2021-08-27 20:25:31 +0100
commit14fd4f9e22e0e0a4320559925ae74ee52b7b35e9 (patch)
tree3ee3c7c68900377358bbcd89bcb1920790f2645c /pyGHDL/dom/Concurrent.py
parent6ae2325726c7d5dc347149cfb564e34dd9cb883d (diff)
parentca71f18daa2f8fdea623b5733c7ab439e37388b6 (diff)
downloadghdl-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.py36
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)