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