diff options
author | Tristan Gingold <tgingold@free.fr> | 2020-05-06 18:38:36 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2020-05-06 18:38:36 +0200 |
commit | 9ebdd46defd0c2ce54d0e04c293e9d5a5b111026 (patch) | |
tree | bc2efdc6d7ffa1f8fb1409c4ee37d7a1c15f7c69 /src | |
parent | 4e6760203fc2b88567ac37fd6054c5a684d099ca (diff) | |
download | ghdl-9ebdd46defd0c2ce54d0e04c293e9d5a5b111026.tar.gz ghdl-9ebdd46defd0c2ce54d0e04c293e9d5a5b111026.tar.bz2 ghdl-9ebdd46defd0c2ce54d0e04c293e9d5a5b111026.zip |
synth: revert a previous commit: remove the En parameter.
Diffstat (limited to 'src')
-rw-r--r-- | src/synth/synth-aggr.adb | 28 | ||||
-rw-r--r-- | src/synth/synth-aggr.ads | 3 | ||||
-rw-r--r-- | src/synth/synth-decls.adb | 56 | ||||
-rw-r--r-- | src/synth/synth-decls.ads | 13 | ||||
-rw-r--r-- | src/synth/synth-expr.adb | 103 | ||||
-rw-r--r-- | src/synth/synth-expr.ads | 10 | ||||
-rw-r--r-- | src/synth/synth-files_operations.adb | 7 | ||||
-rw-r--r-- | src/synth/synth-insts.adb | 41 | ||||
-rw-r--r-- | src/synth/synth-oper.adb | 26 | ||||
-rw-r--r-- | src/synth/synth-oper.ads | 12 | ||||
-rw-r--r-- | src/synth/synth-stmts.adb | 226 | ||||
-rw-r--r-- | src/synth/synth-stmts.ads | 12 |
12 files changed, 226 insertions, 311 deletions
diff --git a/src/synth/synth-aggr.adb b/src/synth/synth-aggr.adb index f7cd5278d..0437bb3fb 100644 --- a/src/synth/synth-aggr.adb +++ b/src/synth/synth-aggr.adb @@ -20,6 +20,7 @@ with Types; use Types; +with Netlists; use Netlists; with Netlists.Utils; use Netlists.Utils; with Netlists.Builders; use Netlists.Builders; @@ -98,7 +99,6 @@ package body Synth.Aggr is procedure Fill_Array_Aggregate (Syn_Inst : Synth_Instance_Acc; Aggr : Node; - En : Net; Res : Valtyp_Array_Acc; Typ : Type_Acc; First_Pos : Nat32; @@ -125,7 +125,7 @@ package body Synth.Aggr is Nbr_Els := Nbr_Els + 1; if Dim = Strides'Last then - Val := Synth_Expression_With_Type (Syn_Inst, Value, El_Typ, En); + Val := Synth_Expression_With_Type (Syn_Inst, Value, El_Typ); Val := Synth_Subtype_Conversion (Ctxt, Val, El_Typ, False, Value); pragma Assert (Res (Pos) = No_Valtyp); Res (Pos) := Val; @@ -138,7 +138,7 @@ package body Synth.Aggr is end if; else Fill_Array_Aggregate - (Syn_Inst, Value, En, Res, Typ, Pos, Strides, Dim + 1, + (Syn_Inst, Value, Res, Typ, Pos, Strides, Dim + 1, Sub_Const, Sub_Err); Const_P := Const_P and Sub_Const; Err_P := Err_P or Sub_Err; @@ -192,7 +192,7 @@ package body Synth.Aggr is Val_Len : Uns32; begin Val := Synth_Expression_With_Basetype - (Syn_Inst, Value, En); + (Syn_Inst, Value); Val_Len := Get_Bound_Length (Val.Typ, 1); pragma Assert (Stride = 1); if Pos - First_Pos > Nat32 (Bound.Len - Val_Len) then @@ -226,7 +226,7 @@ package body Synth.Aggr is Idx : Valtyp; Off : Uns32; begin - Idx := Synth_Expression (Syn_Inst, Ch, No_Net); + Idx := Synth_Expression (Syn_Inst, Ch); if not Is_Static (Idx.Val) then Error_Msg_Synth (+Ch, "choice is not static"); else @@ -267,7 +267,7 @@ package body Synth.Aggr is end if; -- FIXME: can the expression be unbounded ? Val := Synth_Expression_With_Basetype - (Syn_Inst, Value, En); + (Syn_Inst, Value); -- The length must match the range. Rng_Len := Get_Range_Length (Rng); if Get_Bound_Length (Val.Typ, 1) /= Rng_Len then @@ -302,7 +302,6 @@ package body Synth.Aggr is procedure Fill_Record_Aggregate (Syn_Inst : Synth_Instance_Acc; Aggr : Node; Aggr_Typ : Type_Acc; - En : Net; Rec : Valtyp_Array_Acc; Err_P : out Boolean; Const_P : out Boolean) @@ -319,7 +318,7 @@ package body Synth.Aggr is El_Type : Type_Acc; begin El_Type := Aggr_Typ.Rec.E (Iir_Index32 (Pos + 1)).Typ; - Val := Synth_Expression_With_Type (Syn_Inst, Value, El_Type, En); + Val := Synth_Expression_With_Type (Syn_Inst, Value, El_Type); if Const_P and not Is_Static (Val.Val) then Const_P := False; end if; @@ -388,7 +387,6 @@ package body Synth.Aggr is function Synth_Aggregate_Array (Syn_Inst : Synth_Instance_Acc; Aggr : Node; - En : Net; Aggr_Type : Type_Acc) return Valtyp is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); @@ -401,7 +399,7 @@ package body Synth.Aggr is begin Tab_Res := new Valtyp_Array'(1 .. Nat32 (Flen) => No_Valtyp); - Fill_Array_Aggregate (Syn_Inst, Aggr, En, Tab_Res, + Fill_Array_Aggregate (Syn_Inst, Aggr, Tab_Res, Aggr_Type, 1, Strides, 1, Const_P, Err_P); if Err_P then return No_Valtyp; @@ -436,7 +434,6 @@ package body Synth.Aggr is function Synth_Aggregate_Record (Syn_Inst : Synth_Instance_Acc; Aggr : Node; - En : Net; Aggr_Type : Type_Acc) return Valtyp is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); @@ -450,7 +447,7 @@ package body Synth.Aggr is new Valtyp_Array'(1 .. Nat32 (Aggr_Type.Rec.Len) => No_Valtyp); Fill_Record_Aggregate - (Syn_Inst, Aggr, Aggr_Type, En, Tab_Res, Err_P, Const_P); + (Syn_Inst, Aggr, Aggr_Type, Tab_Res, Err_P, Const_P); if Err_P then Res := No_Valtyp; @@ -473,7 +470,6 @@ package body Synth.Aggr is -- Aggr_Type is the type from the context. function Synth_Aggregate (Syn_Inst : Synth_Instance_Acc; Aggr : Node; - En : Net; Aggr_Type : Type_Acc) return Valtyp is begin case Aggr_Type.Kind is @@ -483,14 +479,14 @@ package body Synth.Aggr is begin Res_Type := Decls.Synth_Array_Subtype_Indication (Syn_Inst, Get_Type (Aggr)); - return Synth_Aggregate_Array (Syn_Inst, Aggr, En, Res_Type); + return Synth_Aggregate_Array (Syn_Inst, Aggr, Res_Type); end; when Type_Vector | Type_Array => - return Synth_Aggregate_Array (Syn_Inst, Aggr, En, Aggr_Type); + return Synth_Aggregate_Array (Syn_Inst, Aggr, Aggr_Type); when Type_Record | Type_Unbounded_Record => - return Synth_Aggregate_Record (Syn_Inst, Aggr, En, Aggr_Type); + return Synth_Aggregate_Record (Syn_Inst, Aggr, Aggr_Type); when others => raise Internal_Error; end case; diff --git a/src/synth/synth-aggr.ads b/src/synth/synth-aggr.ads index 1d700c620..009ad2100 100644 --- a/src/synth/synth-aggr.ads +++ b/src/synth/synth-aggr.ads @@ -20,8 +20,6 @@ with Vhdl.Nodes; use Vhdl.Nodes; -with Netlists; use Netlists; - with Synth.Objtypes; use Synth.Objtypes; with Synth.Values; use Synth.Values; with Synth.Context; use Synth.Context; @@ -30,6 +28,5 @@ package Synth.Aggr is -- Aggr_Type is the type from the context. function Synth_Aggregate (Syn_Inst : Synth_Instance_Acc; Aggr : Node; - En : Net; Aggr_Type : Type_Acc) return Valtyp; end Synth.Aggr; diff --git a/src/synth/synth-decls.adb b/src/synth/synth-decls.adb index 9e0ce30c1..378921c45 100644 --- a/src/synth/synth-decls.adb +++ b/src/synth/synth-decls.adb @@ -21,6 +21,7 @@ with Types; use Types; with Mutils; use Mutils; +with Netlists; use Netlists; with Netlists.Builders; use Netlists.Builders; with Netlists.Folds; use Netlists.Folds; with Netlists.Utils; use Netlists.Utils; @@ -218,7 +219,7 @@ package body Synth.Decls is Synth_Record_Elements_Definition (Syn_Inst, Def); Typ := Synth_Record_Type_Definition (Syn_Inst, Def); when Iir_Kind_Protected_Type_Declaration => - Synth_Declarations (Syn_Inst, Get_Declaration_Chain (Def), No_Net); + Synth_Declarations (Syn_Inst, Get_Declaration_Chain (Def)); when others => Vhdl.Errors.Error_Kind ("synth_type_definition", Def); end case; @@ -465,7 +466,6 @@ package body Synth.Decls is procedure Synth_Constant_Declaration (Syn_Inst : Synth_Instance_Acc; Decl : Node; - En : Net; Is_Subprg : Boolean; Last_Type : in out Node) is @@ -512,7 +512,7 @@ package body Synth.Decls is end if; Obj_Type := Get_Subtype_Object (Syn_Inst, Decl_Type); Val := Synth_Expression_With_Type - (Syn_Inst, Get_Default_Value (Decl), Obj_Type, En); + (Syn_Inst, Get_Default_Value (Decl), Obj_Type); if Val = No_Valtyp then Set_Error (Syn_Inst); return; @@ -542,7 +542,7 @@ package body Synth.Decls is end Synth_Constant_Declaration; procedure Synth_Attribute_Specification - (Syn_Inst : Synth_Instance_Acc; Spec : Node; En : Net) + (Syn_Inst : Synth_Instance_Acc; Spec : Node) is Decl : constant Node := Get_Attribute_Designator (Spec); Value : Iir_Attribute_Value; @@ -562,7 +562,7 @@ package body Synth.Decls is -- unless the attribute's subtype indication denotes an -- unconstrained array type. Val := Synth_Expression_With_Type - (Syn_Inst, Get_Expression (Spec), Val_Type, En); + (Syn_Inst, Get_Expression (Spec), Val_Type); -- Check_Constraints (Instance, Val, Attr_Type, Decl); -- 3. A new instance of the designated attribute is created @@ -624,7 +624,7 @@ package body Synth.Decls is end Create_Package_Instance; procedure Synth_Package_Declaration - (Parent_Inst : Synth_Instance_Acc; Pkg : Node; En : Net) + (Parent_Inst : Synth_Instance_Acc; Pkg : Node) is Syn_Inst : Synth_Instance_Acc; begin @@ -635,14 +635,14 @@ package body Synth.Decls is Syn_Inst := Create_Package_Instance (Parent_Inst, Pkg); - Synth_Declarations (Syn_Inst, Get_Declaration_Chain (Pkg), En); + Synth_Declarations (Syn_Inst, Get_Declaration_Chain (Pkg)); if Pkg = Vhdl.Std_Package.Standard_Package then Synth_Convertible_Declarations (Syn_Inst); end if; end Synth_Package_Declaration; procedure Synth_Package_Body - (Parent_Inst : Synth_Instance_Acc; Pkg : Node; Bod : Node; En : Net) + (Parent_Inst : Synth_Instance_Acc; Pkg : Node; Bod : Node) is Pkg_Inst : Synth_Instance_Acc; begin @@ -653,14 +653,13 @@ package body Synth.Decls is Pkg_Inst := Get_Package_Object (Parent_Inst, Pkg); - Synth_Declarations (Pkg_Inst, Get_Declaration_Chain (Bod), En); + Synth_Declarations (Pkg_Inst, Get_Declaration_Chain (Bod)); end Synth_Package_Body; procedure Synth_Generics_Association (Sub_Inst : Synth_Instance_Acc; Syn_Inst : Synth_Instance_Acc; Inter_Chain : Node; - Assoc_Chain : Node; - En : Net) + Assoc_Chain : Node) is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); Inter : Node; @@ -683,11 +682,11 @@ package body Synth.Decls is when Iir_Kind_Association_Element_Open => Actual := Get_Default_Value (Inter); Val := Synth_Expression_With_Type - (Sub_Inst, Actual, Inter_Type, En); + (Sub_Inst, Actual, Inter_Type); when Iir_Kind_Association_Element_By_Expression => Actual := Get_Actual (Assoc); Val := Synth_Expression_With_Type - (Syn_Inst, Actual, Inter_Type, En); + (Syn_Inst, Actual, Inter_Type); when others => raise Internal_Error; end case; @@ -703,7 +702,7 @@ package body Synth.Decls is end Synth_Generics_Association; procedure Synth_Package_Instantiation - (Parent_Inst : Synth_Instance_Acc; Pkg : Node; En : Net) + (Parent_Inst : Synth_Instance_Acc; Pkg : Node) is Bod : constant Node := Get_Instance_Package_Body (Pkg); Sub_Inst : Synth_Instance_Acc; @@ -712,9 +711,9 @@ package body Synth.Decls is Synth_Generics_Association (Sub_Inst, Parent_Inst, - Get_Generic_Chain (Pkg), Get_Generic_Map_Aspect_Chain (Pkg), En); + Get_Generic_Chain (Pkg), Get_Generic_Map_Aspect_Chain (Pkg)); - Synth_Declarations (Sub_Inst, Get_Declaration_Chain (Pkg), En); + Synth_Declarations (Sub_Inst, Get_Declaration_Chain (Pkg)); if Bod /= Null_Node then -- Macro expended package instantiation. @@ -729,7 +728,7 @@ package body Synth.Decls is -- Synth declarations of (optional) body. if Uninst_Bod /= Null_Node then Synth_Declarations - (Sub_Inst, Get_Declaration_Chain (Uninst_Bod), En); + (Sub_Inst, Get_Declaration_Chain (Uninst_Bod)); end if; end; end if; @@ -737,7 +736,6 @@ package body Synth.Decls is procedure Synth_Variable_Declaration (Syn_Inst : Synth_Instance_Acc; Decl : Node; - En : Net; Is_Subprg : Boolean) is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); @@ -766,7 +764,7 @@ package body Synth.Decls is Create_Object (Syn_Inst, Decl, Create_Value_Default (Obj_Typ)); else if Is_Valid (Def) then - Init := Synth_Expression_With_Type (Syn_Inst, Def, Obj_Typ, En); + Init := Synth_Expression_With_Type (Syn_Inst, Def, Obj_Typ); Init := Synth_Subtype_Conversion (Ctxt, Init, Obj_Typ, False, Decl); if not Is_Subprg @@ -810,7 +808,7 @@ package body Synth.Decls is Create_Wire_Object (Syn_Inst, Wire_Signal, Decl); if Is_Valid (Def) then Obj_Typ := Get_Subtype_Object (Syn_Inst, Get_Type (Decl)); - Init := Synth_Expression_With_Type (Syn_Inst, Def, Obj_Typ, No_Net); + Init := Synth_Expression_With_Type (Syn_Inst, Def, Obj_Typ); Init := Synth_Subtype_Conversion (Ctxt, Init, Obj_Typ, False, Decl); if not Is_Static (Init.Val) then Error_Msg_Synth (+Decl, "signals cannot be used in default value " @@ -823,7 +821,7 @@ package body Synth.Decls is end Synth_Signal_Declaration; procedure Synth_Object_Alias_Declaration - (Syn_Inst : Synth_Instance_Acc; Decl : Node; En : Net) + (Syn_Inst : Synth_Instance_Acc; Decl : Node) is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); Atype : constant Node := Get_Declaration_Type (Decl); @@ -842,7 +840,7 @@ package body Synth.Decls is Obj_Typ := null; end if; - Stmts.Synth_Assignment_Prefix (Syn_Inst, Get_Name (Decl), En, + Stmts.Synth_Assignment_Prefix (Syn_Inst, Get_Name (Decl), Base, Typ, Off, Dyn); pragma Assert (Dyn.Voff = No_Net); if Base.Val.Kind = Value_Net then @@ -862,26 +860,23 @@ package body Synth.Decls is procedure Synth_Declaration (Syn_Inst : Synth_Instance_Acc; Decl : Node; - En : Net; Is_Subprg : Boolean; Last_Type : in out Node) is begin case Get_Kind (Decl) is when Iir_Kind_Variable_Declaration => - Synth_Variable_Declaration (Syn_Inst, Decl, En, Is_Subprg); + Synth_Variable_Declaration (Syn_Inst, Decl, Is_Subprg); when Iir_Kind_Interface_Variable_Declaration => -- Ignore default value. Create_Wire_Object (Syn_Inst, Wire_Variable, Decl); Create_Var_Wire (Syn_Inst, Decl, No_Valtyp); when Iir_Kind_Constant_Declaration => - Synth_Constant_Declaration - (Syn_Inst, Decl, En, Is_Subprg, Last_Type); + Synth_Constant_Declaration (Syn_Inst, Decl, Is_Subprg, Last_Type); when Iir_Kind_Signal_Declaration => pragma Assert (not Is_Subprg); - pragma Assert (En = No_Net); Synth_Signal_Declaration (Syn_Inst, Decl); when Iir_Kind_Object_Alias_Declaration => - Synth_Object_Alias_Declaration (Syn_Inst, Decl, En); + Synth_Object_Alias_Declaration (Syn_Inst, Decl); when Iir_Kind_Anonymous_Signal_Declaration => -- Anonymous signals created by inertial associations are -- simply ignored. @@ -899,7 +894,7 @@ package body Synth.Decls is -- indication. null; when Iir_Kind_Attribute_Specification => - Synth_Attribute_Specification (Syn_Inst, Decl, En); + Synth_Attribute_Specification (Syn_Inst, Decl); when Iir_Kind_Type_Declaration => Synth_Type_Definition (Syn_Inst, Get_Type_Definition (Decl)); when Iir_Kind_Anonymous_Type_Declaration => @@ -941,7 +936,6 @@ package body Synth.Decls is procedure Synth_Declarations (Syn_Inst : Synth_Instance_Acc; Decls : Iir; - En : Net; Is_Subprg : Boolean := False) is Decl : Node; @@ -950,7 +944,7 @@ package body Synth.Decls is Last_Type := Null_Node; Decl := Decls; while Is_Valid (Decl) loop - Synth_Declaration (Syn_Inst, Decl, En, Is_Subprg, Last_Type); + Synth_Declaration (Syn_Inst, Decl, Is_Subprg, Last_Type); exit when Is_Error (Syn_Inst); diff --git a/src/synth/synth-decls.ads b/src/synth/synth-decls.ads index a42305771..68b7fea08 100644 --- a/src/synth/synth-decls.ads +++ b/src/synth/synth-decls.ads @@ -20,8 +20,6 @@ with Vhdl.Nodes; use Vhdl.Nodes; -with Netlists; use Netlists; - with Synth.Context; use Synth.Context; with Synth.Objtypes; use Synth.Objtypes; @@ -44,13 +42,11 @@ package Synth.Decls is procedure Synth_Declaration (Syn_Inst : Synth_Instance_Acc; Decl : Node; - En : Net; Is_Subprg : Boolean; Last_Type : in out Node); procedure Synth_Declarations (Syn_Inst : Synth_Instance_Acc; Decls : Iir; - En : Net; Is_Subprg : Boolean := False); procedure Finalize_Declarations (Syn_Inst : Synth_Instance_Acc; @@ -58,16 +54,15 @@ package Synth.Decls is Is_Subprg : Boolean := False); procedure Synth_Package_Declaration - (Parent_Inst : Synth_Instance_Acc; Pkg : Node; En : Net); + (Parent_Inst : Synth_Instance_Acc; Pkg : Node); procedure Synth_Package_Body - (Parent_Inst : Synth_Instance_Acc; Pkg : Node; Bod : Node; En : Net); + (Parent_Inst : Synth_Instance_Acc; Pkg : Node; Bod : Node); procedure Synth_Generics_Association (Sub_Inst : Synth_Instance_Acc; Syn_Inst : Synth_Instance_Acc; Inter_Chain : Node; - Assoc_Chain : Node; - En : Net); + Assoc_Chain : Node); procedure Synth_Package_Instantiation - (Parent_Inst : Synth_Instance_Acc; Pkg : Node; En : Net); + (Parent_Inst : Synth_Instance_Acc; Pkg : Node); end Synth.Decls; diff --git a/src/synth/synth-expr.adb b/src/synth/synth-expr.adb index c8bfd6b24..bbaf4d6a4 100644 --- a/src/synth/synth-expr.adb +++ b/src/synth/synth-expr.adb @@ -433,10 +433,8 @@ package body Synth.Expr is Lval, Rval : Int64; begin -- Static values. - L := Synth_Expression_With_Basetype - (Syn_Inst, Get_Left_Limit (Rng), No_Net); - R := Synth_Expression_With_Basetype - (Syn_Inst, Get_Right_Limit (Rng), No_Net); + L := Synth_Expression_With_Basetype (Syn_Inst, Get_Left_Limit (Rng)); + R := Synth_Expression_With_Basetype (Syn_Inst, Get_Right_Limit (Rng)); Strip_Const (L); Strip_Const (R); @@ -459,8 +457,8 @@ package body Synth.Expr is L, R : Valtyp; begin -- Static values (so no enable). - L := Synth_Expression (Syn_Inst, Get_Left_Limit (Rng), No_Net); - R := Synth_Expression (Syn_Inst, Get_Right_Limit (Rng), No_Net); + L := Synth_Expression (Syn_Inst, Get_Left_Limit (Rng)); + R := Synth_Expression (Syn_Inst, Get_Right_Limit (Rng)); return (Get_Direction (Rng), Read_Fp64 (L), Read_Fp64 (R)); end Synth_Float_Range_Expression; @@ -488,7 +486,7 @@ package body Synth.Expr is begin Pfx_Typ := Synth_Type_Of_Object (Syn_Inst, Get_Prefix (Expr)); Get_Onedimensional_Array_Bounds (Pfx_Typ, Pfx_Bnd, El_Typ); - Synth_Slice_Suffix (Syn_Inst, Expr, No_Net, Pfx_Bnd, El_Typ, + Synth_Slice_Suffix (Syn_Inst, Expr, Pfx_Bnd, El_Typ, Res_Bnd, Sl_Voff, Sl_Off); if Sl_Voff /= No_Net then @@ -520,7 +518,7 @@ package body Synth.Expr is Res : Valtyp; begin -- Maybe do not dereference it if its type is known ? - Val := Synth_Expression (Syn_Inst, Get_Prefix (Expr), No_Net); + Val := Synth_Expression (Syn_Inst, Get_Prefix (Expr)); Res := Heap.Synth_Dereference (Read_Access (Val)); return Res.Typ; end; @@ -687,7 +685,7 @@ package body Synth.Expr is for I in Flist_First .. Last loop -- Elements are supposed to be static, so no need for enable. Val := Synth_Expression_With_Type - (Syn_Inst, Get_Nth_Element (Els, I), El_Typ, No_Net); + (Syn_Inst, Get_Nth_Element (Els, I), El_Typ); pragma Assert (Is_Static (Val.Val)); Write_Value (Res.Val.Mem + Size_Type (I) * El_Typ.Sz, Val); end loop; @@ -847,7 +845,7 @@ package body Synth.Expr is Dtype : Type_Acc; begin -- The value is supposed to be static. - V := Synth_Expression (Syn_Inst, Param, No_Net); + V := Synth_Expression (Syn_Inst, Param); if V = No_Valtyp then return No_Valtyp; end if; @@ -960,7 +958,7 @@ package body Synth.Expr is Dtype : Type_Acc; begin -- The parameter is expected to be static. - V := Synth_Expression (Syn_Inst, Param, No_Net); + V := Synth_Expression (Syn_Inst, Param); if V = No_Valtyp then return No_Valtyp; end if; @@ -1016,7 +1014,7 @@ package body Synth.Expr is declare Val : Valtyp; begin - Val := Synth_Expression (Syn_Inst, Get_Prefix (Name), No_Net); + Val := Synth_Expression (Syn_Inst, Get_Prefix (Name)); return Heap.Synth_Dereference (Read_Access (Val)); end; when others => @@ -1139,7 +1137,6 @@ package body Synth.Expr is procedure Synth_Indexed_Name (Syn_Inst : Synth_Instance_Acc; Name : Node; - En : Net; Pfx_Type : Type_Acc; Voff : out Net; Off : out Value_Offsets) @@ -1168,7 +1165,7 @@ package body Synth.Expr is end loop; -- Use the base type as the subtype of the index is not synth-ed. - Idx_Val := Synth_Expression_With_Basetype (Syn_Inst, Idx_Expr, En); + Idx_Val := Synth_Expression_With_Basetype (Syn_Inst, Idx_Expr); Strip_Const (Idx_Val); Bnd := Get_Array_Bound (Pfx_Type, Dim_Type (I + 1)); @@ -1427,7 +1424,6 @@ package body Synth.Expr is procedure Synth_Slice_Suffix (Syn_Inst : Synth_Instance_Acc; Name : Node; - En : Net; Pfx_Bnd : Bound_Type; El_Typ : Type_Acc; Res_Bnd : out Bound_Type; @@ -1449,9 +1445,9 @@ package body Synth.Expr is when Iir_Kind_Range_Expression => -- As the range may be dynamic, cannot use synth_discrete_range. Left := Synth_Expression_With_Basetype - (Syn_Inst, Get_Left_Limit (Expr), En); + (Syn_Inst, Get_Left_Limit (Expr)); Right := Synth_Expression_With_Basetype - (Syn_Inst, Get_Right_Limit (Expr), En); + (Syn_Inst, Get_Right_Limit (Expr)); Dir := Get_Direction (Expr); when Iir_Kind_Range_Array_Attribute @@ -1633,14 +1629,14 @@ package body Synth.Expr is end Synth_Clock_Edge; function Synth_Type_Conversion - (Syn_Inst : Synth_Instance_Acc; Conv : Node; En : Net) return Valtyp + (Syn_Inst : Synth_Instance_Acc; Conv : Node) return Valtyp is Expr : constant Node := Get_Expression (Conv); Conv_Type : constant Node := Get_Type (Conv); Conv_Typ : constant Type_Acc := Get_Subtype_Object (Syn_Inst, Conv_Type); Val : Valtyp; begin - Val := Synth_Expression_With_Basetype (Syn_Inst, Expr, En); + Val := Synth_Expression_With_Basetype (Syn_Inst, Expr); if Val = No_Valtyp then return No_Valtyp; end if; @@ -1775,8 +1771,7 @@ package body Synth.Expr is Left_Expr : Node; Right_Expr : Node; Typ : Type_Acc; - Expr : Node; - En : Net) return Valtyp + Expr : Node) return Valtyp is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); Left : Valtyp; @@ -1792,7 +1787,7 @@ package body Synth.Expr is Val := 1; end case; - Left := Synth_Expression_With_Type (Syn_Inst, Left_Expr, Typ, En); + Left := Synth_Expression_With_Type (Syn_Inst, Left_Expr, Typ); if Left = No_Valtyp then return No_Valtyp; end if; @@ -1803,7 +1798,7 @@ package body Synth.Expr is end if; Strip_Const (Left); - Right := Synth_Expression_With_Type (Syn_Inst, Right_Expr, Typ, En); + Right := Synth_Expression_With_Type (Syn_Inst, Right_Expr, Typ); if Right = No_Valtyp then return No_Valtyp; end if; @@ -1824,8 +1819,7 @@ package body Synth.Expr is function Synth_Expression_With_Type (Syn_Inst : Synth_Instance_Acc; Expr : Node; - Expr_Type : Type_Acc; - En : Net) return Valtyp is + Expr_Type : Type_Acc) return Valtyp is begin case Get_Kind (Expr) is when Iir_Kinds_Dyadic_Operator => @@ -1849,27 +1843,27 @@ package body Synth.Expr is when Iir_Predefined_Boolean_And => return Synth_Short_Circuit (Syn_Inst, Id_And, Get_Left (Expr), Get_Right (Expr), - Boolean_Type, Expr, En); + Boolean_Type, Expr); when Iir_Predefined_Boolean_Or => return Synth_Short_Circuit (Syn_Inst, Id_Or, Get_Left (Expr), Get_Right (Expr), - Boolean_Type, Expr, En); + Boolean_Type, Expr); when Iir_Predefined_Bit_And => return Synth_Short_Circuit (Syn_Inst, Id_And, Get_Left (Expr), Get_Right (Expr), - Bit_Type, Expr, En); + Bit_Type, Expr); when Iir_Predefined_Bit_Or => return Synth_Short_Circuit (Syn_Inst, Id_Or, Get_Left (Expr), Get_Right (Expr), - Bit_Type, Expr, En); + Bit_Type, Expr); when Iir_Predefined_None => Error_Ieee_Operator (Imp, Expr); return Synth_User_Operator - (Syn_Inst, Get_Left (Expr), Get_Right (Expr), Expr, En); + (Syn_Inst, Get_Left (Expr), Get_Right (Expr), Expr); when others => return Synth_Dyadic_Operation (Syn_Inst, Imp, - Get_Left (Expr), Get_Right (Expr), Expr, En); + Get_Left (Expr), Get_Right (Expr), Expr); end case; end; when Iir_Kinds_Monadic_Operator => @@ -1881,10 +1875,10 @@ package body Synth.Expr is if Def = Iir_Predefined_None then Error_Ieee_Operator (Imp, Expr); return Synth_User_Operator - (Syn_Inst, Get_Operand (Expr), Null_Node, Expr, En); + (Syn_Inst, Get_Operand (Expr), Null_Node, Expr); else return Synth_Monadic_Operation - (Syn_Inst, Imp, Get_Operand (Expr), Expr, En); + (Syn_Inst, Imp, Get_Operand (Expr), Expr); end if; end; when Iir_Kind_Simple_Name @@ -1897,10 +1891,10 @@ package body Synth.Expr is when Iir_Kind_Reference_Name => -- Only used for anonymous signals in internal association. return Synth_Expression_With_Type - (Syn_Inst, Get_Named_Entity (Expr), Expr_Type, En); + (Syn_Inst, Get_Named_Entity (Expr), Expr_Type); when Iir_Kind_Anonymous_Signal_Declaration => return Synth_Expression_With_Type - (Syn_Inst, Get_Expression (Expr), Expr_Type, En); + (Syn_Inst, Get_Expression (Expr), Expr_Type); when Iir_Kind_Indexed_Name | Iir_Kind_Slice_Name => declare @@ -1911,8 +1905,7 @@ package body Synth.Expr is Dyn : Dyn_Name; begin - Synth_Assignment_Prefix - (Syn_Inst, Expr, En, Base, Typ, Off, Dyn); + Synth_Assignment_Prefix (Syn_Inst, Expr, Base, Typ, Off, Dyn); if Dyn.Voff = No_Net and then Is_Static (Base.Val) then Res := Create_Value_Memory (Typ); Copy_Memory @@ -1933,7 +1926,7 @@ package body Synth.Expr is Val : Valtyp; Res : Valtyp; begin - Val := Synth_Expression (Syn_Inst, Pfx, En); + Val := Synth_Expression (Syn_Inst, Pfx); Strip_Const (Val); Res_Typ := Val.Typ.Rec.E (Idx + 1).Typ; if Is_Static (Val.Val) then @@ -1952,7 +1945,7 @@ package body Synth.Expr is end; when Iir_Kind_Character_Literal => return Synth_Expression_With_Type - (Syn_Inst, Get_Named_Entity (Expr), Expr_Type, No_Net); + (Syn_Inst, Get_Named_Entity (Expr), Expr_Type); when Iir_Kind_Integer_Literal => declare Res : Valtyp; @@ -1972,33 +1965,31 @@ package body Synth.Expr is when Iir_Kind_Enumeration_Literal => return Synth_Name (Syn_Inst, Expr); when Iir_Kind_Type_Conversion => - return Synth_Type_Conversion (Syn_Inst, Expr, En); + return Synth_Type_Conversion (Syn_Inst, Expr); when Iir_Kind_Qualified_Expression => return Synth_Expression_With_Type (Syn_Inst, Get_Expression (Expr), - Get_Subtype_Object (Syn_Inst, Get_Type (Get_Type_Mark (Expr))), - En); + Get_Subtype_Object (Syn_Inst, Get_Type (Get_Type_Mark (Expr)))); when Iir_Kind_Function_Call => declare Imp : constant Node := Get_Implementation (Expr); begin case Get_Implicit_Definition (Imp) is when Iir_Predefined_Pure_Functions => - return Synth_Operator_Function_Call (Syn_Inst, Expr, En); + return Synth_Operator_Function_Call (Syn_Inst, Expr); when Iir_Predefined_None => - return Synth_User_Function_Call (Syn_Inst, Expr, En); + return Synth_User_Function_Call (Syn_Inst, Expr); when others => - return Synth_Predefined_Function_Call - (Syn_Inst, Expr, En); + return Synth_Predefined_Function_Call (Syn_Inst, Expr); end case; end; when Iir_Kind_Aggregate => - return Synth.Aggr.Synth_Aggregate (Syn_Inst, Expr, En, Expr_Type); + return Synth.Aggr.Synth_Aggregate (Syn_Inst, Expr, Expr_Type); when Iir_Kind_Simple_Aggregate => return Synth_Simple_Aggregate (Syn_Inst, Expr); when Iir_Kind_Parenthesis_Expression => return Synth_Expression_With_Type - (Syn_Inst, Get_Expression (Expr), Expr_Type, En); + (Syn_Inst, Get_Expression (Expr), Expr_Type); when Iir_Kind_Left_Array_Attribute => declare B : Bound_Type; @@ -2056,7 +2047,7 @@ package body Synth.Expr is V : Valtyp; Dtype : Type_Acc; begin - V := Synth_Expression (Syn_Inst, Param, En); + V := Synth_Expression (Syn_Inst, Param); Dtype := Get_Subtype_Object (Syn_Inst, Get_Type (Expr)); -- FIXME: to be generalized. Not always as simple as a -- subtype conversion. @@ -2077,7 +2068,6 @@ package body Synth.Expr is T : Type_Acc; Acc : Heap_Index; begin - pragma Assert (En = No_Net); T := Synth.Decls.Synth_Subtype_Indication (Syn_Inst, Get_Subtype_Indication (Expr)); Acc := Allocate_By_Type (T); @@ -2088,9 +2078,8 @@ package body Synth.Expr is V : Valtyp; Acc : Heap_Index; begin - pragma Assert (En = No_Net); V := Synth_Expression_With_Type - (Syn_Inst, Get_Expression (Expr), Expr_Type.Acc_Acc, No_Net); + (Syn_Inst, Get_Expression (Expr), Expr_Type.Acc_Acc); Acc := Allocate_By_Value (V); return Create_Value_Access (Acc, Expr_Type); end; @@ -2105,8 +2094,8 @@ package body Synth.Expr is end case; end Synth_Expression_With_Type; - function Synth_Expression - (Syn_Inst : Synth_Instance_Acc; Expr : Node; En : Net) return Valtyp + function Synth_Expression (Syn_Inst : Synth_Instance_Acc; Expr : Node) + return Valtyp is Etype : Node; begin @@ -2126,16 +2115,16 @@ package body Synth.Expr is end case; return Synth_Expression_With_Type - (Syn_Inst, Expr, Get_Subtype_Object (Syn_Inst, Etype), En); + (Syn_Inst, Expr, Get_Subtype_Object (Syn_Inst, Etype)); end Synth_Expression; function Synth_Expression_With_Basetype - (Syn_Inst : Synth_Instance_Acc; Expr : Node; En : Net) return Valtyp + (Syn_Inst : Synth_Instance_Acc; Expr : Node) return Valtyp is Basetype : Type_Acc; begin Basetype := Get_Subtype_Object (Syn_Inst, Get_Base_Type (Get_Type (Expr))); - return Synth_Expression_With_Type (Syn_Inst, Expr, Basetype, En); + return Synth_Expression_With_Type (Syn_Inst, Expr, Basetype); end Synth_Expression_With_Basetype; end Synth.Expr; diff --git a/src/synth/synth-expr.ads b/src/synth/synth-expr.ads index e54e0c7b8..1da15ce29 100644 --- a/src/synth/synth-expr.ads +++ b/src/synth/synth-expr.ads @@ -77,20 +77,18 @@ package Synth.Expr is -- If EN is not No_Net, the execution is controlled by EN. This is used -- for assertions and checks. function Synth_Expression - (Syn_Inst : Synth_Instance_Acc; Expr : Node; En : Net) return Valtyp; + (Syn_Inst : Synth_Instance_Acc; Expr : Node) return Valtyp; -- Same as Synth_Expression, but the expression may be constrained by -- EXPR_TYPE. function Synth_Expression_With_Type (Syn_Inst : Synth_Instance_Acc; Expr : Node; - Expr_Type : Type_Acc; - En : Net) return Valtyp; + Expr_Type : Type_Acc) return Valtyp; -- Use base type of EXPR to synthesize EXPR. Useful when the type of -- EXPR is defined by itself or a range. function Synth_Expression_With_Basetype (Syn_Inst : Synth_Instance_Acc; - Expr : Node; - En : Net) return Valtyp; + Expr : Node) return Valtyp; function Synth_Bounds_From_Range (Syn_Inst : Synth_Instance_Acc; Atype : Node) return Bound_Type; @@ -112,7 +110,6 @@ package Synth.Expr is procedure Synth_Slice_Suffix (Syn_Inst : Synth_Instance_Acc; Name : Node; - En : Net; Pfx_Bnd : Bound_Type; El_Typ : Type_Acc; Res_Bnd : out Bound_Type; @@ -123,7 +120,6 @@ package Synth.Expr is -- OFF is 0. procedure Synth_Indexed_Name (Syn_Inst : Synth_Instance_Acc; Name : Node; - En : Net; Pfx_Type : Type_Acc; Voff : out Net; Off : out Value_Offsets); diff --git a/src/synth/synth-files_operations.adb b/src/synth/synth-files_operations.adb index 52abbd7aa..98fa6a5b8 100644 --- a/src/synth/synth-files_operations.adb +++ b/src/synth/synth-files_operations.adb @@ -28,8 +28,6 @@ with Grt.Stdio; with Vhdl.Annotations; -with Netlists; use Netlists; - with Synth.Objtypes; use Synth.Objtypes; with Synth.Expr; use Synth.Expr; with Synth.Errors; use Synth.Errors; @@ -216,11 +214,10 @@ package body Synth.Files_Operations is return F; end if; - File_Name := Synth_Expression_With_Basetype - (Syn_Inst, External_Name, No_Net); + File_Name := Synth_Expression_With_Basetype (Syn_Inst, External_Name); if Open_Kind /= Null_Node then - Mode := Synth_Expression (Syn_Inst, Open_Kind, No_Net); + Mode := Synth_Expression (Syn_Inst, Open_Kind); File_Mode := Ghdl_I32 (Read_Discrete (Mode)); else case Get_Mode (Decl) is diff --git a/src/synth/synth-insts.adb b/src/synth/synth-insts.adb index 060defa32..ab6ef4133 100644 --- a/src/synth/synth-insts.adb +++ b/src/synth/synth-insts.adb @@ -563,8 +563,7 @@ package body Synth.Insts is begin Synth_Individual_Prefix (Syn_Inst, Inter_Inst, Get_Prefix (Formal), Off, Typ); - Synth_Indexed_Name - (Syn_Inst, Formal, No_Net, Typ, Voff, Arr_Off); + Synth_Indexed_Name (Syn_Inst, Formal, Typ, Voff, Arr_Off); if Voff /= No_Net then raise Internal_Error; end if; @@ -583,7 +582,7 @@ package body Synth.Insts is (Syn_Inst, Inter_Inst, Get_Prefix (Formal), Off, Typ); Get_Onedimensional_Array_Bounds (Typ, Pfx_Bnd, El_Typ); - Synth_Slice_Suffix (Syn_Inst, Formal, No_Net, Pfx_Bnd, El_Typ, + Synth_Slice_Suffix (Syn_Inst, Formal, Pfx_Bnd, El_Typ, Res_Bnd, Sl_Voff, Sl_Off); if Sl_Voff /= No_Net then raise Internal_Error; @@ -654,8 +653,7 @@ package body Synth.Insts is (Syn_Inst, Inter_Inst, Get_Formal (Iassoc), Off, Typ); -- 2. synth expression - V := Synth_Expression_With_Type - (Syn_Inst, Get_Actual (Iassoc), Typ, No_Net); + V := Synth_Expression_With_Type (Syn_Inst, Get_Actual (Iassoc), Typ); -- 3. save in a table Value_Offset_Tables.Append (Els, (Off, V)); @@ -716,8 +714,7 @@ package body Synth.Insts is Formal_Typ := Get_Subtype_Object (Inter_Inst, Get_Type (Inter)); - Act := Synth_Expression_With_Type - (Act_Inst, Actual, Formal_Typ, No_Net); + Act := Synth_Expression_With_Type (Act_Inst, Actual, Formal_Typ); return Get_Net (Ctxt, Act); end Synth_Input_Assoc; @@ -749,7 +746,7 @@ package body Synth.Insts is V := Create_Value_Net (O, Typ); -- 3. Assign. - Synth_Assignment (Syn_Inst, Get_Actual (Iassoc), V, Iassoc, No_Net); + Synth_Assignment (Syn_Inst, Get_Actual (Iassoc), V, Iassoc); Iassoc := Get_Chain (Iassoc); end loop; @@ -784,7 +781,7 @@ package body Synth.Insts is Port := Builders.Build_Port (Get_Build (Syn_Inst), Outp); O := Create_Value_Net (Port, Formal_Typ); -- Assign the port output to the actual (a net). - Synth_Assignment (Syn_Inst, Actual, O, Assoc, No_Net); + Synth_Assignment (Syn_Inst, Actual, O, Assoc); end Synth_Output_Assoc; -- Subprogram used for instantiation (direct or by component). @@ -944,8 +941,7 @@ package body Synth.Insts is Synth_Generics_Association (Sub_Inst, Syn_Inst, Get_Generic_Chain (Ent), - Get_Generic_Map_Aspect_Chain (Stmt), - No_Net); + Get_Generic_Map_Aspect_Chain (Stmt)); -- Elaborate port types. Synth_Ports_Association_Type (Sub_Inst, Syn_Inst, @@ -1081,8 +1077,7 @@ package body Synth.Insts is Synth_Generics_Association (Comp_Inst, Syn_Inst, Get_Generic_Chain (Component), - Get_Generic_Map_Aspect_Chain (Stmt), - No_Net); + Get_Generic_Map_Aspect_Chain (Stmt)); -- Create objects for the inputs and the outputs of the component, -- assign inputs (that's nets) and create wires for outputs. @@ -1145,8 +1140,7 @@ package body Synth.Insts is (Comp_Inst, Ent, New_Sname_User (Get_Identifier (Ent), No_Sname)); Synth_Generics_Association (Sub_Inst, Comp_Inst, Get_Generic_Chain (Ent), - Get_Generic_Map_Aspect_Chain (Bind), - No_Net); + Get_Generic_Map_Aspect_Chain (Bind)); Synth_Ports_Association_Type (Sub_Inst, Comp_Inst, Get_Port_Chain (Ent), @@ -1231,8 +1225,7 @@ package body Synth.Insts is Bod : constant Node := Get_Package_Body (Dep_Unit); Bod_Unit : Node; begin - Synth_Package_Declaration - (Parent_Inst, Dep_Unit, No_Net); + Synth_Package_Declaration (Parent_Inst, Dep_Unit); -- Do not try to elaborate math_real body: there are -- functions with loop. Currently, try create signals, -- which is not possible during package elaboration. @@ -1241,12 +1234,11 @@ package body Synth.Insts is then Bod_Unit := Get_Design_Unit (Bod); Synth_Dependencies (Parent_Inst, Bod_Unit); - Synth_Package_Body - (Parent_Inst, Dep_Unit, Bod, No_Net); + Synth_Package_Body (Parent_Inst, Dep_Unit, Bod); end if; end; when Iir_Kind_Package_Instantiation_Declaration => - Synth_Package_Instantiation (Parent_Inst, Dep_Unit, No_Net); + Synth_Package_Instantiation (Parent_Inst, Dep_Unit); when Iir_Kind_Package_Body => null; when Iir_Kind_Architecture_Body => @@ -1298,7 +1290,7 @@ package body Synth.Insts is begin Inter_Typ := Get_Subtype_Object (Syn_Inst, Get_Type (Inter)); Val := Synth_Expression_With_Type - (Syn_Inst, Get_Default_Value (Inter), Inter_Typ, No_Net); + (Syn_Inst, Get_Default_Value (Inter), Inter_Typ); pragma Assert (Is_Static (Val.Val)); Create_Object (Syn_Inst, Inter, Val); end; @@ -1389,8 +1381,7 @@ package body Synth.Insts is else if Default /= Null_Node then Inter_Typ := Get_Subtype_Object (Syn_Inst, Get_Type (Inter)); - Init := Synth_Expression_With_Type - (Syn_Inst, Default, Inter_Typ, No_Net); + Init := Synth_Expression_With_Type (Syn_Inst, Default, Inter_Typ); Init := Synth_Subtype_Conversion (Ctxt, Init, Inter_Typ, False, Inter); Value := Builders.Build_Ioutput (Ctxt, Get_Net (Ctxt, Init)); @@ -1525,14 +1516,14 @@ package body Synth.Insts is pragma Assert (Get_Kind (Inst.Config) = Iir_Kind_Block_Configuration); Apply_Block_Configuration (Inst.Config, Arch); - Synth_Declarations (Syn_Inst, Get_Declaration_Chain (Entity), No_Net); + Synth_Declarations (Syn_Inst, Get_Declaration_Chain (Entity)); if not Is_Error (Syn_Inst) then Synth_Concurrent_Statements (Syn_Inst, Get_Concurrent_Statement_Chain (Entity)); end if; if not Is_Error (Syn_Inst) then - Synth_Declarations (Syn_Inst, Get_Declaration_Chain (Arch), No_Net); + Synth_Declarations (Syn_Inst, Get_Declaration_Chain (Arch)); end if; if not Is_Error (Syn_Inst) then Synth_Concurrent_Statements diff --git a/src/synth/synth-oper.adb b/src/synth/synth-oper.adb index 760ef8fd5..4e1c16cb8 100644 --- a/src/synth/synth-oper.adb +++ b/src/synth/synth-oper.adb @@ -28,6 +28,7 @@ with Vhdl.Utils; use Vhdl.Utils; with Areapools; +with Netlists; use Netlists; with Netlists.Gates; use Netlists.Gates; with Netlists.Builders; use Netlists.Builders; with Netlists.Folds; use Netlists.Folds; @@ -380,8 +381,7 @@ package body Synth.Oper is Imp : Node; Left_Expr : Node; Right_Expr : Node; - Expr : Node; - En : Net) return Valtyp + Expr : Node) return Valtyp is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); Def : constant Iir_Predefined_Functions := @@ -677,14 +677,12 @@ package body Synth.Oper is return Create_Value_Net (N, Create_Res_Bound (Left)); end Synth_Rotation; begin - Left := Synth_Expression_With_Type - (Syn_Inst, Left_Expr, Left_Typ, En); + Left := Synth_Expression_With_Type (Syn_Inst, Left_Expr, Left_Typ); if Left = No_Valtyp then return No_Valtyp; end if; Left := Synth_Subtype_Conversion (Ctxt, Left, Left_Typ, False, Expr); - Right := Synth_Expression_With_Type - (Syn_Inst, Right_Expr, Right_Typ, En); + Right := Synth_Expression_With_Type (Syn_Inst, Right_Expr, Right_Typ); if Right = No_Valtyp then return No_Valtyp; end if; @@ -1400,8 +1398,7 @@ package body Synth.Oper is function Synth_Monadic_Operation (Syn_Inst : Synth_Instance_Acc; Imp : Node; Operand_Expr : Node; - Loc : Node; - En : Net) return Valtyp + Loc : Node) return Valtyp is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); Def : constant Iir_Predefined_Functions := @@ -1441,8 +1438,7 @@ package body Synth.Oper is return Create_Value_Net (N, Operand.Typ.Vec_El); end Synth_Vec_Reduce_Monadic; begin - Operand := Synth_Expression_With_Type - (Syn_Inst, Operand_Expr, Oper_Typ, En); + Operand := Synth_Expression_With_Type (Syn_Inst, Operand_Expr, Oper_Typ); if Operand = No_Valtyp then return No_Valtyp; end if; @@ -1728,7 +1724,7 @@ package body Synth.Oper is end Synth_Dynamic_Predefined_Function_Call; function Synth_Predefined_Function_Call - (Syn_Inst : Synth_Instance_Acc; Expr : Node; En : Net) return Valtyp + (Syn_Inst : Synth_Instance_Acc; Expr : Node) return Valtyp is Imp : constant Node := Get_Implementation (Expr); Assoc_Chain : constant Node := Get_Parameter_Association_Chain (Expr); @@ -1743,7 +1739,7 @@ package body Synth.Oper is Subprg_Inst := Make_Instance (Syn_Inst, Imp); Synth_Subprogram_Association - (Subprg_Inst, Syn_Inst, Inter_Chain, Assoc_Chain, En); + (Subprg_Inst, Syn_Inst, Inter_Chain, Assoc_Chain); if Is_Error (Subprg_Inst) then Res := No_Valtyp; @@ -1774,7 +1770,7 @@ package body Synth.Oper is end Synth_Predefined_Function_Call; function Synth_Operator_Function_Call - (Syn_Inst : Synth_Instance_Acc; Expr : Node; En : Net) return Valtyp + (Syn_Inst : Synth_Instance_Acc; Expr : Node) return Valtyp is Imp : constant Node := Get_Implementation (Expr); Assoc : Node; @@ -1786,10 +1782,10 @@ package body Synth.Oper is Op1 := Get_Actual (Assoc); if Get_Chain (Inter) = Null_Node then - return Synth_Monadic_Operation (Syn_Inst, Imp, Op1, Expr, En); + return Synth_Monadic_Operation (Syn_Inst, Imp, Op1, Expr); else Op2 := Get_Actual (Get_Chain (Assoc)); - return Synth_Dyadic_Operation (Syn_Inst, Imp, Op1, Op2, Expr, En); + return Synth_Dyadic_Operation (Syn_Inst, Imp, Op1, Op2, Expr); end if; end Synth_Operator_Function_Call; end Synth.Oper; diff --git a/src/synth/synth-oper.ads b/src/synth/synth-oper.ads index 6ec51fbc6..9d4fe8d88 100644 --- a/src/synth/synth-oper.ads +++ b/src/synth/synth-oper.ads @@ -20,30 +20,26 @@ with Vhdl.Nodes; use Vhdl.Nodes; -with Netlists; use Netlists; - with Synth.Objtypes; use Synth.Objtypes; with Synth.Values; use Synth.Values; with Synth.Context; use Synth.Context; package Synth.Oper is function Synth_Predefined_Function_Call - (Syn_Inst : Synth_Instance_Acc; Expr : Node; En : Net) return Valtyp; + (Syn_Inst : Synth_Instance_Acc; Expr : Node) return Valtyp; function Synth_Operator_Function_Call - (Syn_Inst : Synth_Instance_Acc; Expr : Node; En : Net) return Valtyp; + (Syn_Inst : Synth_Instance_Acc; Expr : Node) return Valtyp; function Synth_Dyadic_Operation (Syn_Inst : Synth_Instance_Acc; Imp : Node; Left_Expr : Node; Right_Expr : Node; - Expr : Node; - En : Net) return Valtyp; + Expr : Node) return Valtyp; function Synth_Monadic_Operation (Syn_Inst : Synth_Instance_Acc; Imp : Node; Operand_Expr : Node; - Loc : Node; - En : Net) return Valtyp; + Loc : Node) return Valtyp; function Create_Bounds_From_Length (Syn_Inst : Synth_Instance_Acc; Atype : Iir; Len : Iir_Index32) diff --git a/src/synth/synth-stmts.adb b/src/synth/synth-stmts.adb index 10261bfa6..cfb632f53 100644 --- a/src/synth/synth-stmts.adb +++ b/src/synth/synth-stmts.adb @@ -68,8 +68,7 @@ package body Synth.Stmts is function Synth_Waveform (Syn_Inst : Synth_Instance_Acc; Wf : Node; - Targ_Type : Type_Acc; - En : Net) return Valtyp is + Targ_Type : Type_Acc) return Valtyp is begin if Get_Kind (Wf) = Iir_Kind_Unaffected_Waveform then -- TODO @@ -84,16 +83,15 @@ package body Synth.Stmts is null; end if; if Targ_Type = null then - return Synth_Expression (Syn_Inst, Get_We_Value (Wf), En); + return Synth_Expression (Syn_Inst, Get_We_Value (Wf)); else return Synth_Expression_With_Type - (Syn_Inst, Get_We_Value (Wf), Targ_Type, En); + (Syn_Inst, Get_We_Value (Wf), Targ_Type); end if; end Synth_Waveform; procedure Synth_Assignment_Prefix (Syn_Inst : Synth_Instance_Acc; Pfx : Node; - En : Net; Dest_Base : out Valtyp; Dest_Typ : out Type_Acc; Dest_Off : out Value_Offsets; @@ -101,7 +99,7 @@ package body Synth.Stmts is begin case Get_Kind (Pfx) is when Iir_Kind_Simple_Name => - Synth_Assignment_Prefix (Syn_Inst, Get_Named_Entity (Pfx), En, + Synth_Assignment_Prefix (Syn_Inst, Get_Named_Entity (Pfx), Dest_Base, Dest_Typ, Dest_Off, Dest_Dyn); when Iir_Kind_Interface_Signal_Declaration | Iir_Kind_Variable_Declaration @@ -129,7 +127,7 @@ package body Synth.Stmts is end if; end; when Iir_Kind_Function_Call => - Dest_Base := Synth_Expression (Syn_Inst, Pfx, En); + Dest_Base := Synth_Expression (Syn_Inst, Pfx); Dest_Typ := Dest_Base.Typ; Dest_Off := (0, 0); Dest_Dyn := No_Dyn_Name; @@ -140,10 +138,10 @@ package body Synth.Stmts is Off : Value_Offsets; begin Synth_Assignment_Prefix - (Syn_Inst, Get_Prefix (Pfx), En, + (Syn_Inst, Get_Prefix (Pfx), Dest_Base, Dest_Typ, Dest_Off, Dest_Dyn); Strip_Const (Dest_Base); - Synth_Indexed_Name (Syn_Inst, Pfx, En, Dest_Typ, Voff, Off); + Synth_Indexed_Name (Syn_Inst, Pfx, Dest_Typ, Voff, Off); if Voff = No_Net then -- Static index. @@ -178,7 +176,7 @@ package body Synth.Stmts is Get_Element_Position (Get_Named_Entity (Pfx)); begin Synth_Assignment_Prefix - (Syn_Inst, Get_Prefix (Pfx), En, + (Syn_Inst, Get_Prefix (Pfx), Dest_Base, Dest_Typ, Dest_Off, Dest_Dyn); Dest_Off.Net_Off := Dest_Off.Net_Off + Dest_Typ.Rec.E (Idx + 1).Boff; @@ -197,12 +195,12 @@ package body Synth.Stmts is Sl_Off : Value_Offsets; begin Synth_Assignment_Prefix - (Syn_Inst, Get_Prefix (Pfx), En, + (Syn_Inst, Get_Prefix (Pfx), Dest_Base, Dest_Typ, Dest_Off, Dest_Dyn); Strip_Const (Dest_Base); Get_Onedimensional_Array_Bounds (Dest_Typ, Pfx_Bnd, El_Typ); - Synth_Slice_Suffix (Syn_Inst, Pfx, En, Pfx_Bnd, El_Typ, + Synth_Slice_Suffix (Syn_Inst, Pfx, Pfx_Bnd, El_Typ, Res_Bnd, Sl_Voff, Sl_Off); @@ -236,7 +234,7 @@ package body Synth.Stmts is when Iir_Kind_Implicit_Dereference | Iir_Kind_Dereference => Synth_Assignment_Prefix - (Syn_Inst, Get_Prefix (Pfx), En, + (Syn_Inst, Get_Prefix (Pfx), Dest_Base, Dest_Typ, Dest_Off, Dest_Dyn); if Dest_Off /= (0, 0) and then Dest_Dyn.Voff /= No_Net then raise Internal_Error; @@ -354,8 +352,7 @@ package body Synth.Stmts is end Synth_Aggregate_Target_Type; function Synth_Target (Syn_Inst : Synth_Instance_Acc; - Target : Node; - En : Net) return Target_Info is + Target : Node) return Target_Info is begin case Get_Kind (Target) is when Iir_Kind_Aggregate => @@ -379,8 +376,7 @@ package body Synth.Stmts is Dyn : Dyn_Name; begin - Synth_Assignment_Prefix - (Syn_Inst, Target, En, Base, Typ, Off, Dyn); + Synth_Assignment_Prefix (Syn_Inst, Target, Base, Typ, Off, Dyn); if Dyn.Voff = No_Net then -- FIXME: check index. return Target_Info'(Kind => Target_Simple, @@ -403,8 +399,7 @@ package body Synth.Stmts is procedure Synth_Assignment (Syn_Inst : Synth_Instance_Acc; Target : Target_Info; Val : Valtyp; - Loc : Node; - En : Net); + Loc : Node); -- Extract a part of VAL from a target aggregate at offset OFF (offset -- in the array). @@ -448,8 +443,7 @@ package body Synth.Stmts is Target : Node; Target_Typ : Type_Acc; Val : Valtyp; - Loc : Node; - En : Net) + Loc : Node) is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); Targ_Bnd : constant Bound_Type := Get_Array_Bound (Target_Typ, 1); @@ -464,7 +458,7 @@ package body Synth.Stmts is Assoc := Get_Associated_Expr (Choice); case Get_Kind (Choice) is when Iir_Kind_Choice_By_None => - Targ_Info := Synth_Target (Syn_Inst, Assoc, En); + Targ_Info := Synth_Target (Syn_Inst, Assoc); if Get_Element_Type_Flag (Choice) then Pos := Pos - 1; else @@ -474,7 +468,7 @@ package body Synth.Stmts is (Syn_Inst, Targ_Info, Aggregate_Extract (Ctxt, Val, Pos, Targ_Info.Targ_Type, Assoc), - Loc, En); + Loc); when others => Error_Kind ("synth_assignment_aggregate", Choice); end case; @@ -485,8 +479,7 @@ package body Synth.Stmts is procedure Synth_Assignment (Syn_Inst : Synth_Instance_Acc; Target : Target_Info; Val : Valtyp; - Loc : Node; - En : Net) + Loc : Node) is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); V : Valtyp; @@ -501,7 +494,7 @@ package body Synth.Stmts is case Target.Kind is when Target_Aggregate => Synth_Assignment_Aggregate - (Syn_Inst, Target.Aggr, Target.Targ_Type, V, Loc, En); + (Syn_Inst, Target.Aggr, Target.Targ_Type, V, Loc); when Target_Simple => if V.Typ.Sz = 0 then -- If there is nothing to assign (like a null slice), @@ -555,13 +548,12 @@ package body Synth.Stmts is procedure Synth_Assignment (Syn_Inst : Synth_Instance_Acc; Target : Node; Val : Valtyp; - Loc : Node; - En : Net) + Loc : Node) is Info : Target_Info; begin - Info := Synth_Target (Syn_Inst, Target, En); - Synth_Assignment (Syn_Inst, Info, Val, Loc, En); + Info := Synth_Target (Syn_Inst, Target); + Synth_Assignment (Syn_Inst, Info, Val, Loc); end Synth_Assignment; function Synth_Read_Memory (Syn_Inst : Synth_Instance_Acc; @@ -610,19 +602,19 @@ package body Synth.Stmts is -- Concurrent or sequential simple signal assignment procedure Synth_Simple_Signal_Assignment - (Syn_Inst : Synth_Instance_Acc; Stmt : Node; En : Net) + (Syn_Inst : Synth_Instance_Acc; Stmt : Node) is Targ : Target_Info; Val : Valtyp; begin - Targ := Synth_Target (Syn_Inst, Get_Target (Stmt), En); + Targ := Synth_Target (Syn_Inst, Get_Target (Stmt)); Val := Synth_Waveform - (Syn_Inst, Get_Waveform_Chain (Stmt), Targ.Targ_Type, En); - Synth_Assignment (Syn_Inst, Targ, Val, Stmt, En); + (Syn_Inst, Get_Waveform_Chain (Stmt), Targ.Targ_Type); + Synth_Assignment (Syn_Inst, Targ, Val, Stmt); end Synth_Simple_Signal_Assignment; procedure Synth_Conditional_Signal_Assignment - (Syn_Inst : Synth_Instance_Acc; Stmt : Node; En : Net) + (Syn_Inst : Synth_Instance_Acc; Stmt : Node) is Ctxt : constant Context_Acc := Get_Build (Syn_Inst); Targ : Target_Info; @@ -634,13 +626,13 @@ package body Synth.Stmts is First, Last : Net; V : Net; begin - Targ := Synth_Target (Syn_Inst, Get_Target (Stmt), En); + Targ := Synth_Target (Syn_Inst, Get_Target (Stmt)); Last := No_Net; Cwf := Get_Conditional_Waveform_Chain (Stmt); Cond := Null_Node; while Cwf /= Null_Node loop Val := Synth_Waveform - (Syn_Inst, Get_Waveform_Chain (Cwf), Targ.Targ_Type, En); + (Syn_Inst, Get_Waveform_Chain (Cwf), Targ.Targ_Type); if Val = No_Valtyp then -- Mark the error, but try to continue. Set_Error (Syn_Inst); @@ -648,7 +640,7 @@ package body Synth.Stmts is V := Get_Net (Ctxt, Val); Cond := Get_Condition (Cwf); if Cond /= Null_Node then - Cond_Val := Synth_Expression (Syn_Inst, Cond, En); + Cond_Val := Synth_Expression (Syn_Inst, Cond); if Cond_Val = No_Valtyp then Cond_Net := Build_Const_UB32 (Ctxt, 0, 1); else @@ -679,23 +671,22 @@ package body Synth.Stmts is end if; end if; Val := Create_Value_Net (First, Targ.Targ_Type); - Synth_Assignment (Syn_Inst, Targ, Val, Stmt, En); + Synth_Assignment (Syn_Inst, Targ, Val, Stmt); end Synth_Conditional_Signal_Assignment; procedure Synth_Variable_Assignment (C : Seq_Context; Stmt : Node) is - En : constant Net := No_Net; Targ : Target_Info; Val : Valtyp; begin - Targ := Synth_Target (C.Inst, Get_Target (Stmt), En); + Targ := Synth_Target (C.Inst, Get_Target (Stmt)); Val := Synth_Expression_With_Type - (C.Inst, Get_Expression (Stmt), Targ.Targ_Type, En); + (C.Inst, Get_Expression (Stmt), Targ.Targ_Type); if Val = No_Valtyp then Set_Error (C.Inst); return; end if; - Synth_Assignment (C.Inst, Targ, Val, Stmt, En); + Synth_Assignment (C.Inst, Targ, Val, Stmt); end Synth_Variable_Assignment; procedure Synth_Conditional_Variable_Assignment @@ -703,7 +694,6 @@ package body Synth.Stmts is is Ctxt : constant Context_Acc := Get_Build (C.Inst); Target : constant Node := Get_Target (Stmt); - En : constant Net := No_Net; Targ_Type : Type_Acc; Cond : Node; Ce : Node; @@ -716,11 +706,11 @@ package body Synth.Stmts is Ce := Get_Conditional_Expression_Chain (Stmt); while Ce /= Null_Node loop Val := Synth_Expression_With_Type - (C.Inst, Get_Expression (Ce), Targ_Type, En); + (C.Inst, Get_Expression (Ce), Targ_Type); V := Get_Net (Ctxt, Val); Cond := Get_Condition (Ce); if Cond /= Null_Node then - Cond_Val := Synth_Expression (C.Inst, Cond, En); + Cond_Val := Synth_Expression (C.Inst, Cond); V := Build_Mux2 (Ctxt, Get_Net (Ctxt, Cond_Val), No_Net, V); Set_Location (V, Ce); end if; @@ -734,7 +724,7 @@ package body Synth.Stmts is Ce := Get_Chain (Ce); end loop; Val := Create_Value_Net (First, Targ_Type); - Synth_Assignment (C.Inst, Target, Val, Stmt, En); + Synth_Assignment (C.Inst, Target, Val, Stmt); end Synth_Conditional_Variable_Assignment; procedure Synth_If_Statement (C : in out Seq_Context; Stmt : Node) @@ -747,7 +737,7 @@ package body Synth.Stmts is Phi_True : Phi_Type; Phi_False : Phi_Type; begin - Cond_Val := Synth_Expression (C.Inst, Cond, No_Net); + Cond_Val := Synth_Expression (C.Inst, Cond); if Cond_Val = No_Valtyp then Set_Error (C.Inst); return; @@ -800,15 +790,15 @@ package body Synth.Stmts is end Synth_If_Statement; -- EXPR is a choice, so a locally static literal. - function Convert_To_Uns64 - (Syn_Inst : Synth_Instance_Acc; Expr : Node; En : Net) return Uns64 + function Convert_To_Uns64 (Syn_Inst : Synth_Instance_Acc; Expr : Node) + return Uns64 is Expr_Val : Valtyp; Vec : Logvec_Array (0 .. 1); Off : Uns32; Has_Zx : Boolean; begin - Expr_Val := Synth_Expression_With_Basetype (Syn_Inst, Expr, En); + Expr_Val := Synth_Expression_With_Basetype (Syn_Inst, Expr); Off := 0; Has_Zx := False; Vec := (others => (0, 0)); @@ -1008,8 +998,7 @@ package body Synth.Stmts is Annex_Arr (Choice_Idx) := Int32 (Choice_Idx); Choice_Data (Choice_Idx) := (Val => Convert_To_Uns64 (C.Inst, - Get_Choice_Expression (Choice), - No_Net), + Get_Choice_Expression (Choice)), Alt => Alt_Idx); when Iir_Kind_Choice_By_Others => Others_Alt_Idx := Alt_Idx; @@ -1163,8 +1152,7 @@ package body Synth.Stmts is case Get_Kind (Choice) is when Iir_Kind_Choice_By_Expression => Sel_Expr := Get_Choice_Expression (Choice); - Sel_Val := Synth_Expression_With_Basetype - (C.Inst, Sel_Expr, No_Net); + Sel_Val := Synth_Expression_With_Basetype (C.Inst, Sel_Expr); if Is_Equal (Sel_Val, Sel) then Synth_Sequential_Statements (C, Stmts); exit; @@ -1236,7 +1224,7 @@ package body Synth.Stmts is Expr : constant Node := Get_Expression (Stmt); Sel : Valtyp; begin - Sel := Synth_Expression_With_Basetype (C.Inst, Expr, No_Net); + Sel := Synth_Expression_With_Basetype (C.Inst, Expr); Strip_Const (Sel); if Is_Static (Sel.Val) then case Sel.Typ.Kind is @@ -1257,7 +1245,7 @@ package body Synth.Stmts is end Synth_Case_Statement; procedure Synth_Selected_Signal_Assignment - (Syn_Inst : Synth_Instance_Acc; Stmt : Node; En : Net) + (Syn_Inst : Synth_Instance_Acc; Stmt : Node) is use Vhdl.Sem_Expr; Ctxt : constant Context_Acc := Get_Build (Syn_Inst); @@ -1286,11 +1274,11 @@ package body Synth.Stmts is Sel : Valtyp; Sel_Net : Net; begin - Targ := Synth_Target (Syn_Inst, Get_Target (Stmt), En); + Targ := Synth_Target (Syn_Inst, Get_Target (Stmt)); Targ_Type := Targ.Targ_Type; -- Create a net for the expression. - Sel := Synth_Expression_With_Basetype (Syn_Inst, Expr, En); + Sel := Synth_Expression_With_Basetype (Syn_Inst, Expr); -- Count choices and alternatives. Count_Choices (Case_Info, Choices); @@ -1316,7 +1304,7 @@ package body Synth.Stmts is Alts (Alt_Idx).Val := Get_Net (Ctxt, Synth_Waveform - (Syn_Inst, Get_Associated_Chain (Choice), Targ_Type, En)); + (Syn_Inst, Get_Associated_Chain (Choice), Targ_Type)); end if; case Get_Kind (Choice) is @@ -1325,8 +1313,7 @@ package body Synth.Stmts is Annex_Arr (Choice_Idx) := Int32 (Choice_Idx); Choice_Data (Choice_Idx) := (Val => Convert_To_Uns64 (Syn_Inst, - Get_Choice_Expression (Choice), - No_Net), + Get_Choice_Expression (Choice)), Alt => Alt_Idx); when Iir_Kind_Choice_By_Others => Others_Alt_Idx := Alt_Idx; @@ -1375,7 +1362,7 @@ package body Synth.Stmts is Sel_Net, Case_El.all, Default, Res, Get_Location (Expr)); Synth_Assignment - (Syn_Inst, Targ, Create_Value_Net (Res, Targ_Type), Stmt, En); + (Syn_Inst, Targ, Create_Value_Net (Res, Targ_Type), Stmt); end; -- free. @@ -1570,7 +1557,6 @@ package body Synth.Stmts is procedure Synth_Subprogram_Association (Subprg_Inst : Synth_Instance_Acc; Caller_Inst : Synth_Instance_Acc; - En : Net; Init : Association_Iterator_Init; Infos : out Target_Info_Array) is @@ -1604,7 +1590,7 @@ package body Synth.Stmts is then Actual := Get_Default_Value (Inter); Val := Synth_Expression_With_Type - (Subprg_Inst, Actual, Inter_Type, En); + (Subprg_Inst, Actual, Inter_Type); else if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression @@ -1614,11 +1600,11 @@ package body Synth.Stmts is Actual := Assoc; end if; Val := Synth_Expression_With_Type - (Caller_Inst, Actual, Inter_Type, En); + (Caller_Inst, Actual, Inter_Type); end if; when Iir_Out_Mode | Iir_Inout_Mode => Actual := Get_Actual (Assoc); - Info := Synth_Target (Caller_Inst, Actual, En); + Info := Synth_Target (Caller_Inst, Actual); case Iir_Kinds_Interface_Object_Declaration (Get_Kind (Inter)) is @@ -1692,15 +1678,14 @@ package body Synth.Stmts is procedure Synth_Subprogram_Association (Subprg_Inst : Synth_Instance_Acc; Caller_Inst : Synth_Instance_Acc; Inter_Chain : Node; - Assoc_Chain : Node; - En : Net) + Assoc_Chain : Node) is Infos : Target_Info_Array (1 .. 0); pragma Unreferenced (Infos); Init : Association_Iterator_Init; begin Init := Association_Iterator_Build (Inter_Chain, Assoc_Chain); - Synth_Subprogram_Association (Subprg_Inst, Caller_Inst, En, Init, Infos); + Synth_Subprogram_Association (Subprg_Inst, Caller_Inst, Init, Infos); end Synth_Subprogram_Association; -- Create wires for out and inout interface variables. @@ -1738,7 +1723,6 @@ package body Synth.Stmts is procedure Synth_Subprogram_Back_Association (Subprg_Inst : Synth_Instance_Acc; Caller_Inst : Synth_Instance_Acc; - En : Net; Init : Association_Iterator_Init; Infos : Target_Info_Array) is @@ -1762,7 +1746,7 @@ package body Synth.Stmts is end if; Nbr_Inout := Nbr_Inout + 1; Val := Get_Value (Subprg_Inst, Inter); - Synth_Assignment (Caller_Inst, Infos (Nbr_Inout), Val, Assoc, En); + Synth_Assignment (Caller_Inst, Infos (Nbr_Inout), Val, Assoc); -- Free wire used for out/inout interface variables. if Val.Val.Kind = Value_Wire then @@ -1791,7 +1775,6 @@ package body Synth.Stmts is function Synth_Dynamic_Subprogram_Call (Syn_Inst : Synth_Instance_Acc; Sub_Inst : Synth_Instance_Acc; Call : Node; - En : Net; Init : Association_Iterator_Init; Infos : Target_Info_Array) return Valtyp @@ -1847,7 +1830,7 @@ package body Synth.Stmts is (C.W_Ret, Build_Control_Signal (Sub_Inst, 1, Imp)); Phi_Assign_Static (C.W_Ret, Bit1); - Decls.Synth_Declarations (C.Inst, Get_Declaration_Chain (Bod), En, True); + Decls.Synth_Declarations (C.Inst, Get_Declaration_Chain (Bod), True); if not Is_Error (C.Inst) then Synth_Sequential_Statements (C, Get_Sequential_Statement_Chain (Bod)); end if; @@ -1866,8 +1849,7 @@ package body Synth.Stmts is end if; else Res := No_Valtyp; - Synth_Subprogram_Back_Association - (C.Inst, Syn_Inst, En, Init, Infos); + Synth_Subprogram_Back_Association (C.Inst, Syn_Inst, Init, Infos); end if; end if; @@ -1923,7 +1905,7 @@ package body Synth.Stmts is C.Ret_Typ := Get_Subtype_Object (Syn_Inst, Get_Return_Type (Imp)); end if; - Synth_Declarations (C.Inst, Get_Declaration_Chain (Bod), No_Net, True); + Synth_Declarations (C.Inst, Get_Declaration_Chain (Bod), True); if not Is_Error (C.Inst) then Synth_Sequential_Statements (C, Get_Sequential_Statement_Chain (Bod)); @@ -1944,8 +1926,7 @@ package body Synth.Stmts is end if; else Res := No_Valtyp; - Synth_Subprogram_Back_Association - (C.Inst, Syn_Inst, No_Net, Init, Infos); + Synth_Subprogram_Back_Association (C.Inst, Syn_Inst, Init, Infos); end if; end if; @@ -1957,7 +1938,6 @@ package body Synth.Stmts is function Synth_Subprogram_Call (Syn_Inst : Synth_Instance_Acc; Call : Node; - En : Net; Init : Association_Iterator_Init) return Valtyp is @@ -1978,7 +1958,7 @@ package body Synth.Stmts is Sub_Inst := Make_Instance (Up_Inst, Bod, New_Internal_Name (Ctxt)); Set_Instance_Base (Sub_Inst, Syn_Inst); - Synth_Subprogram_Association (Sub_Inst, Syn_Inst, En, Init, Infos); + Synth_Subprogram_Association (Sub_Inst, Syn_Inst, Init, Infos); if Is_Error (Sub_Inst) then Res := No_Valtyp; @@ -1994,7 +1974,7 @@ package body Synth.Stmts is (Syn_Inst, Sub_Inst, Call, Init, Infos); else Res := Synth_Dynamic_Subprogram_Call - (Syn_Inst, Sub_Inst, Call, En, Init, Infos); + (Syn_Inst, Sub_Inst, Call, Init, Infos); end if; end if; @@ -2014,7 +1994,7 @@ package body Synth.Stmts is end Synth_Subprogram_Call; function Synth_Subprogram_Call - (Syn_Inst : Synth_Instance_Acc; Call : Node; En : Net) return Valtyp + (Syn_Inst : Synth_Instance_Acc; Call : Node) return Valtyp is Imp : constant Node := Get_Implementation (Call); Assoc_Chain : constant Node := Get_Parameter_Association_Chain (Call); @@ -2022,21 +2002,20 @@ package body Synth.Stmts is Init : Association_Iterator_Init; begin Init := Association_Iterator_Build (Inter_Chain, Assoc_Chain); - return Synth_Subprogram_Call (Syn_Inst, Call, En, Init); + return Synth_Subprogram_Call (Syn_Inst, Call, Init); end Synth_Subprogram_Call; function Synth_User_Operator (Syn_Inst : Synth_Instance_Acc; Left_Expr : Node; Right_Expr : Node; - Expr : Node; - En : Net) return Valtyp + Expr : Node) return Valtyp is Imp : constant Node := Get_Implementation (Expr); Inter_Chain : constant Node := Get_Interface_Declaration_Chain (Imp); Init : Association_Iterator_Init; begin Init := Association_Iterator_Build (Inter_Chain, Left_Expr, Right_Expr); - return Synth_Subprogram_Call (Syn_Inst, Expr, En, Init); + return Synth_Subprogram_Call (Syn_Inst, Expr, Init); end Synth_User_Operator; procedure Synth_Implicit_Procedure_Call @@ -2056,19 +2035,18 @@ package body Synth.Stmts is Areapools.Mark (Area_Mark, Instance_Pool.all); Sub_Inst := Make_Instance (Syn_Inst, Imp, New_Internal_Name (Ctxt)); - Synth_Subprogram_Association (Sub_Inst, Syn_Inst, No_Net, Init, Infos); + Synth_Subprogram_Association (Sub_Inst, Syn_Inst, Init, Infos); Synth.Static_Proc.Synth_Static_Procedure (Sub_Inst, Imp, Call); - Synth_Subprogram_Back_Association - (Sub_Inst, Syn_Inst, No_Net, Init, Infos); + Synth_Subprogram_Back_Association (Sub_Inst, Syn_Inst, Init, Infos); Free_Instance (Sub_Inst); Areapools.Release (Area_Mark, Instance_Pool.all); end Synth_Implicit_Procedure_Call; procedure Synth_Procedure_Call - (Syn_Inst : Synth_Instance_Acc; Stmt : Node; En : Net) + (Syn_Inst : Synth_Instance_Acc; Stmt : Node) is Call : constant Node := Get_Procedure_Call (Stmt); Imp : constant Node := Get_Implementation (Call); @@ -2080,7 +2058,7 @@ package body Synth.Stmts is Error_Msg_Synth (+Stmt, "call to foreign %n is not supported", +Imp); else - Res := Synth_Subprogram_Call (Syn_Inst, Call, En); + Res := Synth_Subprogram_Call (Syn_Inst, Call); pragma Assert (Res = No_Valtyp); end if; when others => @@ -2274,7 +2252,7 @@ package body Synth.Stmts is Phi_False : Phi_Type; begin if Cond /= Null_Node then - Cond_Val := Synth_Expression (C.Inst, Cond, No_Net); + Cond_Val := Synth_Expression (C.Inst, Cond); Static_Cond := Is_Static_Val (Cond_Val.Val); if Static_Cond then if Get_Static_Discrete (Cond_Val) = 0 then @@ -2337,7 +2315,7 @@ package body Synth.Stmts is Cond_Val : Valtyp; begin if Cond /= Null_Node then - Cond_Val := Synth_Expression (C.Inst, Cond, No_Net); + Cond_Val := Synth_Expression (C.Inst, Cond); if Cond_Val = No_Valtyp then Set_Error (C.Inst); return; @@ -2498,8 +2476,7 @@ package body Synth.Stmts is loop if Cond /= Null_Node then - Val := Synth_Expression_With_Type - (C.Inst, Cond, Boolean_Type, No_Net); + Val := Synth_Expression_With_Type (C.Inst, Cond, Boolean_Type); if not Is_Static (Val.Val) then Error_Msg_Synth (+Cond, "loop condition must be static"); exit; @@ -2546,8 +2523,7 @@ package body Synth.Stmts is loop if Cond /= Null_Node then - Val := Synth_Expression_With_Type - (C.Inst, Cond, Boolean_Type, No_Net); + Val := Synth_Expression_With_Type (C.Inst, Cond, Boolean_Type); pragma Assert (Is_Static (Val.Val)); exit when Read_Discrete (Val) = 0; end if; @@ -2571,8 +2547,7 @@ package body Synth.Stmts is begin if Expr /= Null_Node then -- Return in function. - Val := Synth_Expression_With_Type - (C.Inst, Expr, C.Ret_Typ, No_Net); + Val := Synth_Expression_With_Type (C.Inst, Expr, C.Ret_Typ); if Val = No_Valtyp then Set_Error (C.Inst); return; @@ -2624,7 +2599,7 @@ package body Synth.Stmts is Sev_V : Natural; begin if Rep_Expr /= Null_Node then - Rep := Synth_Expression_With_Basetype (C.Inst, Rep_Expr, No_Net); + Rep := Synth_Expression_With_Basetype (C.Inst, Rep_Expr); if Rep = No_Valtyp then Set_Error (C.Inst); return; @@ -2632,7 +2607,7 @@ package body Synth.Stmts is Strip_Const (Rep); end if; if Sev_Expr /= Null_Node then - Sev := Synth_Expression (C.Inst, Sev_Expr, No_Net); + Sev := Synth_Expression (C.Inst, Sev_Expr); if Sev = No_Valtyp then Set_Error (C.Inst); return; @@ -2683,8 +2658,7 @@ package body Synth.Stmts is is Cond : Valtyp; begin - Cond := Synth_Expression - (C.Inst, Get_Assertion_Condition (Stmt), No_Net); + Cond := Synth_Expression (C.Inst, Get_Assertion_Condition (Stmt)); if Cond = No_Valtyp then Set_Error (C.Inst); return; @@ -2706,8 +2680,7 @@ package body Synth.Stmts is En : Net; Inst : Instance; begin - Cond := Synth_Expression - (C.Inst, Get_Assertion_Condition (Stmt), No_Net); + Cond := Synth_Expression (C.Inst, Get_Assertion_Condition (Stmt)); if Cond = No_Valtyp then Set_Error (C.Inst); return; @@ -2762,9 +2735,9 @@ package body Synth.Stmts is when Iir_Kind_If_Statement => Synth_If_Statement (C, Stmt); when Iir_Kind_Simple_Signal_Assignment_Statement => - Synth_Simple_Signal_Assignment (C.Inst, Stmt, No_Net); + Synth_Simple_Signal_Assignment (C.Inst, Stmt); when Iir_Kind_Conditional_Signal_Assignment_Statement => - Synth_Conditional_Signal_Assignment (C.Inst, Stmt, No_Net); + Synth_Conditional_Signal_Assignment (C.Inst, Stmt); when Iir_Kind_Variable_Assignment_Statement => Synth_Variable_Assignment (C, Stmt); when Iir_Kind_Conditional_Variable_Assignment_Statement => @@ -2789,7 +2762,7 @@ package body Synth.Stmts is when Iir_Kind_Return_Statement => Synth_Return_Statement (C, Stmt); when Iir_Kind_Procedure_Call_Statement => - Synth_Procedure_Call (C.Inst, Stmt, No_Net); + Synth_Procedure_Call (C.Inst, Stmt); when Iir_Kind_Report_Statement => if not Is_Dyn then Synth_Static_Report_Statement (C, Stmt); @@ -2858,7 +2831,7 @@ package body Synth.Stmts is Error_Msg_Synth (+Stmt, "expect wait condition"); return; end if; - Cond_Val := Synth_Expression (C.Inst, Cond, No_Net); + Cond_Val := Synth_Expression (C.Inst, Cond); Push_Phi; Synth_Sequential_Statements (C, Get_Chain (Stmt)); @@ -2897,12 +2870,11 @@ package body Synth.Stmts is Ret_Typ => null, Nbr_Ret => 0); - Mark (M, Proc_Pool); Instance_Pool := Proc_Pool'Access; if Is_Valid (Decls_Chain) then - Synth_Declarations (C.Inst, Decls_Chain, No_Net); + Synth_Declarations (C.Inst, Decls_Chain); end if; Set_Wire_Gate (C.W_En, Build_Control_Signal (Syn_Inst, 1, Proc)); @@ -2925,7 +2897,7 @@ package body Synth.Stmts is end Synth_Process_Statement; function Synth_User_Function_Call - (Syn_Inst : Synth_Instance_Acc; Expr : Node; En : Net) return Valtyp is + (Syn_Inst : Synth_Instance_Acc; Expr : Node) return Valtyp is begin -- Is it a call to an ieee function ? declare @@ -2950,7 +2922,7 @@ package body Synth.Stmts is end if; end; - return Synth_Subprogram_Call (Syn_Inst, Expr, En); + return Synth_Subprogram_Call (Syn_Inst, Expr); end Synth_User_Function_Call; -- Report an assertion failure (that is known to failed). @@ -2961,7 +2933,7 @@ package body Synth.Stmts is Str : Valtyp; begin if Msg /= Null_Node then - Str := Synth_Expression_With_Basetype (Syn_Inst, Msg, No_Net); + Str := Synth_Expression_With_Basetype (Syn_Inst, Msg); else Str := No_Valtyp; end if; @@ -2981,7 +2953,7 @@ package body Synth.Stmts is Val : Valtyp; Inst : Instance; begin - Val := Synth_Expression (Syn_Inst, Cond, No_Net); + Val := Synth_Expression (Syn_Inst, Cond); if Val = No_Valtyp then Set_Error (Syn_Inst); return; @@ -3019,7 +2991,7 @@ package body Synth.Stmts is Mark (M, Proc_Pool); Instance_Pool := Proc_Pool'Access; - Synth_Declarations (Blk_Inst, Get_Declaration_Chain (Blk), No_Net); + Synth_Declarations (Blk_Inst, Get_Declaration_Chain (Blk)); Synth_Concurrent_Statements (Blk_Inst, Get_Concurrent_Statement_Chain (Blk)); @@ -3043,7 +3015,7 @@ package body Synth.Stmts is declare E : constant Vhdl.Types.Vhdl_Node := Get_HDL_Node (Expr); begin - return Get_Net (Ctxt, Synth_Expression (Syn_Inst, E, No_Net)); + return Get_Net (Ctxt, Synth_Expression (Syn_Inst, E)); end; when N_Not_Bool => pragma Assert (Loc /= No_Location); @@ -3335,7 +3307,7 @@ package body Synth.Stmts is Create_Object (Bod_Inst, Iterator, Iterator_Val); end if; - Synth_Declarations (Bod_Inst, Decls_Chain, No_Net); + Synth_Declarations (Bod_Inst, Decls_Chain); Synth_Concurrent_Statements (Bod_Inst, Get_Concurrent_Statement_Chain (Bod)); @@ -3359,7 +3331,7 @@ package body Synth.Stmts is loop Icond := Get_Condition (Gen); if Icond /= Null_Node then - Cond := Synth_Expression (Syn_Inst, Icond, No_Net); + Cond := Synth_Expression (Syn_Inst, Icond); Strip_Const (Cond); else -- It is the else generate. @@ -3438,19 +3410,19 @@ package body Synth.Stmts is case Get_Kind (Stmt) is when Iir_Kind_Concurrent_Simple_Signal_Assignment => Push_Phi; - Synth_Simple_Signal_Assignment (Syn_Inst, Stmt, No_Net); + Synth_Simple_Signal_Assignment (Syn_Inst, Stmt); Pop_And_Merge_Phi (Ctxt, Stmt); when Iir_Kind_Concurrent_Conditional_Signal_Assignment => Push_Phi; - Synth_Conditional_Signal_Assignment (Syn_Inst, Stmt, No_Net); + Synth_Conditional_Signal_Assignment (Syn_Inst, Stmt); Pop_And_Merge_Phi (Ctxt, Stmt); when Iir_Kind_Concurrent_Selected_Signal_Assignment => Push_Phi; - Synth_Selected_Signal_Assignment (Syn_Inst, Stmt, No_Net); + Synth_Selected_Signal_Assignment (Syn_Inst, Stmt); Pop_And_Merge_Phi (Ctxt, Stmt); when Iir_Kind_Concurrent_Procedure_Call_Statement => Push_Phi; - Synth_Procedure_Call (Syn_Inst, Stmt, No_Net); + Synth_Procedure_Call (Syn_Inst, Stmt); Pop_And_Merge_Phi (Ctxt, Stmt); when Iir_Kinds_Process_Statement => Push_Phi; @@ -3539,7 +3511,7 @@ package body Synth.Stmts is -- The value must be true V := Synth_Expression_With_Type - (Syn_Inst, Get_Expression (Spec), Boolean_Type, No_Net); + (Syn_Inst, Get_Expression (Spec), Boolean_Type); if Read_Discrete (V) /= 1 then return; end if; @@ -3551,7 +3523,7 @@ package body Synth.Stmts is Base : Valtyp; Typ : Type_Acc; begin - Synth_Assignment_Prefix (Syn_Inst, Sig, No_Net, Base, Typ, Off, Dyn); + Synth_Assignment_Prefix (Syn_Inst, Sig, Base, Typ, Off, Dyn); pragma Assert (Off = (0, 0)); pragma Assert (Dyn.Voff = No_Net); pragma Assert (Base.Val.Kind = Value_Wire); @@ -3629,7 +3601,7 @@ package body Synth.Stmts is | Iir_Kind_Procedure_Body | Iir_Kind_Attribute_Declaration | Iir_Kind_Attribute_Specification => - Synth_Declaration (Unit_Inst, Item, No_Net, False, Last_Type); + Synth_Declaration (Unit_Inst, Item, False, Last_Type); when Iir_Kind_Concurrent_Simple_Signal_Assignment => Synth_Concurrent_Statement (Unit_Inst, Item); when others => diff --git a/src/synth/synth-stmts.ads b/src/synth/synth-stmts.ads index 330cf156e..db536e02d 100644 --- a/src/synth/synth-stmts.ads +++ b/src/synth/synth-stmts.ads @@ -32,8 +32,7 @@ package Synth.Stmts is procedure Synth_Subprogram_Association (Subprg_Inst : Synth_Instance_Acc; Caller_Inst : Synth_Instance_Acc; Inter_Chain : Node; - Assoc_Chain : Node; - En : Net); + Assoc_Chain : Node); -- Dynamic index for Synth_Assignment_Prefix. -- As dynamic is about dynamic (!) index, the index is a net. @@ -59,7 +58,6 @@ package Synth.Stmts is -- DEST_DYN is set (Voff field set) when there is a non-static index. procedure Synth_Assignment_Prefix (Syn_Inst : Synth_Instance_Acc; Pfx : Node; - En : Net; Dest_Base : out Valtyp; Dest_Typ : out Type_Acc; Dest_Off : out Value_Offsets; @@ -68,8 +66,7 @@ package Synth.Stmts is procedure Synth_Assignment (Syn_Inst : Synth_Instance_Acc; Target : Node; Val : Valtyp; - Loc : Node; - En : Net); + Loc : Node); function Synth_Read_Memory (Syn_Inst : Synth_Instance_Acc; Obj : Valtyp; @@ -79,14 +76,13 @@ package Synth.Stmts is Loc : Node) return Valtyp; function Synth_User_Function_Call - (Syn_Inst : Synth_Instance_Acc; Expr : Node; En : Net) return Valtyp; + (Syn_Inst : Synth_Instance_Acc; Expr : Node) return Valtyp; -- Operation implemented by a user function. function Synth_User_Operator (Syn_Inst : Synth_Instance_Acc; Left_Expr : Node; Right_Expr : Node; - Expr : Node; - En : Net) return Valtyp; + Expr : Node) return Valtyp; -- Generate netlists for concurrent statements STMTS. procedure Synth_Concurrent_Statements |