没有范围的VHDL std_logic_vector

时间:2018-04-07 10:06:17

标签: vhdl

我遇到了一个我无法解决的问题,所以我要求你的帮助。 在VHDL包中,我应该按照以下方式定义一个自定义类型的数组,以便将它用作函数中的参数:

type matrixsignal is array (integer range <>) of std_logic_vector;
function first_defined(matrix:matrixsignal; start_index,col_index:integer) return integer;

如您所见,std_logic_vector不应该有范围,因为它取决于主代码中存在的变量。 但是,当然,编译器拒绝这种结构......我读到它只能用VHDL2008,但仍然......是否有任何可能的解决方案来解决这个问题?

1 个答案:

答案 0 :(得分:1)

VHDL2008之前的解决方法:

了解为什么这不起作用

根据变量扩展信号在硬件中没有意义,根据您在某处定义的数字,您根本无法添加电线。

所以解决它

您的变量将具有已定义的上限,例如

constant c_bus_maxwidth : integer := 6;
variable r_bus_usedwidth : integer 0 to c_bus_maxwidth;

如果在编译层次结构中将此常量定义得足够高,则可以使用它来定义矩阵信号的子类型:

type t_matrixsignal is array(integer range<>) of std_logic_vector;
subtype t_definedmatrixsignal is t_matrixsignal(c_bus_maxwidth-1 downto 0);

现在您需要做的就是为您的函数接收t_definedmatrixsignal,并接收变量r_bus_usedwidth。对功能代码进行微不足道的更改可为您提供所需的功能。实现期间的总线将始终使用c_bus_maxwidth std_logic_vectors。