Leider kann die Xilinx-Synthese nur Arrays bis max. 2 Dimensionen. Der
Xilinx SXT User Guide dazu:
XST supports multi-dimensional array types
of up to two dimensions.
Das ist lästig, wenn man mehr Dimensionen bräuchte, und der Simulator das problemlos mitmacht...
Ein anderer Effekt ist das Initialisieren von Arrays, das in bestimmten Konstellationen einfach nicht klappt und mit einer Meldung wie
Default value is ignored for signal <my_array>
kommentiert wird. Und auch hier: die Simulation läuft tadellos, nur der Synthesizer schafft die Initialisierung nicht...
Glück gehabt: die Rettung naht verkleidet als undokumentierte Syntheseoption: -use_new_parser yes
Der ist zu finden in den Process-Properties, die mit einem Rechtsclick auf Synthesize-XST auswählbar sind. Dort muß dann Property display level: Advanced ausgewählt und in der letzten Zeile bei Other XST Command Line Options der Schalter -use_new_parser yes eingetragen werden.
Mit diesem Schalter ergibt sich dann eine wundersame Wandlung:
-- XST13: OK TYPE array_typ1 is array (natural range <>) of std_logic; TYPE array_typ2 is array (natural range <>, natural range <>) of std_logic; -- XST13 default: Fehler / mit "-use_new_parser yes": OK TYPE array_typ3 is array (natural range <>, natural range <>, natural range <>) of std_logic; TYPE array_typ4 is array (natural range <>, natural range <>, natural range <>, natural range <>) of std_logic; TYPE array_typ5 is array (natural range <>, natural range <>, natural range <>, natural range <>, natural range <>) of std_logic;
Hier der komplette Quelltext dazu: PackageTypedef.vhd