3

我一直在尝试在单独的“mytypes.vhd”文件中声明我的类型,如下所示:

library ieee;
use ieee.std_logic_1164.all;

package mytypes is 
   type my_bus_array_type is array (0 to 3) of std_logic_vector(7 downto 0);
end package mytypes;

然后定义一个实体如下:

library ieee;
use ieee.std_logic_1164.all;

library work;
use work.mytypes.all; 

entity my_entity is
   port(
      bus_array : in my_bus_array_type;
      ...
   );
end my_entity;

好吧,这行不通。当我尝试使用 Altera Qsys 工具将组件添加到我的库时,我收到以下错误:

Error: Verilog HDL or VHDL XML Interface error at my_entity.vhd(41): port "bus_array" has an unsupported type File: /home/project/my_entity.vhd Line: 41

请注意,问题在于我试图在实体内部定义一个标准逻辑向量数组,即多维数组。如果我改为定义一个 std_logic 数组,则此代码可以正常工作。

4

5 回答 5

1

您提到您正在使用 Quartus,它可能对使用 std_logic_vectors 作为其他项目的基本类型很挑剔。

我使用子类型做我认为你在 Quartus 中追求的事情:

mytypes.vhd 文件:

library ieee;
use ieee.std_logic_1164.all;

package mytypes is 
  subtype BYTE_T            is std_logic_vector(7 downto 0);
  type    BYTE_A            is array (natural range <>) of BYTE_T;
  type    my_bus_array_type is array (0 to 3) of BYTE_T;
end package mytypes;

my_entity.vhd 文件:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

use work.mytypes.all

entity my_entity is
port ( 
  my_bus_array1 : in BYTE_A(0 to 3);
  my_bus_array2 : in my_bus_array_type;
  ...

是否要在实体(可能使用泛型)或包中定义数组范围取决于您。

于 2012-06-05T03:34:35.573 回答
0

您必须告诉编译器使用您在 mytypes 包中创建的类型:

use work.mytypes.all

entity my_entity is
port ( my_bus_array : in my_bus_array_type;
...
于 2012-06-04T11:19:37.983 回答
0

我不是 VHDL 专家,但我认为您必须像这样编写代码:

我编辑:试试这个:

    package mytypes is 
     type my_bus_array_type is array (0 to 3) of std_logic_vector(7 downto 0);  
end package mytypes;

    entity my_entity is
    port ( my_bus_array : in my_bus_array_type; 
    ...);
    end my_entity
于 2012-06-04T09:33:19.360 回答
0

我遇到过类似的问题,这与处理 VHDL 库有关。Qsys 中的所有 HDL 组件都将分配一个 VHDL 库,库名称设置为 Qsys 项目的名称。必须使用库显式访问包(work.在您的情况下),这可能会使事情变得混乱。话虽如此,通常在 Qsys 组件使用包对我来说效果很好(包括使用 访问它们work.)。

要查看 Quartus 如何分配和编译到库中,请查看 Quartus 中的“Design units”选项卡。它列出了库文件夹中的单元。但是,由于某种原因,我看到这里不会列出这些软件包。.qip可以查看 Qsys 项目的文件,您可以在其中准确了解 Quartus 如何将您的 HDL 文件分配到库中。

事实上,当您在 Quartus 项目中直接实例化您的代码而不是作为 Qsys 组件时,您的问题不会出现,库问题的提示就是对此的解释。

我只找到了关于 Qsys 库处理的两个参考: http ://www.alteraforum.com/forum/showthread.php?t=33605 http://www.alterawiki.com/wiki/New_Qsys_Issues(参见“不可避免的”部分设计单元冲突")

(附带说明,我经常std_logic_vector在 Qsys 组件中使用数组,但从未遇到过问题。)

于 2014-09-26T08:13:52.253 回答
0

您要真正定义的是作为端口的二维数组。不幸的是,QSYS 不支持二维数组。没有标准 Qsys 接口只支持一维端口阵列。因此,您必须在顶级实体中将阵列分开,将各个端口导出为导管,然后在更高级别将它们重新组装回阵列。这很不幸,但却是事实。

于 2017-01-27T18:30:12.490 回答