diff options
Diffstat (limited to 'src/simulate/execution.ads')
-rw-r--r-- | src/simulate/execution.ads | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/src/simulate/execution.ads b/src/simulate/execution.ads deleted file mode 100644 index faed111..0000000 --- a/src/simulate/execution.ads +++ /dev/null @@ -1,185 +0,0 @@ --- Interpreted simulation --- Copyright (C) 2014 Tristan Gingold --- --- GHDL is free software; you can redistribute it and/or modify it under --- the terms of the GNU General Public License as published by the Free --- Software Foundation; either version 2, or (at your option) any later --- version. --- --- GHDL is distributed in the hope that it will be useful, but WITHOUT ANY --- WARRANTY; without even the implied warranty of MERCHANTABILITY or --- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --- for more details. --- --- You should have received a copy of the GNU General Public License --- along with GHDL; see the file COPYING. If not, write to the Free --- Software Foundation, 59 Temple Place - Suite 330, Boston, MA --- 02111-1307, USA. - -with Types; use Types; -with Iirs; use Iirs; -with Iir_Values; use Iir_Values; -with Elaboration; use Elaboration; -with Areapools; use Areapools; - -package Execution is - Trace_Statements : Boolean := False; - - -- If true, disp current time in assert message. - Disp_Time_Before_Values: Boolean := False; - - Current_Component : Block_Instance_Acc := null; - - -- State associed with each process. - type Process_State_Type is record - -- The process instance. - Top_Instance: Block_Instance_Acc := null; - Proc: Iir := Null_Iir; - - -- Memory pool to allocate objects from. - Pool : aliased Areapool; - - -- The stack of the process. - Instance : Block_Instance_Acc := null; - end record; - type Process_State_Acc is access all Process_State_Type; - - Simulation_Finished : exception; - - -- Current process being executed. This is only for the debugger. - Current_Process : Process_State_Acc; - - -- Pseudo process used for resolution functions, ... - No_Process : Process_State_Acc := new Process_State_Type; - -- Execute a list of sequential statements. - -- Return when there is no more statements to execute. - procedure Execute_Sequential_Statements (Proc : Process_State_Acc); - - -- Evaluate an expression. - function Execute_Expression (Block: Block_Instance_Acc; Expr: Iir) - return Iir_Value_Literal_Acc; - - -- Evaluate boolean condition COND. If COND is Null_Iir, returns true. - function Execute_Condition (Instance : Block_Instance_Acc; - Cond : Iir) return Boolean; - - -- Execute a name. Return the value if Ref is False, or the reference - -- (for a signal, a quantity or a terminal) if Ref is True. - function Execute_Name (Block: Block_Instance_Acc; - Expr: Iir; - Ref : Boolean := False) - return Iir_Value_Literal_Acc; - - procedure Execute_Name_With_Base (Block: Block_Instance_Acc; - Expr: Iir; - Base : Iir_Value_Literal_Acc; - Res : out Iir_Value_Literal_Acc; - Is_Sig : out Boolean); - - -- Return the initial value (default value) of signal name EXPR. To be - -- used only during (non-dynamic) elaboration. - function Execute_Signal_Init_Value (Block : Block_Instance_Acc; Expr : Iir) - return Iir_Value_Literal_Acc; - - function Execute_Expression_With_Type - (Block: Block_Instance_Acc; - Expr: Iir; - Expr_Type : Iir) - return Iir_Value_Literal_Acc; - - function Execute_Resolution_Function - (Block: Block_Instance_Acc; Imp : Iir; Arr : Iir_Value_Literal_Acc) - return Iir_Value_Literal_Acc; - - function Execute_Assoc_Conversion - (Block : Block_Instance_Acc; Conv : Iir; Val : Iir_Value_Literal_Acc) - return Iir_Value_Literal_Acc; - - -- Sub function common for left/right/length/low/high attributes. - -- Return bounds of PREFIX. - function Execute_Bounds (Block: Block_Instance_Acc; Prefix: Iir) - return Iir_Value_Literal_Acc; - - -- Compute the offset for INDEX into a range BOUNDS. - -- EXPR is only used in case of error. - function Get_Index_Offset - (Index: Iir_Value_Literal_Acc; - Bounds: Iir_Value_Literal_Acc; - Expr: Iir) - return Iir_Index32; - - function Execute_Low_Limit (Bounds : Iir_Value_Literal_Acc) - return Iir_Value_Literal_Acc; - - function Get_Instance_For_Slot (Instance: Block_Instance_Acc; Decl: Iir) - return Block_Instance_Acc; - - -- Store VALUE to TARGET. - -- Note: VALUE is not freed. - procedure Assign_Value_To_Object - (Instance: Block_Instance_Acc; - Target: Iir_Value_Literal_Acc; - Target_Type: Iir; - Value: Iir_Value_Literal_Acc; - Stmt: Iir); - - -- Check VALUE follows the constraints of DEF. - -- INSTANCE,DEF is the definition of a subtype. - -- EXPR is just used in case of error to display the location - -- If there is no location, EXPR can be null. - -- Implicitly convert VALUE (array cases). - -- Return in case of success. - -- Raise errorout.execution_constraint_error in case of failure. - procedure Check_Constraints - (Instance: Block_Instance_Acc; - Value: Iir_Value_Literal_Acc; - Def: Iir; Expr: Iir); - - -- If VALUE is not an array, then this is a no-op. - -- If VALUE is an array, then bounds are checked and converted. INSTANCE - -- is the instance corresponding to REF_TYPE. - -- EXPR is used in case of error. - procedure Implicit_Array_Conversion (Value : in out Iir_Value_Literal_Acc; - Ref_Value : Iir_Value_Literal_Acc; - Expr : Iir); - procedure Implicit_Array_Conversion (Instance : Block_Instance_Acc; - Value : in out Iir_Value_Literal_Acc; - Ref_Type : Iir; - Expr : Iir); - - -- Create an iir_value_literal of kind iir_value_array and of life LIFE. - -- Allocate the array of bounds, and fill it from A_TYPE. - -- Allocate the array of values. - function Create_Array_Bounds_From_Type - (Block : Block_Instance_Acc; - A_Type : Iir; - Create_Val_Array : Boolean) - return Iir_Value_Literal_Acc; - - -- Create a range from LEN for scalar type ATYPE. - function Create_Bounds_From_Length (Block : Block_Instance_Acc; - Atype : Iir; - Len : Iir_Index32) - return Iir_Value_Literal_Acc; - - -- Return TRUE iff VAL is in the range defined by BOUNDS. - function Is_In_Range (Val : Iir_Value_Literal_Acc; - Bounds : Iir_Value_Literal_Acc) - return Boolean; - - -- Increment or decrement VAL according to BOUNDS.DIR. - procedure Update_Loop_Index (Val : Iir_Value_Literal_Acc; - Bounds : Iir_Value_Literal_Acc); - - -- Create a block instance for subprogram IMP. - function Create_Subprogram_Instance (Instance : Block_Instance_Acc; - Imp : Iir) - return Block_Instance_Acc; - - function Execute_Function_Body (Instance : Block_Instance_Acc; Func : Iir) - return Iir_Value_Literal_Acc; - - function Execute_Image_Attribute (Val : Iir_Value_Literal_Acc; - Expr_Type : Iir) - return String; -end Execution; |