我遇到了一个我无法解决的问题,所以我在寻求你的帮助 . 在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 回答
VHDL2008之前的解决方法:
了解为什么这不起作用
根据变量扩展信号在硬件中没有意义,根据您在某处定义的数字,您根本无法添加连线 .
所以解决它
你的变量将有一个定义的上限,类似于
如果在编译层次结构中将此常量定义得足够高,则可以使用它来定义矩阵信号的子类型:
现在您需要做的就是为函数接收t_definedmatrixsignal,并接收变量r_bus_usedwidth . 对功能代码进行微不足道的更改可为您提供所需的功能 . 实现期间的总线将始终使用c_bus_maxwidth std_logic_vectors .