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
函数只为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;
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
函数只为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;