fpga - 在 VHDL 中定义和初始化矩阵的最佳方法

我正在尝试制作一个在 vhdl 中使用整数矩阵(二维数组)的程序,而我以前从未这样做过。

首先,是否可以在实体的信号定义中定义一个二维数组?我的意思是这样的;

entity Matrix is 
Port ( CLK : in STD_LOGIC;
       RESET : in STD_LOGIc;
       Output : out array (integer range <> , integer range <> ) of integer);
end Matrix;

还。实际初始化矩阵的最佳方法是什么?我想过做这样的事情;

type 2d_array is array(2 downto 0, 2 downto 0) of integer;

constant A2d : 2d_array :=((1,2,3),
                            (1,2,3),
                            (1,2,3));

不过,我不确定这是否正确。

最后但并非最不重要的一点是,如果我尝试将其中一个输出矩阵重塑为一维数组会发生什么?这会解决我的第一个问题,还是会创建一个新问题?

回答1

在 VHDL 中,所有类型都必须在使用前声明。因此,您不能简单地将对象声明为“数组”,因为您尚未声明类型。要在实体端口定义中使用类型,通常需要在包中声明类型,并将包包含在实体中。

package my_types_pkg is
  type my_array_t is array(integer range <>, integer range <>) of integer);
end package;

use work.my_types_pkg;

entity Matrix is 
Port ( CLK : in STD_LOGIC;
       RESET : in STD_LOGIc;
       output : out my_array_t -- note this is not yet constrained - the object mapped to this port will constrain the port
     );

初始化:您为二维数组做了正确的事情。

“重塑”:VHDL 是一种强类型语言。所以数组不一定是直接可转换的。二维整数数组与一维整数数组的类型不同,因此需要类型转换函数。

相似文章

vhdl - VHDL 中的截断时间

不明白为什么我在以下代码中收到“.011111111111”错误...我要做的就是将VHDL时间截断到最接近的1/100毫秒...libraryieee;useieee.std_logic_1164....

vhdl - VHDL - 与可变位数

我有一个w*y位宽度std_logic_vector名为matrix其中w和y是整数。我希望将y位宽度std_logic_vector称为output,它的位同时分配给matrix元素的w位的AND。...

随机推荐

最新文章