2016-11-09 9 views
1

VHDL로 8 비트 ALU를 설계하고 싶지만이 오류가 발생합니다. 입력 내용이 bit_vectors로 선언된다는 사실과 관련이 있다고 생각합니다. 그게 사실이야?ALU 설계 오류

** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(19): No feasible entries for infix operator "+". 
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(19): Type error resolving infix expression "+" as type std.STANDARD.BIT_VECTOR. 
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(21): No feasible entries for infix operator "-". 
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(21): Type error resolving infix expression "-" as type std.STANDARD.BIT_VECTOR. 
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(23): No feasible entries for infix operator "-". 
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(23): Type error resolving infix expression "-" as type std.STANDARD.BIT_VECTOR. 
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(25): No feasible entries for infix operator "+". 
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(25): Type error resolving infix expression "+" as type std.STANDARD.BIT_VECTOR. 
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(40): VHDL Compiler exiting 

이 내 모듈입니다 :

entity alu is 
port (bus_a : in bit_vector(7 downto 0); 
bus_b : in bit_vector(7 downto 0); 
state : in bit_vector (2 downto 0); 
out_c : out bit_vector(7 downto 0)); 
end alu; 


architecture behave of alu is 

begin 

process(bus_a, bus_b, state) 

begin 
case state is 
when "000" => 
out_c<= bus_a + bus_b; --addition 
when "001" => 
out_c<= bus_a - bus_b; --subtraction 
when "010" => 
out_c<= bus_a - 1; --sub 1 
when "011" => 
out_c<= bus_a + 1; --add 1 
when "100" => 
out_c<= bus_a and bus_b; --AND gate 
when "101" => 
out_c<= bus_a or bus_b; --OR gate 
when "110" => 
out_c<= not bus_a ; --NOT gate 
when "111" => 
out_c<= bus_a xor bus_b; --XOR gate 
when others => 
NULL; 
end case; 

end process; 

end architecture behave; 

당신이 어떤 아이디어가 왜 어쩌면 당신이 문제에 대한 어떤 다른 제안이 있습니까? 미리 감사드립니다!

답변

1

bit_vectorbit의 단지 모음입니다, 그러나 어떤 본질적인 가치없는, 그래서 당신은 어떻게 또한 (+)와 같은 산술 연산자를 사용하는 의미가 전에 값으로 bit_vector을 이해하는 VHDL에게 있습니다.

는 모습을 유형 당신은 bit_vector을 추가 할 때 양자 택일 서명 또는 부호없는 값으로 간주하도록 지정할 수있게된다 bit의 배열로 signedunsigned이있는 numeric_bit 패키지, 가져 가라.

그래서 도서관 이용 및 변환 서명되지 않은 추가 아래처럼 보일 수 있습니다 대신 std_logic_1164numeric_std 패키지를보고 고려할 수 있도록

library ieee; 
use ieee.numeric_bit.all; 
... 
out_c <= bit_vector(unsigned(bus_a) + unsigned(bus_b)); --addition 

그러나 일반적으로 std_logic_vector

는 대신 bit_vector 사용됩니다.