VHDL 2008 > 实体中的通用包:期望 BASICID 或 EXTENDEDID 时出错

VHDL 2008 > generic package in an entity: error expecting BASICID or EXTENDEDID

尝试使用正式通用包 (ieee.fixed_generic_pkg) 声明实体时:

library ieee;
context ieee.ieee_std_context;

entity myent is
  generic ( package myfpkg is new ieee.fixed_generic_pkg generic map (<>) );
end entity;

我收到以下错误:

Syntax error at or near "package", expecting BASICID or EXTENDEDID

我也试过:

library ieee;
context ieee.ieee_std_context;
use ieee.fixed_generic_pkg;

entity myent is
  generic ( package myfpkg is new ieee.fixed_generic_pkg generic map (<>) );       
end entity;

那也不行。

但是,如果我声明包的任何虚拟实例,它可以正常工作:

library ieee;
context ieee.ieee_std_context;
package fpkg is new ieee.fixed_generic_pkg;

--

library ieee;
context ieee.ieee_std_context;

entity myent is
  generic ( package myfpkg is new ieee.fixed_generic_pkg generic map (<>) );       
end entity;

使用正式通用包声明实体而不必事先实例化相同类型的包的正确方法是什么?

编辑

我使用的工具是HDL Designer 2015.1b。我认为支持通用包。实际上,以下示例不会引发任何错误:

library slfnlib;
use slfnlib.gen_consts;
use slfnlib.gen_wb_ctypes;

package gen_ctypes is
  generic ( package cs is new slfnlib.gen_consts generic map (<>) );  

  package wb is new slfnlib.gen_wb_ctypes generic map (
    g_mo => cs.g_mo,
    g_bas => cs.g_bas );

end package;

EDIT2

在处理几个通用包(声明、实例化、使用...)时,我意识到完整的项目已正确编译。当只分析其中的一部分时,我也多次遇到同样的错误。

然后,我得出结论,我无法使用 DesignChecker 单独分析任何通用 package/entity。但是,有一个简单的解决方法,就是像在任何实际设计中一样使用这些组件。无论如何都应该这样做,以便模拟和综合设计。关键信息是不要理会工具提供的内容,直到代码主体作为实际设计真正有意义。

您的代码看起来与 LRM ("Generic map aspects") 第 6.5.7.2 节中的示例具有相似的结构,除了您的顶层是一个实体,而在他们的示例中它是一个包。

你的原始代码在我试过的两个工具上编译得很好,所以在我看来你使用的任何工具都有问题。我建议您与工具供应商联系。