gpt4 book ai didi

VHDL-测试台-泛型

转载 作者:行者123 更新时间:2023-12-02 00:38:25 26 4
gpt4 key购买 nike

我一直致力于制作一个可以在多个实例中使用的解码器,只需更改输入/输出向量大小的通用值即可。解码器将根据输入的整数转换“sll”单个位、多个位置。解码器本身工作正常。当我制作测试台并编译时,问题就出现了。结果是:

Error (10482): VHDL error at DECODER.vhd(41): object "n" is used but not declared

我在下面添加了模型和测试台:

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,我以为我在组件声明中声明了 n。我应该在哪里申报?第二个问题是我如何声明多个泛型,即1 通用的delay_length1 通用 n我尝试在模型实体中放入 2 个通用语句,但编译器认为这样做不正确。

一如既往,非常感谢您的帮助。d

最佳答案

您的组件声明声明有一个名为 decoder 的组件,该组件(以及该组件的其他属性)有一个名为 n 的泛型,具有默认值2。在分析文件时,您尚未提及要分配给 n 的实际值。

我的方法是在声明组件之前定义一个常量:

constant DECODER_WIDTH : integer := 2;

然后您可以使用它来声明您的信号:

SIGNAL a : std_logic_vector (DECODER_WIDTH-1 downto 0);

当您实例化 decoder 时,您还将 n 泛型绑定(bind)到此常量:

G1  :   DECODER
GENERIC MAP (n => DECODER_WIDTH)
PORT MAP (a,x);

如果您确实需要让配置更改 n 的值,则必须在包内声明 DECODER_WIDTH 常量,然后该文件将 >use,在 TN2 实体声明之前和配置语句之前。如果您不需要配置来改变解码器大小,那么您可以从配置语句中省略通用映射

关于VHDL-测试台-泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34814600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com