diff options
-rw-r--r-- | src/synth/netlists-disp_vhdl.adb | 2 | ||||
-rw-r--r-- | src/synth/synth-decls.adb | 4 | ||||
-rw-r--r-- | src/synth/synth-expr.adb | 10 |
3 files changed, 13 insertions, 3 deletions
diff --git a/src/synth/netlists-disp_vhdl.adb b/src/synth/netlists-disp_vhdl.adb index eb86f0c6d..95d01102a 100644 --- a/src/synth/netlists-disp_vhdl.adb +++ b/src/synth/netlists-disp_vhdl.adb @@ -567,7 +567,7 @@ package body Netlists.Disp_Vhdl is Iw : constant Width := Get_Width (Get_Input_Net (Inst, 1)); begin Disp_Template - (" process (\i0, \i1)" & NL & + (" process (\i0, \i1, \i2)" & NL & " begin" & NL & " \o0 <= \i0;" & NL & " \o0 (" & diff --git a/src/synth/synth-decls.adb b/src/synth/synth-decls.adb index 8a22c2fa0..b31e2c1cb 100644 --- a/src/synth/synth-decls.adb +++ b/src/synth/synth-decls.adb @@ -211,7 +211,9 @@ package body Synth.Decls is -- constraint in some order that is not defined by the language. Etyp := Get_Value_Type (Syn_Inst, El_Type); - if Is_One_Dimensional_Array_Type (Atype) then + if Etyp.Kind = Type_Bit + and then Is_One_Dimensional_Array_Type (Atype) + then St_El := Get_Index_Type (St_Indexes, 0); return Create_Vector_Type (Synth_Bounds_From_Range (Syn_Inst, St_El), Etyp); diff --git a/src/synth/synth-expr.adb b/src/synth/synth-expr.adb index 10173471f..8f7665ace 100644 --- a/src/synth/synth-expr.adb +++ b/src/synth/synth-expr.adb @@ -542,7 +542,15 @@ package body Synth.Expr is declare Bnds : constant Value_Acc := Get_Value (Syn_Inst, Atype); begin - return Bnds.Typ.Vbound; + case Bnds.Typ.Kind is + when Type_Vector => + pragma Assert (Dim = 0); + return Bnds.Typ.Vbound; + when Type_Array => + return Bnds.Typ.Abounds.D (Iir_Index32 (Dim + 1)); + when others => + raise Internal_Error; + end case; end; end if; end Synth_Array_Bounds; |