2013-03-23 42 views
1

我有一個類型不匹配錯誤,但所有值的類型相同std_logic。 下面是代碼Vhdl類型不匹配錯誤

NX,NY - 泛型

IPX - 的輸入端口矢量

tempx,tempz - 信號

ipx : in std_logic_vector(Nx-1 downto 0);
.......
signal tempx : std_logic_vector(Ny-1 downto 0) := ipx(Nx-1 downto Nx-Ny); (Signal initialisation)
signal tempz : std_logic_vector(Ny-1 downto 0);
............
tempx <= (Ny-1 downto 1 => tempz(Ny-2 downto 0), 0 => ipx(a-1));

錯誤:錯誤(10381):VHDL類型不匹配ArrayDivider.vhd錯誤(53):索引名稱返回值的類型與「std_ulogic」不匹配,目標表達式的類型 (tempx的最後一個代碼行上的錯誤)

但是ipx和tempz都是std_logic向量,所以這裏的類型不匹配? 請給我一些解決方案

我已經在使用連接操作符&也試過,但它給了我與頂級層次結構和「無法解決tempx [0]乘常數司機的另一個錯誤!!!! !

回答

3

錯誤消息告訴你到底是什麼問題:

error : Error (10381): VHDL Type Mismatch error at ArrayDivider.vhd(53): indexed name returns a value whose type does not match "std_ulogic", the type of the target expression

事實上,tempz(Ny-2 downto 0)不是std_ulogic而是一個載體。

問題是命名關聯不能識別向量的切片,而是識別單個元素;您不能用它將一個矢量的一個切片分配給另一個矢量的切片。

相反,使用連接運算符&

tempx <= tempz(Ny-2 downto 0) & ipx(a-1); 

您的文章意味着級聯產生其他錯誤;隨時添加這些問題。

編輯:

>Error (10028): Can't resolve multiple constant drivers for net 
>"tempx[0]" at ArrayDivider.vhd(44) (on the line of initialing >tempx) 

這再次告訴你什麼是錯的。這個錯誤幾乎肯定存在於這兩個版本的設計中,但原來的錯誤只是隱藏了它。找到tempx(0)的兩個驅動程序並排除哪個是錯誤的。你還沒有發佈足夠的代碼來清楚發生了什麼,所以這取決於你。如果您使用Modelsim,「drivers」命令將識別信號上的所有驅動程序。

如果您需要初始化tempx輸入信號,再後來與另一個信號驅動它,你必須在兩個信號之間進行選擇 - 例如:

tempx <= ipx(Nx-1 downto Nx-Ny) when <some condition> 
     else tempz(Ny-2 downto 0) & ipx(a-1); 

最有可能的,修復這個錯誤也將消除「層次結構」錯誤;這基本上是「以前出錯了,所以編譯不能完成」。

+0

謝謝你的支持和你的興趣來解決我的錯誤... :) 我試圖拼接也......... 但是,這給了我2個錯誤.......... 。 >錯誤(10028):無法解析淨> 「tempx [0]」 在ArrayDivider.vhd(44)(上草簽的線> tempx) >錯誤多個恆定的驅動:無法闡述頂級用戶層次結構 – 2013-03-24 12:08:37

1

這是一個頁面,很好地解釋了命名關聯與位置關聯的概念。請注意,該示例顯示了使用兩種使用bit_vector類型的關聯方法。

http://www.ics.uci.edu/~jmoorkan/vhdlref/aggregat.html

正如您已經注意到,VHDL返回,當你執行一個名爲上STD_LOGIC矢量關聯bit_vector。如果嘗試將結果分配給std_logic_vector,這會導致類型不匹配。

一種選擇是使用TO_BITVECTOR和TO_STDLOGICVECTOR在bit_vector和std_logic_vector之間進行轉換。這些在ieee.std_logic_1164庫定義,語法如下描述下:

http://www.seas.upenn.edu/~ese171/vhdl/PackageSTD_1164.html

這樣做感覺就像通過不必要的箍跳,但它應該工作。祝你好運!