VHDL std_logic_vector 无范围

VHDL std_logic_vector without range

我遇到了一个我无法解决的问题,所以我请求你的帮助。 在 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 才有可能,但仍然……是否有任何可能的解决方案来解决这个问题?

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.