2013-02-03 47 views
0

我在unsigned執行邏輯運算已經一個問題:無法對未簽名的VHDL執行邏輯運算?

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_arith.all;  
with sel select 
s_1<=a+b when "000", 
a+((not b)+1) when "001", 
s_2 when "010", 
s_3 when "011", 
s_4 when "100", 
(others=>'0') when others; 

這裏有一個錯誤:

No feasible entries for prefix operator "not"

s_1,a,b,s_2,s_3,s_4unsigned(31 downto 0)類型。

我發現轉換std_logic_vector爲無符號對std_logic_vector使邏輯運算,如果它不能在無符號做一個代碼,但這個代碼用numeric_std.all其使用時,我認爲它相沖突以std_logic_arith並取得簽名未知的數據類型。

現在我不知道如何執行無符號邏輯運算,我不知道如何將std_logic_vector轉換爲unsigned。有人能幫我嗎?

+1

請添加庫和使用條款的問題。如果兩個「不是」的定義是可見的,編譯器會將它們隱藏起來,而不是挑選(不可能)你不想要的。最好的選擇是ieee.std_logic_1164,ieee.numeric_std和別的! numeric_std肯定會定義一個「不」運算符。 –

回答

1

您正在使用非標準庫use ieee.std_logic_arith.all;,它顯然沒有實現「not」運算符。

use ieee.numeric_std.all;應該解決問題。

0

一個可怕的workround將xorb全部爲一的向量...