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。 谢谢
答案 0 :(得分:4)
在numeric_std
中,to_integer
功能仅定义为unsigned
和signed
类型。
无符号源自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;