我想使用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语法检查并不告诉我这是一个错误。
答案 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没有区别。合成后,它将产生完全相同的硬件。 使用代码中最有意义的数据类型。