将维数组(2D)传递给函数 VHDL
pass a dimentional array(2D) to a function VHDL
我在我的 TOP 文件中声明了一个矩阵和一个信号,如下所示:
type scanImage is array (0 to 7,0 to 7) of std_logic_vector(2 downto 0);
signal image_matrix : scanImage;
现在,我想将上述信号发送到计算矩阵中非“000”单元格数量的函数。
我的包裹是这样的:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_arith.all;
use IEEE.NUMERIC_STD.ALL;
USE IEEE.NUMERIC_BIT.ALL;
PACKAGE my_pack IS
type double_array is array (0 to 7,0 to 7) of std_logic_vector(2 downto 0);
--------------------square calculation declaration--------------------------
function square_calculation(matrix : double_array) return integer;
---------------------------------------------------------------------
function square_calculation(matrix : double_array) return integer IS
variable tmp: integer range 0 to 64;
begin
tmp:=0;
for i in 0 to 7 loop
for j in 0 to 7 loop
if matrix(i,j)/="000" then
tmp:=tmp+1;
end if;
end loop;
end loop;
return tmp;
end function square_calculation;
END my_pack;
编译后我得到这个错误:
错误 (10476):vision_ctrl.vhd(112) 处的 VHDL 错误:标识符类型 "image_matrix" 不符合其作为 "double_array" 类型
的用法
谢谢你的帮助。
scanImage
和double_array
两个数组不是同一类型;恰好以同样的方式声明。
所以用 double_array
类型声明 image_matrix
,而不是创建一个新类型 scanImage
:
signal image_matrix : my_pack.double_array;
然后你可以使用 my_pack.square_calculation
和 image_matrix
参数。
我在我的 TOP 文件中声明了一个矩阵和一个信号,如下所示:
type scanImage is array (0 to 7,0 to 7) of std_logic_vector(2 downto 0);
signal image_matrix : scanImage;
现在,我想将上述信号发送到计算矩阵中非“000”单元格数量的函数。
我的包裹是这样的:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_arith.all;
use IEEE.NUMERIC_STD.ALL;
USE IEEE.NUMERIC_BIT.ALL;
PACKAGE my_pack IS
type double_array is array (0 to 7,0 to 7) of std_logic_vector(2 downto 0);
--------------------square calculation declaration--------------------------
function square_calculation(matrix : double_array) return integer;
---------------------------------------------------------------------
function square_calculation(matrix : double_array) return integer IS
variable tmp: integer range 0 to 64;
begin
tmp:=0;
for i in 0 to 7 loop
for j in 0 to 7 loop
if matrix(i,j)/="000" then
tmp:=tmp+1;
end if;
end loop;
end loop;
return tmp;
end function square_calculation;
END my_pack;
编译后我得到这个错误: 错误 (10476):vision_ctrl.vhd(112) 处的 VHDL 错误:标识符类型 "image_matrix" 不符合其作为 "double_array" 类型
的用法谢谢你的帮助。
scanImage
和double_array
两个数组不是同一类型;恰好以同样的方式声明。
所以用 double_array
类型声明 image_matrix
,而不是创建一个新类型 scanImage
:
signal image_matrix : my_pack.double_array;
然后你可以使用 my_pack.square_calculation
和 image_matrix
参数。