VHDL 如何使用 std_logic_vector 作为数组的索引

VHDL how to use a std_logic_vector as index for an array

我想使用 std_logic_vector 作为数组的索引,例如:

Data: in std_logic_vector(7 downto 0);
signal counter : std_logic_vector(3 downto 0);

output <= Data(counter);

由于VHDL语法检查告诉我应该使用整数作为索引,我想问一下是否可以使用std_logic_vector作为索引。

以防万一,如果我使用这样的计数器:

signal counter : integer range 0 to 7 := 7;

合成器将创建一个 8 位计数器(因为 7 是最大值)还是将创建一个 32 位计数器?我问这个问题是因为如果我指定一个值 8 来反击 vhdl 语法检查并没有告诉我这是一个错误。

要使用std_logic_vector,您必须转换它:

Data: in std_logic_vector(7 downto 0);
signal counter : std_logic_vector(3 downto 0);

output <= Data(to_integer(unsigned(counter)));

关于你的第二个问题,这将是一个 3 位计数器:

signal counter : integer range 0 to 7 := 7;

在物理上,整数和 std_logic_vector 没有区别。综合后会产生完全相同的硬件。 使用在您的代码中最有意义的数据类型。