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

时间:2015-04-18 13:53:31

标签: vector vhdl fpga

我想使用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语法检查并不告诉我这是一个错误。

1 个答案:

答案 0 :(得分:5)

要使用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没有区别。合成后,它将产生完全相同的硬件。 使用代码中最有意义的数据类型。