aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2019-09-05 09:22:18 +0200
committerTristan Gingold <tgingold@free.fr>2019-09-05 09:22:18 +0200
commit6fcdde1aff1115a683d48235d1533a41f0ffaba5 (patch)
tree83f30624b3cf60647dff44e54f969380d454a133
parentf6d49eb62dac359c96aefc79d3d0ae8f907dc8d9 (diff)
downloadghdl-6fcdde1aff1115a683d48235d1533a41f0ffaba5.tar.gz
ghdl-6fcdde1aff1115a683d48235d1533a41f0ffaba5.tar.bz2
ghdl-6fcdde1aff1115a683d48235d1533a41f0ffaba5.zip
synth: handle non-constant array aggregates.
-rw-r--r--src/synth/netlists-concats.ads2
-rw-r--r--src/synth/synth-context.adb14
2 files changed, 15 insertions, 1 deletions
diff --git a/src/synth/netlists-concats.ads b/src/synth/netlists-concats.ads
index 3b1e9cb93..7f3e81898 100644
--- a/src/synth/netlists-concats.ads
+++ b/src/synth/netlists-concats.ads
@@ -24,7 +24,7 @@ with Netlists.Builders; use Netlists.Builders;
package Netlists.Concats is
type Concat_Type is limited private;
- -- Append net N to C.
+ -- Append net N to C. The first net appended will be at offset 0.
procedure Append (C : in out Concat_Type; N : Net);
-- Get the concatenation of all nets in C. Reset C.
diff --git a/src/synth/synth-context.adb b/src/synth/synth-context.adb
index 0024c3bb9..b87f9b06b 100644
--- a/src/synth/synth-context.adb
+++ b/src/synth/synth-context.adb
@@ -24,7 +24,9 @@ with Types; use Types;
with Tables;
with Types_Utils; use Types_Utils;
with Vhdl.Errors; use Vhdl.Errors;
+
with Netlists.Builders; use Netlists.Builders;
+with Netlists.Concats;
with Synth.Errors; use Synth.Errors;
with Synth.Expr; use Synth.Expr;
@@ -410,6 +412,18 @@ package body Synth.Context is
end;
end if;
end;
+ when Value_Array =>
+ declare
+ use Netlists.Concats;
+ C : Concat_Type;
+ Res : Net;
+ begin
+ for I in Val.Arr.V'Range loop
+ Append (C, Get_Net (Val.Arr.V (I)));
+ end loop;
+ Build (Build_Context, C, Res);
+ return Res;
+ end;
when others =>
raise Internal_Error;
end case;