2014-04-23 22 views
2

在VHDL中,假設我已經無符號向量定義如下:VHDL無符號向量VS整數比較

signal s_col_rd_check : unsigned(7 downto 0); 

現在,我是否使用下面的庫,

use ieee.std_logic_arith.all; 
use ieee.std_logic_unsigned.all; 

或下列

use ieee.numeric_std.all; 

我可以使用我的無符號向量和整數值之間的比較,如下所示?

some_assignment <= '1' when (s_col_rd_check < 190) else '0'; 

其中190只是一個整數。 無論我使用哪一個庫,上面的比較都是一樣的嗎?

謝謝, --Rudy

回答

6

ieee.std_logic_arithieee.std_logic_unsigned是專有的Synopsys公司產品的定義爲IEEE VHDL標準的一部分。所以誤導這些軟件包使用庫名稱,因爲它們是作爲IEEE標準的一部分定義的而不是

快速Google search for "std_logic_arith.vhd"產生了至少三種不同版本的軟件包,因此您的問題的答案可能取決於您正在使用的專有軟件包的版本......這是一個強烈的跡象,使用這些專有軟件包是如果您希望在不同的工具中設計出明確和完全相同的行爲,那麼這種方法不是正確的。

所以可靠的方法是隻使用ieee.numeric_std,這是IEEE VHDL標準的一部分,因此具有明確的行爲。

並與use ieee.numeric_std.all;,你可以做的比較:因爲ieee.numeric_std

some_assignment <= '1' when (s_col_rd_check < 190) else '0'; 

定義功能:

function "<" (L: UNSIGNED; R: NATURAL) return BOOLEAN; 
+0

非常感謝。我明白了,我同意你的100%。但問題是我堅持使用「std_logic_unsigned」,那是因爲我正在使用與其他人一起開發的舊設計。而且,我不能將它更改爲「numeric_std」,這就是爲什麼我想知道使用該函數將與「numeric_std」類似。 – Rudy01

+0

由於'ieee.std_logic_arith'不是標準化的,因此我無法回答您設計中使用的特定軟件包'std_logic_arith'。但是,我看到一個例子,其中'std_logic_arith'和'numeric_std'爲比較中的所有參數值提供了完全相同的結果,因此對於我使用的'std_logic_arith'版本,比較是等效的。請注意,在比較'unsigned