如何在VHDL代码的测试台中声明数组数组?
我有一个数组定义为实体的输入。我使用一个包来定义数组的数组。在测试台中,我包含了该包并在体系结构中声明了组件,但出现了一个错误,即“entity average中不存在正式端口x。请将块平均的定义与其组件声明和实例进行比较,以检测不匹配。” 附上以下声明。请帮忙如何在VHDL代码的测试台中声明数组数组?,vhdl,Vhdl,我有一个数组定义为实体的输入。我使用一个包来定义数组的数组。在测试台中,我包含了该包并在体系结构中声明了组件,但出现了一个错误,即“entity average中不存在正式端口x。请将块平均的定义与其组件声明和实例进行比较,以检测不匹配。” 附上以下声明。请帮忙 -- the code library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; package vpkg is type m_array is
-- the code
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
package vpkg is
type m_array is array(1 downto 0, 1 downto 0) of std_logic_vector(7 downto 0);
end package;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use work.vpkg.all;
entity average is
Port (x : in m_array;
clk : in std_logic;
y : out std_logic_vector(7 downto 0)
);
end average;
architecture avg_arch of average is
signal sum : std_logic_vector(8 downto 0) := (others => '0');
begin
process(x):
for I in 0 to 1 loop
for J in 0 to 1 loop
sum <= sum + ('0' + x(I,J));
end loop;
end loop;
end process;
y <= std_logic_vector(to_signed(to_integer(signed(sum) / 4),8));
end avg_arch;
——代码
图书馆IEEE;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
包装vpkg为
类型m_数组是标准_逻辑_向量(7向下到0)的数组(1向下到0,1向下到0);
端包装;
图书馆IEEE;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
使用work.vpkg.all;
实体平均数为
端口(x:在m_阵列中;
clk:标准逻辑中;
y:输出标准逻辑向量(7到0)
);
最终平均数;
平均建筑面积为
信号和:标准逻辑向量(8到0):=(其他=>'0');
开始
过程(x):
对于0到1循环中的I
对于0到1循环中的J
和时钟,y=>y);
输入程序:进程
开始
等待100ns;
x(0,0)我不能复制这个。你使用的模拟器是什么?您可以编辑您的答案以包含该内容。我用的是Modelsim和GHDL。嘿,am9417,我用的是Vivado模拟器。提供一个,若并没有一个针对平均值的体系结构和一个针对tb_平均值的完整体系结构,你们的测试台就无法详细阐述。您的实体和组件声明相匹配。@TanviSingh,您需要在此处添加尽可能多的代码以再现错误,因为它缺少体系结构。尽管如此,我认为这不是你的代码,而是一些Vivado模拟器的问题…回到sum
--the test bench
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use work.vpkg.all;
entity tb_average is
-- Port ( );
end tb_average;
architecture tb_average_arch of tb_average is
component average
Port (x : in m_array;
clk : in std_logic;
y : out std_logic_vector(7 downto 0)
);
end component;
signal x : m_array;
signal clk : std_logic := '0';
signal y : std_logic_vector(7 downto 0);
begin
average_1 : average Port Map (x => x,clk => clk,y=>y);
input_proc : process
begin
wait for 100ns;
x(0,0) <= "00001001";
x(0,1) <= "00000110";
x(1,0) <= "00000011";
x(1,1) <= "00000001";
wait;
end process;
clk_proc : process
begin
wait for 100ns;
loop
clk <= '1';
wait for 10ns;
clk <= '0';
wait for 10ns;
end loop;
end process;
end tb_average_arch;