M
Michael Neuling
Guest
I'm using XST version 6.1 and it doesn't support VHDL
multi-dimensional arrays greater than 2. ie. this is not supported:
type std_ulogic_3D is array (NATURAL RANGE <>,NATURAL RANGE
<>,NATURAL RANGE <> ) of std_ulogic;
XST gives error "Matrix not supported yet." if you instance an
std_ulogic_3D
What synthesis front ends are available for Xilinx FPGAs which support
this? I've attached some VHDL code to test this...
BTW I know I can create arrays of arrays in VHDL but this has problems
since you need to constrain one of the dimensions. I don't want to do
this as it will limit my design. Also, XST gets exceptions when 4 or
more dimensions are created this way. ie. the following code breaks
XST when you instance a std_ulogic_4D:
type std_ulogic_2D is array ( NATURAL RANGE <> ) of
std_ulogic_vector(1 DOWNTO 0);
type std_ulogic_3D is array ( NATURAL RANGE <> ) of std_ulogic_2D(1
DOWNTO 0);
type std_ulogic_4D is array ( NATURAL RANGE <> ) of std_ulogic_3D(1
DOWNTO 0);
Regards,
Michael
-------
library ieee;
use ieee.std_logic_1164.all;
package testPkg is
type std_ulogic_3D is array ( NATURAL RANGE <>,
NATURAL RANGE <>,
NATURAL RANGE <> ) of std_ulogic;
end testPkg;
use work.testPkg.all;
entity test is
port (
TestIn : in std_ulogic_3D(1 DOWNTO 0,
1 DOWNTO 0,
1 DOWNTO 0);
TestOut : out std_ulogic_3D(1 DOWNTO 0,
1 DOWNTO 0,
1 DOWNTO 0)
);
end test;
architecture rtl of test is
begin
TestOut <= TestIn;
end rtl;
multi-dimensional arrays greater than 2. ie. this is not supported:
type std_ulogic_3D is array (NATURAL RANGE <>,NATURAL RANGE
<>,NATURAL RANGE <> ) of std_ulogic;
XST gives error "Matrix not supported yet." if you instance an
std_ulogic_3D
What synthesis front ends are available for Xilinx FPGAs which support
this? I've attached some VHDL code to test this...
BTW I know I can create arrays of arrays in VHDL but this has problems
since you need to constrain one of the dimensions. I don't want to do
this as it will limit my design. Also, XST gets exceptions when 4 or
more dimensions are created this way. ie. the following code breaks
XST when you instance a std_ulogic_4D:
type std_ulogic_2D is array ( NATURAL RANGE <> ) of
std_ulogic_vector(1 DOWNTO 0);
type std_ulogic_3D is array ( NATURAL RANGE <> ) of std_ulogic_2D(1
DOWNTO 0);
type std_ulogic_4D is array ( NATURAL RANGE <> ) of std_ulogic_3D(1
DOWNTO 0);
Regards,
Michael
-------
library ieee;
use ieee.std_logic_1164.all;
package testPkg is
type std_ulogic_3D is array ( NATURAL RANGE <>,
NATURAL RANGE <>,
NATURAL RANGE <> ) of std_ulogic;
end testPkg;
use work.testPkg.all;
entity test is
port (
TestIn : in std_ulogic_3D(1 DOWNTO 0,
1 DOWNTO 0,
1 DOWNTO 0);
TestOut : out std_ulogic_3D(1 DOWNTO 0,
1 DOWNTO 0,
1 DOWNTO 0)
);
end test;
architecture rtl of test is
begin
TestOut <= TestIn;
end rtl;