vhdl 中的 index(9) 和 index(9 downto 9) 有什么区别?

What is difference between index(9) and index(9 downto 9) in vhdl?

logic index : unsigned(9 downto 0) ;  
type fft_data  is array (3 downto 0) of unsigned(16 downto 0);  
signal tmp,signal fmax_data :fft_data;  
tmp = fmax_data(to_integer(index(9)));

以上部分代码编译错误如下; "subprogram call or operator argument type mismatch 87"

如果我进行以下修改,它就会起作用。

logic index : unsigned(9 downto 0) ;  
type fft_data  is array (3 downto 0) of unsigned(16 downto 0);  
signal tmp,signal fmax_data :fft_data;;  
tmp = fmax_data(to_integer(index(**9 downto 9**)));

谁能解释一下以上两种实现方式有什么区别? 我正在使用 vhdl-93 std 和 ncvhdl。 谢谢

numeric_std中,to_integer函数只为unsignedsigned类型定义。

无符号派生自 std_logic 作为 type UNSIGNED is array ( NATURAL range <> ) of STD_LOGIC;

当您使用 to_integer(index(9)) 时,您传递的是 index(9) 类型 std_logic

当您使用 to_integer(index(9 downto 9)) 时,您传递的是 index 范围 ,大小为 1,但是,它是 unsigned类型。

如果需要,您也可以创建自定义函数。将 std_logic 转换为 integer

function to_integer (ARG : std_logic)
  return integer is
begin
  if ARG = '1' OR ARG = 'H' then
    return 1;
  else
    return 0;
  end if;
end function to_integer;`

或环绕 to_integer

function to_integer (ARG : std_logic)
    return integer is
    variable t : unsigned(0 downto 0) := "0";
begin
    t(0) := ARG;
    return to_integer(t);
end function to_integer;