diff options
author | Tristan Gingold <tgingold@free.fr> | 2019-10-07 07:33:47 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2019-10-07 07:33:47 +0200 |
commit | 5a4e0827f597d077707aa57985be951c1d40f854 (patch) | |
tree | b9238d27fee135f071b72a3e3b01264205003439 /src | |
parent | ab9bb439cc6a108b3fae713c3e475aac2ca509a0 (diff) | |
download | ghdl-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.adb | 10 | ||||
-rw-r--r-- | src/vhdl/vhdl-annotations.adb | 3 |
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; |