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