aboutsummaryrefslogtreecommitdiffstats
path: root/src/synth
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-05-06 18:38:36 +0200
committerTristan Gingold <tgingold@free.fr>2020-05-06 18:38:36 +0200
commit9ebdd46defd0c2ce54d0e04c293e9d5a5b111026 (patch)
treebc2efdc6d7ffa1f8fb1409c4ee37d7a1c15f7c69 /src/synth
parent4e6760203fc2b88567ac37fd6054c5a684d099ca (diff)
downloadghdl-9ebdd46defd0c2ce54d0e04c293e9d5a5b111026.tar.gz
ghdl-9ebdd46defd0c2ce54d0e04c293e9d5a5b111026.tar.bz2
ghdl-9ebdd46defd0c2ce54d0e04c293e9d5a5b111026.zip
synth: revert a previous commit: remove the En parameter.
Diffstat (limited to 'src/synth')
-rw-r--r--src/synth/synth-aggr.adb28
-rw-r--r--src/synth/synth-aggr.ads3
-rw-r--r--src/synth/synth-decls.adb56
-rw-r--r--src/synth/synth-decls.ads13
-rw-r--r--src/synth/synth-expr.adb103
-rw-r--r--src/synth/synth-expr.ads10
-rw-r--r--src/synth/synth-files_operations.adb7
-rw-r--r--src/synth/synth-insts.adb41
-rw-r--r--src/synth/synth-oper.adb26
-rw-r--r--src/synth/synth-oper.ads12
-rw-r--r--src/synth/synth-stmts.adb226
-rw-r--r--src/synth/synth-stmts.ads12
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