aboutsummaryrefslogtreecommitdiffstats
path: root/src/synth/synth-expr.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/synth/synth-expr.adb')
-rw-r--r--src/synth/synth-expr.adb13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/synth/synth-expr.adb b/src/synth/synth-expr.adb
index 1e39efb13..21511e615 100644
--- a/src/synth/synth-expr.adb
+++ b/src/synth/synth-expr.adb
@@ -1168,14 +1168,17 @@ package body Synth.Expr is
Pfx : constant Node := Get_Prefix (Name);
Pfx_Val : constant Value_Acc := Synth_Expression (Syn_Inst, Pfx);
Indexes : constant Iir_Flist := Get_Index_List (Name);
- Idx_Val : constant Value_Acc :=
- Synth_Expression (Syn_Inst, Get_Nth_Element (Indexes, 0));
+ Idx_Expr : constant Node := Get_Nth_Element (Indexes, 0);
+ Idx_Val : Value_Acc;
begin
if Get_Nbr_Elements (Indexes) /= 1 then
Error_Msg_Synth (+Name, "multi-dim arrays not supported");
return null;
end if;
+ Idx_Val := Synth_Expression_With_Type
+ (Syn_Inst, Idx_Expr, Get_Base_Type (Get_Type (Idx_Expr)));
+
if Idx_Val.Kind = Value_Discrete then
declare
Off : Uns32;
@@ -1661,16 +1664,16 @@ package body Synth.Expr is
return Value_Acc
is
Len : constant Iir_Index32 := Iir_Index32 (Sz);
+ El_Type : constant Type_Acc := Get_Array_Element (Res_Type);
Arr : Value_Array_Acc;
Bnd : Type_Acc;
begin
Arr := Create_Value_Array (Len);
for I in 1 .. Len loop
Arr.V (Len - I + 1) := Create_Value_Discrete
- (Std_Logic_0_Pos + (Arg / 2 ** Natural (I - 1)) mod 2,
- Res_Type.Vec_El);
+ (Std_Logic_0_Pos + (Arg / 2 ** Natural (I - 1)) mod 2, El_Type);
end loop;
- Bnd := Create_Vec_Type_By_Length (Width (Len), Res_Type.Vec_El);
+ Bnd := Create_Vec_Type_By_Length (Width (Len), El_Type);
return Create_Value_Array (Bnd, Arr);
end Eval_To_Unsigned;