子类型指示VHDL200X的语法非法

子类型指示VHDL200X的语法非法,vhdl,synthesis,xilinx-ise,Vhdl,Synthesis,Xilinx Ise,我正在尝试创建一个“动态”2D数组,可以在实体中使用泛型进行设置 我遵循了第32页中的示例 包中my类型的声明(类型声明): 这是我第一次使用更新的编译器(VHDL200X),我不认为我做得不对,但我不会得到以下信息: VHDL\CommonBlocks\DynamicRegisterSet\Sources\DynamicRegisterSet.vhd“第25行:子类型指示的非法语法 任何人有什么建议吗?我将非常感谢!Xilinx ISE 14.7不支持VHDL-2008 它们支持大量VHDL-

我正在尝试创建一个“动态”2D数组,可以在实体中使用泛型进行设置

我遵循了第32页中的示例

包中my类型的声明(类型声明):

这是我第一次使用更新的编译器(VHDL200X),我不认为我做得不对,但我不会得到以下信息:

VHDL\CommonBlocks\DynamicRegisterSet\Sources\DynamicRegisterSet.vhd“第25行:子类型指示的非法语法


任何人有什么建议吗?我将非常感谢!Xilinx ISE 14.7不支持VHDL-2008

它们支持大量VHDL-2002/2008功能,但不支持无约束数组元素

Vivado在2016.1中添加了VHDL-2008支持,并将其设置为默认值。但据我所知,它并没有完全支持VHDL-2008

在VHDL部分有一个Xilinx XST synthesis用户指南,列出了这些功能。(很抱歉,我的手机上没有UG号码。)

ISE ISE完全不支持VHDL-2008。请阅读XST指南中的更多详细信息

支持的VHDL IEEE标准

XST支持以下VHDL IEEE标准:

  • Std1076-1987
  • Std1076-1993
  • Std1076-2006
注:Std 1076-2006仅部分实施

万岁 Vivado有一套可合成的VHDL-2008结构。请阅读中的更多详细信息
(支持的VHDL-2008功能章节)

没有49行代码发布…之前的行是注释,它给出了REGISTERSET的错误:这是第49行,您使用的是什么工具?这些信息应该在问题中,而不是注释中。更好的是,编译您发布的内容,使错误与代码匹配。@Paepbels我使用的是xilinx ISE 14.7(64位)没关系,感谢所有的支持,我只是感到困惑。我认为这一变化是官方的,规模太小,以至于我认为它完全是为了保持VHDL设计的兼容性而实施的。我想我错了:)。你知道对于任何变化,其他FPGA制造商也是如此吗?2008年对Altera Quartus Prime和Lattice Dia的支持mond更好。我没有关于Symplify的信息,但我怀疑它更好。我现在正在使用lattice diamond,但我现在在尝试生成测试台时遇到了相同的错误:p这还没有结束Yethat您是否为diamond启用了VHDL-2008?在合成中使用2008(x)或者testbench是两个完全不同的东西…你是在用活动HDL进行模拟吗?双击你的活动设计策略,例如Area,在流程树中导航到Synthesis design->LSE。然后向下滚动到按钮并将VHDL 2008设置为True。(我的菱形版本是3.7)
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

package TypeDeclarations is

-- Type BusArray -----------------------------------------------------
-- Can be used by: DArray((Y - 1) downto 0)((X - 1) downto 0);      --
                                                                    --
    type TArray is array (natural range <>) of std_logic_vector;    --
                                                                    --
----------------------------------------------------------------------
end package;
-- Libraries
library ieee;
use ieee.std_logic_1164.all;

-- Own libraries
use work.TypeDeclarations.all;

entity DynamicRegisterSet is
    generic (
        INPUT_DATAWIDTH  : integer := 1;
        OUTPUT_DATAWIDTH : integer := 8;
        N_REGISTERS      : integer := 1);
    port (
        MCLK : in std_logic := '0';
        WE   : in std_logic := '0';

        -- input data
        DATA : in std_logic_vector((INPUT_DATAWIDTH-1) downto 0) := (others => '0');
        SEL  : in integer range 0 to (INPUT_DATAWIDTH-1) := 0;

        -- in/output data (register set)
        REGISTERSET : inout TArray((N_REGISTERS-1) downto 0)((OUTPUT_DATAWIDTH-1) downto 0) := (others => (others => '0')));
end DynamicRegisterSet;