首页 文章

没有范围的VHDL std_logic_vector

提问于
浏览
0

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

  • 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 .

相关问题