2016-08-21 60 views
0

vhdl中有+運算符用於加法運算,那麼爲什麼我們需要添加ieee.std_logic_unsigned,並且在這個庫中有+的函數,那麼爲什麼如果我們已經在vhdl中有+運算符定義了這個函數呢?+運算符和+函數有什麼區別是vhdl?

+0

數組類型默認不提供預定義的數學運算。它們可以在IEEE庫的特定軟件包中找到。參見IEEE Std 1076-2008 16.8標準合成包,特別是16.8.5使用位和標準邏輯值進行算術運算的軟件包。在-2008修訂版中,這些軟件包是標準的一部分。 – user1155120

回答

1

與所有的VHDL操作符一樣,+操作符也具有功能符號。 a+b"+"(a,b)完全一樣。這樣做的好處在於,您可以重載VHDL運算符以對默認未定義的類型進行操作。只需定義一個"+"函數,其中包含您自己的類型my_type和voilà的兩個參數。您現在可以使用a+b,其中ab的類型爲my_type

+運算符在std_ulogic_vectorstd_logic_vector類型上沒有被默認定義。這是事實。你可以不同意這個,但它是VHDL標準。所以,如果你想用這些類型來使用它,你需要以這種或那種方式來定義它。

ieee.std_logic_unsigned包會重載它們上的算術運算符。它是不是的一個標準包並且有什麼都沒有在標準的ieee庫中做。做不是使用它。使用標準ieee.numeric_std,而是聲明類型unsignedsigned,並重載算術運算符。

請注意,正如user1155120所述,VHDL 2008引入了幾個新的綜合軟件包。其中之一是ieee.numeric_std_unsigned,它確實會將類型爲std_ulogic_vector的算術運算符重載爲無符號自然整數。

+0

IEEE Std 1076-2008 16.8.5使用位和標準邏輯值進行算術運算的程序包,16.8.5.1第5段(部分):「...類似地,NUMERIC_STD_UNSIGNED程序包提供的操作與NUMERIC_STD程序包提供的程序相同UNSIGNED操作數,但對STD_ULOGIC_VECTOR操作數進行操作,解釋爲表示無符號二進制整數。「將操作數和結果時間轉換爲無符號數。在-2008'子類型STD_LOGIC_VECTOR是(已解決)STD_ULOGIC_VECTOR;' – user1155120

+0

謝謝!,很好的回答! –

+0

你能告訴我,當我們在20n之後寫一個<= b和c時,所以這個[20n之後]只會影響模擬或實際的數字模型以位文件的形式加載會受到影響嗎? –

相關問題