2013-02-03 2 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_4

유형 unsigned(31 downto 0)의 모든입니다.

나는 그것이 부호에서 수행 할 수없는 경우 std_logic_vector에 논리 연산을 가능하게하는 부호로 std_logic_vector를 변환하는 코드를 발견하지만,이 코드를 사용할 때이 std_logic_arith와 충돌을 생각 numeric_std.all를 사용하여 서명되지 않은 미지의 데이터 유형을 하였다 .

이제 부호없는 논리 연산을 수행하는 방법을 모르며 std_logic_vectorunsigned으로 변환하는 방법을 모르겠습니다. 누군가 나를 도울 수 있습니까?

+1

이 질문에 대한 라이브러리를 사용 절을 추가하십시오 ... 모든 사람의 벡터 xorb하는 것입니다. "not"의 두 가지 정의가 보이는 경우 컴파일러는 의도하지 않은 것을 선택하지 않고 두 가지 정의를 모두 숨 깁니다. 가장 좋은 선택은 ieee.std_logic_1164, 즉 ieee.numeric_std이며 그 외에는 아무 것도 없습니다! numeric_std는 확실히 "not"연산자를 정의합니다. –

답변

1

"not"연산자를 구현하지 않은 비표준 라이브러리 use ieee.std_logic_arith.all;을 사용하고 있습니다.

use ieee.numeric_std.all; 대신 그 문제를 해결해야합니다.

0

끔찍한 workround는