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

时间:2017-07-03 07:38:36

标签: vhdl hdl vlsi

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)));

以上部分代码给出了以下编译错误; “子程序调用或运算符参数类型不匹配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。 谢谢

1 个答案:

答案 0 :(得分:4)

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;