程序的VHDL传递范围

程序的VHDL传递范围,vhdl,Vhdl,我正在编写自己的包来处理由于VHDL-2008不可用而产生的类似于通用矩阵的对象(目前我只关心编译和模拟)。 我的目标是从矩阵M_中得到矩阵M_,以便: M_out(i downto 0, j downto 0) <= M_in(k+i downto k, l+j downto l); M_out(i下降到0,j下降到0)无约束索引范围自然范围不是类信号、变量、常量或文件的VHDL对象。因此,它不能被传递到子程序中。我不会将切片操作作为过程来实现,因为它是一种类似函数的行为 本发明提供了

我正在编写自己的包来处理由于VHDL-2008不可用而产生的类似于通用矩阵的对象(目前我只关心编译和模拟)。 我的目标是从矩阵M_中得到矩阵M_,以便:

M_out(i downto 0, j downto 0) <= M_in(k+i downto k, l+j downto l);

M_out(i下降到0,j下降到0)无约束索引范围
自然范围
不是类信号、变量、常量或文件的VHDL对象。因此,它不能被传递到子程序中。我不会将切片操作作为过程来实现,因为它是一种类似函数的行为

本发明提供了一种用于处理矩阵及其切片的实现。中提供了实现

在该文件中也可以找到更专门的函数来分割或。它还提供分配矩阵部分的过程

该软件包用于模拟和合成

不幸的是,切片多维数组将不会成为此过程的一部分。我会确保再次讨论VHDL-202x


VHDL-2017允许将范围传递到子程序中。语言的变化增加了这种能力。

看到我所在大学服务器上的编译器不支持VHDL-2008,我想我不会很快获得新功能,但很高兴知道这一点。然后传递整数。
type matrix is array(natural range <>, natural range <>) of std_logic;
...
procedure slice_matrix(signal m_out: out matrix;
                       constant rows: natural range<>;
                       constant cols: natural range<>;
                       signal m_in: in matrix);
** Error: custom_types.vhd(9): near "<>": syntax error
** Error: custom_types.vhd(9): near "<>": syntax error
function slm_slice(slm : T_SLM; RowIndex : natural; ColIndex : natural; Height : natural; Width : natural) return T_SLM is
  variable Result       : T_SLM(Height - 1 downto 0, Width - 1 downto 0)        := (others => (others => '0'));
begin
  for i in 0 to Height - 1 loop
    for j in 0 to Width - 1 loop
      Result(i, j)      := slm(RowIndex + i, ColIndex + j);
    end loop;
  end loop;
  return Result;
end function;