我一直在努力制作一个解码器,只需更改输入/输出向量的通用值即可在多个实例中使用。该解码器将根据输入的整数转换,将单个位移动若干位置。解码器本身运行良好。问题出现在我编写测试台并编译时。结果如下所示:
编译器告诉我我没有声明n,但我认为我在组件声明中声明了。我应该在哪里声明它? 第二个问题是如何声明多个泛型,例如 1个泛型用于delay_length 1个泛型用于n 我试过在模型实体中放置2个泛型语句,但编译器认为那不是正确的做法。
感谢您的帮助。 D
以下是我的模型和测试台。错误(10482):VHDL 错误于 DECODER.vhd(41):对象“n”已被使用但未声明
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
ENTITY DECODER IS
--GENERIC (delay : delay_length := 0 ns);
GENERIC (n : POSITIVE := 2);
PORT (a : IN std_logic_vector(n-1 DOWNTO 0);
x : OUT std_logic_vector(2**n-1 DOWNTO 0));
END ENTITY DECODER;
ARCHITECTURE dflow OF DECODER IS
CONSTANT x_out : BIT_VECTOR (2**n-1 DOWNTO 0) :=
( 0 => '1', OTHERS => '0');
BEGIN
x <= to_stdlogicvector(x_out sll to_integer(unsigned(a)));
END ARCHITECTURE dflow;
--test bench----------------------------------------
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
ENTITY TN2 IS
END ENTITY TN2;
ARCHITECTURE IO_TN2 OF TN2 IS
COMPONENT DECODER IS
--GENERIC (delay : delay_length := 0 ns);
GENERIC (n : POSITIVE := 2);
PORT (a : IN std_logic_vector(n-1 DOWNTO 0);
x : OUT std_logic_vector(2**n-1 DOWNTO 0));
END COMPONENT DECODER;
SIGNAL a : std_logic_vector (n-1 DOWNTO 0); --<-- USED BUT NOT DECLARED
SIGNAL x : std_logic_vector (2**n-1 DOWNTO 0);
BEGIN
G1 : DECODER
GENERIC MAP (n => 2)
PORT MAP (a,x);
a <= "00", "01" AFTER 1 NS, "10" AFTER 2 NS, "11" AFTER 3 NS,
"00" AFTER 4 NS, "0Z" AFTER 5 NS;
END ARCHITECTURE IO_TN2;
CONFIGURATION CFG_DECODER OF TN2 IS
FOR IO_TN2
FOR G1 : DECODER
USE ENTITY work.DECODER(dflow)
GENERIC MAP (n => 2)
PORT MAP (a,x);
END FOR;
END FOR;
END CONFIGURATION CFG_DECODER;
编译器告诉我我没有声明n,但我认为我在组件声明中声明了。我应该在哪里声明它? 第二个问题是如何声明多个泛型,例如 1个泛型用于delay_length 1个泛型用于n 我试过在模型实体中放置2个泛型语句,但编译器认为那不是正确的做法。
感谢您的帮助。 D