2015-04-18 149 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沒什麼區別。合成後會得到完全相同的硬件。 使用您的代碼中最有意義的數據類型。