2013-09-24 80 views
0

是否可以在作業的左側指定一個位範圍?VHDL分配片沒有實現?

例如。 R(15 downto 8) <= R(15 downto 8) -D;

以上給我的編譯器錯誤:Error 722: Assignment to a signal slice is not implemented.我試過谷歌搜索錯誤無濟於事。

但是這個工程:

R <= R(15 downto 8) - D;

+0

也許你會願意告訴我們哪個(誰的)分析儀告訴你這個?切片名稱在VHDL中作爲信號賦值語句的目標是合法的。格式看起來像PICA VHDL工具,其中722代表行號。 – user1155120

+0

因疏忽我的環境細節而抱歉。在Windows 7上使用DesignWorks Professional 5. 722是錯誤代碼。行號分別表示。 – cbrad

回答

0

答案涉及到我的環境,特別是專業設計工作室5,在Windows 7

不能值分配到信號變量位向量的一個切片。 例如。

signal R: std_logic_vector(15 downto 0); 
R(15 downto 0) <= X"0000"; -- will not compile 

可以值分配到一個普通可變位向量的一個切片。 例如。

variable D: std_logic_vector(15 downto 0); 
D(15 downto 0) := X"0000"; -- will compile 

每種情況都試圖將16位分配給16位變量。

+1

如果第二個編譯,而第一個不編譯,我強烈要求你得到一個更好的綜合工具。第一個應該編譯,第二個應該只在使用'D(15 downto 0):= X「00」;'時編譯。 – zennehoy

+0

也許第一個不會編譯,因爲您將一個8位向量X「00」分配給一個16位信號。嘗試: R(15 downto 0)<= X「0000」;這應該絕對編譯。 zennehoy是正確的,當分配變量使用:=賦值而不是<=。 – Russell

+0

@Russell:你是對的矢量大小。這在我的上面的答案中是不正確的,在我的代碼中是正確的。現在編輯。 – cbrad

1

分配到片是允許的。你使用什麼工具? D的大小是多少?注意結果大小。

R(15 downto 0) <= R(15 downto 8) - D ; 

如果這樣分配的工作,那麼你還需要切片d:如果d的尺寸大於R,則結果大小D.

的大小

在下面的分配會發生什麼情況相匹配:

R(15 downto 8) <= R(15 downto 8) - D(7 downto 0); 

如果這沒有得到它,剩下的代碼是什麼樣的?

+0

我正在使用DesignWorks Professional 5.它不是尺寸問題。我應該提到這個任務是在一個信號變量上,而不是一個普通的變量,這顯然是非法的。 – cbrad