2016-03-25 102 views
2

是否有人可以解釋我的區別:VHDL範圍分配

grant_o(1 downto 1) <= grant_s(1); 

grant_o(1) <= grant_s(1); 

第一個通過合成工具不走。

+1

在第一個信號賦值語句中,目標是切片名稱(一維數組),右手錶達式是一個索引名稱,表示命名對象的一個​​元素。目標數組的類型是指定對象的類型。右手錶達式的類型是指定對象的元素的類型。表達式的類型和目標的類型不一樣。 – user1155120

+1

儘管在這種情況下問題是顯而易見的,但最好通過「不通過」來報告您的意思......比如實際的錯誤信息,以及它是否在模擬中首先工作。當你模擬這個問題應該被捕獲... –

+0

謝謝你們!它清楚你的建議。 –

回答

3

語法mySignal(index)訪問數組的單個元素。所以表達式的值是元素類型。

語法mySignal(index1 downto index2)訪問數組中的一系列元素。所以表達式的值是相同的數組類型,但是具有改變的範圍約束。

如果您使用grant_o(1 downto 1) <= grant_s(1 downto 1);,則您的第一個示例可以正常工作。

或者

grant_o(1 downto 1) <= (others => grant_s(1));

兩種變體創建在右側的陣列,因此它可以被分配到左側。你的例子使用了一個長度範圍。

+0

我會寫一些像「表達式類型」而不是「返回類型」。 –

+0

@MartinZabel固定 – Paebbels

+0

非常感謝。清除:) –