2015-04-18 103 views
2

我想用std_logic_vector作为索引的数组,例如:VHDL如何使用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

合成器不执行VHDL标准(不像ModelSim这样的好模拟器)。根据VHDL标准,将8分配给“范围0至7”是不合法的。合成器可能会接受它(可能会分配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没什么区别。合成后会得到完全相同的硬件。 使用您的代码中最有意义的数据类型。

相关问题