aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2019-10-07 07:33:47 +0200
committerTristan Gingold <tgingold@free.fr>2019-10-07 07:33:47 +0200
commit5a4e0827f597d077707aa57985be951c1d40f854 (patch)
treeb9238d27fee135f071b72a3e3b01264205003439 /src
parentab9bb439cc6a108b3fae713c3e475aac2ca509a0 (diff)
downloadghdl-5a4e0827f597d077707aa57985be951c1d40f854.tar.gz
ghdl-5a4e0827f597d077707aa57985be951c1d40f854.tar.bz2
ghdl-5a4e0827f597d077707aa57985be951c1d40f854.zip
synth: add support for concurrent procedure calls. Fix #969
Diffstat (limited to 'src')
-rw-r--r--src/synth/synth-stmts.adb10
-rw-r--r--src/vhdl/vhdl-annotations.adb3
2 files changed, 9 insertions, 4 deletions
diff --git a/src/synth/synth-stmts.adb b/src/synth/synth-stmts.adb
index 8b1fc0645..05eb57e37 100644
--- a/src/synth/synth-stmts.adb
+++ b/src/synth/synth-stmts.adb
@@ -1488,7 +1488,7 @@ package body Synth.Stmts is
return Res;
end Synth_Subprogram_Call;
- procedure Synth_Procedure_Call (C : in out Seq_Context; Stmt : Node)
+ procedure Synth_Procedure_Call (Syn_Inst : Synth_Instance_Acc; Stmt : Node)
is
Call : constant Node := Get_Procedure_Call (Stmt);
Imp : constant Node := Get_Implementation (Call);
@@ -1502,7 +1502,7 @@ package body Synth.Stmts is
return;
end if;
- Res := Synth_Subprogram_Call (C.Inst, Call);
+ Res := Synth_Subprogram_Call (Syn_Inst, Call);
pragma Assert (Res = null);
end Synth_Procedure_Call;
@@ -1845,7 +1845,7 @@ package body Synth.Stmts is
when Iir_Kind_Return_Statement =>
Synth_Return_Statement (C, Stmt);
when Iir_Kind_Procedure_Call_Statement =>
- Synth_Procedure_Call (C, Stmt);
+ Synth_Procedure_Call (C.Inst, Stmt);
when Iir_Kind_Report_Statement
| Iir_Kind_Assertion_Statement =>
-- TODO ?
@@ -2379,6 +2379,10 @@ package body Synth.Stmts is
Push_Phi;
Synth_Selected_Signal_Assignment (Syn_Inst, Stmt);
Pop_And_Merge_Phi (Build_Context, Stmt);
+ when Iir_Kind_Concurrent_Procedure_Call_Statement =>
+ Push_Phi;
+ Synth_Procedure_Call (Syn_Inst, Stmt);
+ Pop_And_Merge_Phi (Build_Context, Stmt);
when Iir_Kinds_Process_Statement =>
Push_Phi;
Synth_Process_Statement (Syn_Inst, Stmt);
diff --git a/src/vhdl/vhdl-annotations.adb b/src/vhdl/vhdl-annotations.adb
index a2f0f0458..b61547018 100644
--- a/src/vhdl/vhdl-annotations.adb
+++ b/src/vhdl/vhdl-annotations.adb
@@ -1108,7 +1108,8 @@ package body Vhdl.Annotations is
when Iir_Kind_Concurrent_Simple_Signal_Assignment
| Iir_Kind_Concurrent_Selected_Signal_Assignment
| Iir_Kind_Concurrent_Conditional_Signal_Assignment
- | Iir_Kind_Concurrent_Assertion_Statement =>
+ | Iir_Kind_Concurrent_Assertion_Statement
+ | Iir_Kind_Concurrent_Procedure_Call_Statement =>
-- In case concurrent signal assignemnts were not
-- canonicalized (for synthesis).
null;