aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/simulate/simul-annotations.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/vhdl/simulate/simul-annotations.adb')
-rw-r--r--src/vhdl/simulate/simul-annotations.adb77
1 files changed, 45 insertions, 32 deletions
diff --git a/src/vhdl/simulate/simul-annotations.adb b/src/vhdl/simulate/simul-annotations.adb
index 551974a88..50700eda7 100644
--- a/src/vhdl/simulate/simul-annotations.adb
+++ b/src/vhdl/simulate/simul-annotations.adb
@@ -107,6 +107,7 @@ package body Simul.Annotations is
when Kind_Block
| Kind_Process
| Kind_Frame
+ | Kind_Package
| Kind_Scalar_Type
| Kind_File_Type
| Kind_Extra =>
@@ -1043,29 +1044,24 @@ package body Simul.Annotations is
Current_Scope := (Kind => Scope_Kind_None);
end Annotate_Architecture;
- procedure Annotate_Package (Decl: Iir_Package_Declaration)
+ procedure Annotate_Package
+ (Block_Info : Sim_Info_Acc; Decl: Iir_Package_Declaration)
is
Prev_Scope : constant Scope_Type := Current_Scope;
- Package_Info: Sim_Info_Acc;
+ Package_Info : Sim_Info_Acc;
Header : Iir;
begin
pragma Assert (Current_Scope.Kind = Scope_Kind_None);
- if Get_Kind (Decl) = Iir_Kind_Package_Instantiation_Declaration
- or else not Is_Uninstantiated_Package (Decl)
- then
- Nbr_Packages := Nbr_Packages + 1;
- Current_Scope := (Scope_Kind_Package, Nbr_Packages);
- else
- Increment_Current_Scope;
- end if;
+ Increment_Current_Scope;
+ Block_Info.Nbr_Objects := Block_Info.Nbr_Objects + 1;
Package_Info := new Sim_Info_Type'
- (Kind => Kind_Block,
- Inst_Slot => Invalid_Instance_Slot,
+ (Kind => Kind_Package,
Frame_Scope => Current_Scope,
Nbr_Objects => 0,
- Nbr_Instances => 0);
+ Pkg_Slot => Block_Info.Nbr_Objects,
+ Pkg_Parent => Block_Info);
Set_Info (Decl, Package_Info);
@@ -1146,22 +1142,19 @@ package body Simul.Annotations is
end Annotate_Block_Configuration;
procedure Annotate_Configuration_Declaration
- (Decl : Iir_Configuration_Declaration)
+ (Block_Info : Sim_Info_Acc; Decl : Iir_Configuration_Declaration)
is
Config_Info: Sim_Info_Acc;
begin
pragma Assert (Current_Scope.Kind = Scope_Kind_None);
- Nbr_Packages := Nbr_Packages + 1;
- Current_Scope := (Scope_Kind_Package, Nbr_Packages);
-
+ Block_Info.Nbr_Objects := Block_Info.Nbr_Objects + 1;
Config_Info := new Sim_Info_Type'
- (Kind => Kind_Block,
- Inst_Slot => Invalid_Instance_Slot,
+ (Kind => Kind_Package,
Frame_Scope => Current_Scope,
Nbr_Objects => 0,
- Nbr_Instances => 0);
-
+ Pkg_Slot => Block_Info.Nbr_Objects,
+ Pkg_Parent => Block_Info);
Set_Info (Decl, Config_Info);
Annotate_Declaration_List (Config_Info, Get_Declaration_Chain (Decl));
@@ -1202,24 +1195,34 @@ package body Simul.Annotations is
when Iir_Kind_Architecture_Body =>
Annotate_Architecture (El);
when Iir_Kind_Package_Declaration =>
- Annotate_Package (El);
declare
use Std_Package;
begin
if El = Standard_Package then
+ pragma Assert (Global_Info = null);
+ Global_Info :=
+ new Sim_Info_Type'(Kind => Kind_Block,
+ Frame_Scope => Current_Scope,
+ Nbr_Objects => 0,
+ Inst_Slot => Invalid_Instance_Slot,
+ Nbr_Instances => 0);
+ Annotate_Package (Global_Info, El);
-- These types are not in std.standard!
Annotate_Type_Definition
(Get_Info (El), Convertible_Integer_Type_Definition);
Annotate_Type_Definition
(Get_Info (El), Convertible_Real_Type_Definition);
+ else
+ pragma Assert (Global_Info /= null);
+ Annotate_Package (Global_Info, El);
end if;
end;
when Iir_Kind_Package_Body =>
Annotate_Package_Body (El);
when Iir_Kind_Configuration_Declaration =>
- Annotate_Configuration_Declaration (El);
+ Annotate_Configuration_Declaration (Global_Info, El);
when Iir_Kind_Package_Instantiation_Declaration =>
- Annotate_Package (El);
+ Annotate_Package (Global_Info, El);
when Iir_Kind_Context_Declaration =>
null;
when others =>
@@ -1259,7 +1262,9 @@ package body Simul.Annotations is
Put_Line
("-- nbr objects:" & Object_Slot_Type'Image (Info.Nbr_Objects));
- when Kind_Frame | Kind_Process =>
+ when Kind_Frame
+ | Kind_Process
+ | Kind_Package =>
Put_Line ("-- scope:" & Image (Info.Frame_Scope));
Set_Col (Indent);
Put_Line
@@ -1291,17 +1296,25 @@ package body Simul.Annotations is
return;
end if;
case Info.Kind is
- when Kind_Block | Kind_Frame | Kind_Process =>
+ when Kind_Block
+ | Kind_Frame
+ | Kind_Process
+ | Kind_Package =>
Put_Line ("scope:" & Image (Info.Frame_Scope));
Set_Col (Indent);
- Put_Line ("inst_slot:"
- & Instance_Slot_Type'Image (Info.Inst_Slot));
- Set_Col (Indent);
Put_Line ("nbr objects:"
& Object_Slot_Type'Image (Info.Nbr_Objects));
- Set_Col (Indent);
- Put_Line ("nbr instance:"
- & Instance_Slot_Type'Image (Info.Nbr_Instances));
+ case Info.Kind is
+ when Kind_Block =>
+ Set_Col (Indent);
+ Put_Line ("inst_slot:"
+ & Instance_Slot_Type'Image (Info.Inst_Slot));
+ Set_Col (Indent);
+ Put_Line ("nbr instance:"
+ & Instance_Slot_Type'Image (Info.Nbr_Instances));
+ when others =>
+ null;
+ end case;
when Kind_Object | Kind_Signal | Kind_File
| Kind_Terminal | Kind_Quantity | Kind_Environment
| Kind_PSL =>