aboutsummaryrefslogtreecommitdiffstats
path: root/src/synth/synth-stmts.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2019-07-18 03:04:21 +0200
committerTristan Gingold <tgingold@free.fr>2019-07-19 18:48:22 +0200
commitc9b3a23bfc75c9b2b74ed88cca97fb5a4e264d7f (patch)
treee9027e5132589e399db264b4f9e8624a7564541f /src/synth/synth-stmts.adb
parente812443cafb5284eef69a3aaf44b69192964bf0e (diff)
downloadghdl-c9b3a23bfc75c9b2b74ed88cca97fb5a4e264d7f.tar.gz
ghdl-c9b3a23bfc75c9b2b74ed88cca97fb5a4e264d7f.tar.bz2
ghdl-c9b3a23bfc75c9b2b74ed88cca97fb5a4e264d7f.zip
synth: finalize concurrent assignments (WIP).
Diffstat (limited to 'src/synth/synth-stmts.adb')
-rw-r--r--src/synth/synth-stmts.adb16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/synth/synth-stmts.adb b/src/synth/synth-stmts.adb
index 993a64491..83a163d60 100644
--- a/src/synth/synth-stmts.adb
+++ b/src/synth/synth-stmts.adb
@@ -1210,14 +1210,19 @@ package body Synth.Stmts is
begin
Stmt := Stmts;
while Is_Valid (Stmt) loop
- Push_Phi;
case Get_Kind (Stmt) is
when Iir_Kind_Concurrent_Simple_Signal_Assignment =>
+ Push_Phi;
Synth_Simple_Signal_Assignment (Syn_Inst, Stmt);
+ Pop_And_Merge_Phi (Build_Context, Stmt);
when Iir_Kind_Concurrent_Conditional_Signal_Assignment =>
+ Push_Phi;
Synth_Conditional_Signal_Assignment (Syn_Inst, Stmt);
+ Pop_And_Merge_Phi (Build_Context, Stmt);
when Iir_Kinds_Process_Statement =>
+ Push_Phi;
Synth_Process_Statement (Syn_Inst, Stmt);
+ Pop_And_Merge_Phi (Build_Context, Stmt);
when Iir_Kind_If_Generate_Statement =>
declare
Gen : Node;
@@ -1237,9 +1242,8 @@ package body Synth.Stmts is
exit when Gen = Null_Node;
end loop;
end;
- when Iir_Kind_Concurrent_Assertion_Statement =>
- Synth_Concurrent_Assertion_Statement (Syn_Inst, Stmt);
when Iir_Kind_Component_Instantiation_Statement =>
+ Push_Phi;
if Is_Component_Instantiation (Stmt) then
declare
Comp_Config : constant Node :=
@@ -1257,14 +1261,18 @@ package body Synth.Stmts is
else
Synth_Design_Instantiation_Statement (Syn_Inst, Stmt);
end if;
+ Pop_And_Merge_Phi (Build_Context, Stmt);
when Iir_Kind_Psl_Default_Clock =>
null;
when Iir_Kind_Psl_Restrict_Directive =>
+ -- Passive statement.
Synth_Psl_Restrict_Directive (Syn_Inst, Stmt);
+ when Iir_Kind_Concurrent_Assertion_Statement =>
+ -- Passive statement.
+ Synth_Concurrent_Assertion_Statement (Syn_Inst, Stmt);
when others =>
Error_Kind ("synth_statements", Stmt);
end case;
- Pop_And_Merge_Phi (Build_Context);
Stmt := Get_Chain (Stmt);
end loop;
end Synth_Concurrent_Statements;