안녕하세요..
문의주신 내용을 잘 보았습니다.
MAX + plus II 등의 예전 Compiler의 경우 제시한 예제의 구문이 성립되었습니다.
하지만, 컴파일러의 버전이 올라가 이 구문은 더이상 성립되지 않습니다.
연산자와 결과가 같은 비트수를 가져야 합니다.
그렇기 때문에 TMP <= A + B; 에서 왼쪽 TMP와 오른쪽 A + B의 항목을 모두 3비트로 바꾸어주어야 합니다.
아래와 같이 사용하시면 됩니다.
TMP <= ('0' & A) + ('0' & B);
&기호는 비트를 묶는 연산자입니다.
그럼, 즐거운 하루 보내세요.
>
예제 소스 EX_2_1_V.VHD를 컴파일시 "TMP<=A+B"가 에러가 납니다.
포트의 크기가 a,b와 tmp가 다른데 컴파일이 되나요??
예제의 에러입니까? 아니면 다른 방법이 있는겁니까? 답변부탁드립니다.^^;
///////////////////////////////////////////////////////////////////////////
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY EX_2_1_V IS
PORT(
A : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
C : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END EX_2_1_V;
ARCHITECTURE HB OF EX_2_1_V IS
SIGNAL TMP : STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
TMP <= A + B;
C(1) <= TMP(2);
C(0) <= A(0) AND B(0);
S <= TMP(1 DOWNTO 0);
END HB; |