aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/synth/synth-decls.ads3
-rw-r--r--src/synth/synth-stmts.adb28
2 files changed, 27 insertions, 4 deletions
diff --git a/src/synth/synth-decls.ads b/src/synth/synth-decls.ads
index ddcb43cf6..02bf5c865 100644
--- a/src/synth/synth-decls.ads
+++ b/src/synth/synth-decls.ads
@@ -37,6 +37,9 @@ package Synth.Decls is
procedure Synth_Declaration_Type
(Syn_Inst : Synth_Instance_Acc; Decl : Node);
+ procedure Synth_Declaration
+ (Syn_Inst : Synth_Instance_Acc; Decl : Node; Is_Subprg : Boolean);
+
procedure Synth_Declarations (Syn_Inst : Synth_Instance_Acc;
Decls : Iir;
Is_Subprg : Boolean := False);
diff --git a/src/synth/synth-stmts.adb b/src/synth/synth-stmts.adb
index 5977c978e..c8b0e1f2c 100644
--- a/src/synth/synth-stmts.adb
+++ b/src/synth/synth-stmts.adb
@@ -2608,25 +2608,45 @@ package body Synth.Stmts is
procedure Synth_Verification_Unit
(Syn_Inst : Synth_Instance_Acc; Unit : Node)
is
+ use Areapools;
+ Prev_Instance_Pool : constant Areapool_Acc := Instance_Pool;
+ Unit_Inst : Synth_Instance_Acc;
+ Unit_Sname : Sname;
+ M : Areapools.Mark_Type;
Item : Node;
begin
+ Unit_Sname := New_Sname (Get_Sname (Syn_Inst), Get_Identifier (Unit));
+ Unit_Inst := Make_Instance (Syn_Inst, Unit, Unit_Sname);
+ Mark (M, Proc_Pool);
+ Instance_Pool := Proc_Pool'Access;
+
Item := Get_Vunit_Item_Chain (Unit);
while Item /= Null_Node loop
case Get_Kind (Item) is
when Iir_Kind_Psl_Default_Clock =>
null;
when Iir_Kind_Psl_Assert_Directive =>
- Synth_Psl_Assert_Directive (Syn_Inst, Item);
+ Synth_Psl_Assert_Directive (Unit_Inst, Item);
when Iir_Kind_Psl_Assume_Directive =>
- Synth_Psl_Assume_Directive (Syn_Inst, Item);
+ Synth_Psl_Assume_Directive (Unit_Inst, Item);
when Iir_Kind_Psl_Restrict_Directive =>
- Synth_Psl_Restrict_Directive (Syn_Inst, Item);
+ Synth_Psl_Restrict_Directive (Unit_Inst, Item);
when Iir_Kind_Psl_Cover_Directive =>
- Synth_Psl_Cover_Directive (Syn_Inst, Item);
+ Synth_Psl_Cover_Directive (Unit_Inst, Item);
+ when Iir_Kind_Signal_Declaration
+ | Iir_Kind_Function_Declaration
+ | Iir_Kind_Procedure_Declaration
+ | Iir_Kind_Function_Body
+ | Iir_Kind_Procedure_Body =>
+ Synth_Declaration (Unit_Inst, Item, False);
when others =>
Error_Kind ("synth_verification_unit", Item);
end case;
Item := Get_Chain (Item);
end loop;
+
+ Free_Instance (Unit_Inst);
+ Release (M, Proc_Pool);
+ Instance_Pool := Prev_Instance_Pool;
end Synth_Verification_Unit;
end Synth.Stmts;