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.
我遇到了一个我无法解决的问题,所以我请求你的帮助。 在 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.