diff options
author | Tristan Gingold <tgingold@free.fr> | 2017-11-24 05:44:28 +0100 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2017-11-24 05:44:28 +0100 |
commit | 947d5b8876198dda1cf8e0c65a554e5dbd5e80f2 (patch) | |
tree | 67d8064b5a42ad3f1837984410022eb6018f1fb3 /src/vhdl | |
parent | 345bcdbf2fbe012a8b4da772329d18757fef5594 (diff) | |
download | ghdl-947d5b8876198dda1cf8e0c65a554e5dbd5e80f2.tar.gz ghdl-947d5b8876198dda1cf8e0c65a554e5dbd5e80f2.tar.bz2 ghdl-947d5b8876198dda1cf8e0c65a554e5dbd5e80f2.zip |
simulation: refactoring (move block_instance to iir_values).
Diffstat (limited to 'src/vhdl')
-rw-r--r-- | src/vhdl/simulate/annotations.adb | 7 | ||||
-rw-r--r-- | src/vhdl/simulate/annotations.ads | 35 | ||||
-rw-r--r-- | src/vhdl/simulate/debugger-ams.ads | 1 | ||||
-rw-r--r-- | src/vhdl/simulate/debugger.adb | 2 | ||||
-rw-r--r-- | src/vhdl/simulate/debugger.ads | 2 | ||||
-rw-r--r-- | src/vhdl/simulate/elaboration.ads | 72 | ||||
-rw-r--r-- | src/vhdl/simulate/execution.ads | 3 | ||||
-rw-r--r-- | src/vhdl/simulate/file_operation.ads | 1 | ||||
-rw-r--r-- | src/vhdl/simulate/iir_values.ads | 105 | ||||
-rw-r--r-- | src/vhdl/simulate/simulation-main.adb | 1 | ||||
-rw-r--r-- | src/vhdl/simulate/simulation.ads | 1 |
11 files changed, 113 insertions, 117 deletions
diff --git a/src/vhdl/simulate/annotations.adb b/src/vhdl/simulate/annotations.adb index acc6e8920..c898aa01d 100644 --- a/src/vhdl/simulate/annotations.adb +++ b/src/vhdl/simulate/annotations.adb @@ -57,8 +57,7 @@ package body Annotations is -- For a subprogram in a package Current_Scope := (Scope_Kind_Frame, Scope_Depth_Type'First); when Scope_Kind_Frame => - Current_Scope := (Scope_Kind_Frame, - Current_Scope.Depth + 1); + Current_Scope := (Scope_Kind_Frame, Current_Scope.Depth + 1); when Scope_Kind_Component => raise Internal_Error; end case; @@ -468,8 +467,8 @@ package body Annotations is Package_Info := Get_Info (Inter); Current_Scope := (Kind => Scope_Kind_Pkg_Inst, - Pkg_Param => 0, - Pkg_Parent => Package_Info); + Pkg_Param => 0); +-- Pkg_Parent => Package_Info); Annotate_Interface_List (Package_Info, Get_Generic_Chain (Inter), True); diff --git a/src/vhdl/simulate/annotations.ads b/src/vhdl/simulate/annotations.ads index e45084079..c8519fa46 100644 --- a/src/vhdl/simulate/annotations.ads +++ b/src/vhdl/simulate/annotations.ads @@ -28,16 +28,12 @@ package Annotations is procedure Disp_Vhdl_Info (Node : Iir); procedure Disp_Tree_Info (Node : Iir); - type Object_Slot_Type is new Natural; - subtype Parameter_Slot_Type is Object_Slot_Type range 0 .. 2**15; - - type Pkg_Index_Type is new Natural; - Nbr_Packages : Pkg_Index_Type := 0; - -- For Kind_Extra: a number. Kind_Extra is not used by annotations, and -- is free for another pass like preelab. type Extra_Slot_Type is new Natural; + Nbr_Packages : Pkg_Index_Type := 0; + -- Annotations are used to collect informations for elaboration and to -- locate iir_value_literal for signals, variables or constants. @@ -55,33 +51,6 @@ package Annotations is type Sim_Info_Type (Kind : Sim_Info_Kind); type Sim_Info_Acc is access all Sim_Info_Type; - -- Scope corresponding to an object. - type Scope_Kind_Type is - ( - -- For a package, the depth is - Scope_Kind_Package, - Scope_Kind_Component, - Scope_Kind_Frame, - Scope_Kind_Pkg_Inst, - Scope_Kind_None - ); - type Scope_Depth_Type is range 0 .. 2**15; - type Scope_Type (Kind : Scope_Kind_Type := Scope_Kind_None) is record - case Kind is - when Scope_Kind_Package => - Pkg_Index : Pkg_Index_Type; - when Scope_Kind_Component => - null; - when Scope_Kind_Frame => - Depth : Scope_Depth_Type; - when Scope_Kind_Pkg_Inst => - Pkg_Param : Parameter_Slot_Type; - Pkg_Parent : Sim_Info_Acc; - when Scope_Kind_None => - null; - end case; - end record; - type Instance_Slot_Type is new Integer; Invalid_Instance_Slot : constant Instance_Slot_Type := -1; diff --git a/src/vhdl/simulate/debugger-ams.ads b/src/vhdl/simulate/debugger-ams.ads index 4b9de8fed..f89fda276 100644 --- a/src/vhdl/simulate/debugger-ams.ads +++ b/src/vhdl/simulate/debugger-ams.ads @@ -16,7 +16,6 @@ -- Software Foundation, 59 Temple Place - Suite 330, Boston, MA -- 02111-1307, USA. -with Iir_Values; use Iir_Values; with Elaboration.AMS; use Elaboration.AMS; package Debugger.AMS is diff --git a/src/vhdl/simulate/debugger.adb b/src/vhdl/simulate/debugger.adb index 977e6e3a3..eea71f84c 100644 --- a/src/vhdl/simulate/debugger.adb +++ b/src/vhdl/simulate/debugger.adb @@ -20,7 +20,6 @@ with System; with Ada.Text_IO; use Ada.Text_IO; with Tables; with Types; use Types; -with Iir_Values; use Iir_Values; with Name_Table; with Str_Table; with Files_Map; @@ -34,6 +33,7 @@ with Std_Names; with Libraries; with Std_Package; with Annotations; use Annotations; +with Elaboration; use Elaboration; with Iirs_Utils; use Iirs_Utils; with Errorout; use Errorout; with Disp_Vhdl; diff --git a/src/vhdl/simulate/debugger.ads b/src/vhdl/simulate/debugger.ads index b8b5c8e9e..ecb170eaa 100644 --- a/src/vhdl/simulate/debugger.ads +++ b/src/vhdl/simulate/debugger.ads @@ -16,8 +16,8 @@ -- Software Foundation, 59 Temple Place - Suite 330, Boston, MA -- 02111-1307, USA. -with Elaboration; use Elaboration; with Iirs; use Iirs; +with Iir_Values; use Iir_Values; package Debugger is Flag_Debugger : Boolean := False; diff --git a/src/vhdl/simulate/elaboration.ads b/src/vhdl/simulate/elaboration.ads index 8a1fb6979..6bbb91cc1 100644 --- a/src/vhdl/simulate/elaboration.ads +++ b/src/vhdl/simulate/elaboration.ads @@ -16,14 +16,12 @@ -- Software Foundation, 59 Temple Place - Suite 330, Boston, MA -- 02111-1307, USA. -with Ada.Unchecked_Deallocation; with Tables; with Types; use Types; with Iirs; use Iirs; with Iir_Values; use Iir_Values; with Grt.Types; use Grt.Types; with Annotations; use Annotations; -with Areapools; -- This package elaborates design hierarchy. @@ -31,82 +29,12 @@ package Elaboration is Trace_Elaboration : Boolean := False; Trace_Drivers : Boolean := False; - -- A block instance with its architecture/entity declaration is an - -- instancied entity. - type Block_Instance_Type; - type Block_Instance_Acc is access Block_Instance_Type; - - type Objects_Array is array (Object_Slot_Type range <>) of - Iir_Value_Literal_Acc; - - type Block_Instance_Id is new Natural; - No_Block_Instance_Id : constant Block_Instance_Id := 0; - -- Number of block instances and also Id of the last one. Nbr_Block_Instances : Block_Instance_Id := 0; -- A block instance with its architecture/entity declaration is an -- instancied entity. - type Block_Instance_Type (Max_Objs : Object_Slot_Type) is record - -- Flag for wait statement: true if not yet executed. - In_Wait_Flag : Boolean; - - -- Uniq number for a block instance. - Id : Block_Instance_Id; - - -- Useful informations for a dynamic block (ie, a frame). - -- The scope level and an access to the block of upper scope level. - Block_Scope : Scope_Type; - Up_Block : Block_Instance_Acc; - - -- Block, architecture, package, process, component instantiation for - -- this instance. - Label : Iir; - - -- For blocks: corresponding block (different from label for direct - -- component instantiation statement and generate iterator). - -- For packages: Null_Iir - -- For subprograms and processes: statement being executed. - Stmt : Iir; - - -- Instanciation tree. - - -- Parent is always set (but null for top-level block and packages) - Parent: Block_Instance_Acc; - - -- Chain of children. They are in declaration order after elaboration. - -- (in reverse order during elaboration). - -- Not null only for blocks and processes. - Children: Block_Instance_Acc; - Brother: Block_Instance_Acc; - - -- Port association map for this block, if any. - Ports_Map : Iir; - - -- Pool marker for the child (only for subprograms and processes). - Marker : Areapools.Mark_Type; - - -- Reference to the actuals, for copy-out when returning from a - -- procedure. - Actuals_Ref : Value_Array_Acc; - - -- Only for function frame; contains the result. - Result: Iir_Value_Literal_Acc; - - -- Last object elaborated (or number of objects elaborated). - -- Note: this is generally the slot index of the next object to be - -- elaborated (this may be wrong for dynamic objects due to execution - -- branches). - Elab_Objects : Object_Slot_Type := 0; - - -- Values of the objects in that frame. - Objects : Objects_Array (1 .. Max_Objs); - end record; - - procedure Free is new Ada.Unchecked_Deallocation - (Object => Block_Instance_Type, Name => Block_Instance_Acc); - procedure Elaborate_Design (Design: Iir_Design_Unit); procedure Elaborate_Declarative_Part diff --git a/src/vhdl/simulate/execution.ads b/src/vhdl/simulate/execution.ads index 40be27391..d9406be94 100644 --- a/src/vhdl/simulate/execution.ads +++ b/src/vhdl/simulate/execution.ads @@ -20,7 +20,6 @@ with Types; use Types; with Iirs; use Iirs; with Iir_Values; use Iir_Values; with Elaboration; use Elaboration; -with Annotations; with Areapools; use Areapools; package Execution is @@ -127,7 +126,7 @@ package Execution is return Iir_Value_Literal_Acc; function Get_Instance_By_Scope - (Instance: Block_Instance_Acc; Scope: Annotations.Scope_Type) + (Instance: Block_Instance_Acc; Scope: Scope_Type) return Block_Instance_Acc; function Get_Instance_For_Slot (Instance: Block_Instance_Acc; Decl: Iir) diff --git a/src/vhdl/simulate/file_operation.ads b/src/vhdl/simulate/file_operation.ads index ea59f60d6..ef3b8b22b 100644 --- a/src/vhdl/simulate/file_operation.ads +++ b/src/vhdl/simulate/file_operation.ads @@ -18,7 +18,6 @@ with Iirs; use Iirs; with Iir_Values; use Iir_Values; -with Elaboration; use Elaboration; with Grt.Files; use Grt.Files; with Grt.Types; use Grt.Types; diff --git a/src/vhdl/simulate/iir_values.ads b/src/vhdl/simulate/iir_values.ads index a134df438..68b6d1326 100644 --- a/src/vhdl/simulate/iir_values.ads +++ b/src/vhdl/simulate/iir_values.ads @@ -17,6 +17,7 @@ -- 02111-1307, USA. with Ada.Text_IO; +with Ada.Unchecked_Deallocation; with Types; use Types; with Iirs; use Iirs; with Grt.Types; use Grt.Types; @@ -163,6 +164,11 @@ package Iir_Values is type Value_Array_Acc is access Value_Array; + -- A block instance with its architecture/entity declaration is an + -- instancied entity. + type Block_Instance_Type; + type Block_Instance_Acc is access Block_Instance_Type; + type Iir_Value_Literal (Kind: Iir_Value_Kind) is record case Kind is when Iir_Value_B1 => @@ -204,8 +210,105 @@ package Iir_Values is end case; end record; + type Object_Slot_Type is new Natural; + subtype Parameter_Slot_Type is Object_Slot_Type range 0 .. 2**15; + + type Pkg_Index_Type is new Natural; + + -- Scope corresponding to an object. + type Scope_Kind_Type is + ( + -- For a package, the depth is + Scope_Kind_Package, + Scope_Kind_Component, + Scope_Kind_Frame, + Scope_Kind_Pkg_Inst, + Scope_Kind_None + ); + type Scope_Depth_Type is range 0 .. 2**15; + type Scope_Type (Kind : Scope_Kind_Type := Scope_Kind_None) is record + case Kind is + when Scope_Kind_Package => + Pkg_Index : Pkg_Index_Type; + when Scope_Kind_Component => + null; + when Scope_Kind_Frame => + Depth : Scope_Depth_Type; + when Scope_Kind_Pkg_Inst => + Pkg_Param : Parameter_Slot_Type; + -- Pkg_Parent : Sim_Info_Acc; + when Scope_Kind_None => + null; + end case; + end record; + + type Block_Instance_Id is new Natural; + No_Block_Instance_Id : constant Block_Instance_Id := 0; + + type Objects_Array is array (Object_Slot_Type range <>) of + Iir_Value_Literal_Acc; + + type Block_Instance_Type (Max_Objs : Object_Slot_Type) is record + -- Flag for wait statement: true if not yet executed. + In_Wait_Flag : Boolean; + + -- Uniq number for a block instance. + Id : Block_Instance_Id; + + -- Useful informations for a dynamic block (ie, a frame). + -- The scope level and an access to the block of upper scope level. + Block_Scope : Scope_Type; + Up_Block : Block_Instance_Acc; + + -- Block, architecture, package, process, component instantiation for + -- this instance. + Label : Iir; + + -- For blocks: corresponding block (different from label for direct + -- component instantiation statement and generate iterator). + -- For packages: Null_Iir + -- For subprograms and processes: statement being executed. + Stmt : Iir; + + -- Instanciation tree. + + -- Parent is always set (but null for top-level block and packages) + Parent: Block_Instance_Acc; + + -- Chain of children. They are in declaration order after elaboration. + -- (in reverse order during elaboration). + -- Not null only for blocks and processes. + Children: Block_Instance_Acc; + Brother: Block_Instance_Acc; + + -- Port association map for this block, if any. + Ports_Map : Iir; + + -- Pool marker for the child (only for subprograms and processes). + Marker : Areapools.Mark_Type; + + -- Reference to the actuals, for copy-out when returning from a + -- procedure. + Actuals_Ref : Value_Array_Acc; + + -- Only for function frame; contains the result. + Result: Iir_Value_Literal_Acc; + + -- Last object elaborated (or number of objects elaborated). + -- Note: this is generally the slot index of the next object to be + -- elaborated (this may be wrong for dynamic objects due to execution + -- branches). + Elab_Objects : Object_Slot_Type := 0; + + -- Values of the objects in that frame. + Objects : Objects_Array (1 .. Max_Objs); + end record; + + procedure Free is new Ada.Unchecked_Deallocation + (Object => Block_Instance_Type, Name => Block_Instance_Acc); + + -- What is chosen for time. - -- Currently only int32 is available, but time should use an int64. subtype Iir_Value_Time is Ghdl_I64; Global_Pool : aliased Areapool; diff --git a/src/vhdl/simulate/simulation-main.adb b/src/vhdl/simulate/simulation-main.adb index 686ec0dc0..7c68d0b68 100644 --- a/src/vhdl/simulate/simulation-main.adb +++ b/src/vhdl/simulate/simulation-main.adb @@ -25,6 +25,7 @@ with PSL.Nodes; with PSL.NFAs; with Std_Package; with Trans_Analyzes; +with Elaboration; use Elaboration; with Execution; use Execution; with Ieee.Std_Logic_1164; with Grt.Main; diff --git a/src/vhdl/simulate/simulation.ads b/src/vhdl/simulate/simulation.ads index 55af11a2e..fa3a54982 100644 --- a/src/vhdl/simulate/simulation.ads +++ b/src/vhdl/simulate/simulation.ads @@ -20,7 +20,6 @@ with System; with Grt.Types; use Grt.Types; with Iirs; use Iirs; with Iir_Values; use Iir_Values; -with Elaboration; use Elaboration; package Simulation is Trace_Simulation : Boolean := False; |