2014-09-21 3 views
0

두 숫자의 gcd를 찾기 위해 VHDL 코드를 작성했습니다. 그러나 그것은 나에게 다음과 같은 오류를주고 컴파일하는 동안VHDL 구문 오류가 발생하는 동안

근처 "동안": 구문 오류

코드는 내가 구문을 확인

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_unsigned.all; 
entity gcd is 
port(a,b:in integer; 
    c:out integer); 
end gcd; 

architecture gcd of gcd is 
    function calc_gcd(a,b:integer) return integer is 
    while a/=b loop 
     if a>b then 
      a:=a-b; 
     else 
      b:=a-b; 
     end if; 

    end loop; 

    return m; 
    end calc_gcd; 
begin 
process(a,b) 
begin 
gcd<=calc_gcd(a,b); 
end process; 
end gcd; 

입니다. 그것은 맞는 것 같습니다. 뭐가 문제 야?

PS : 나는 ModelSim을 학생 에디션

답변

1

당신은 당신의 함수에 대한 begin 문을 누락을 사용합니다.

몇 가지 다른 오류가 있습니다.

입력 인수 (ab)에 할당하려고합니다. 함수에 대한 인수는 스택에 복사됩니다. 프로 시저를 사용할 수는 있지만 로컬 변수가 실제로 필요한 것처럼 보입니다.

m에 대한 선언이 없습니다. 그것은 하나 (지역 변수)입니다.

+0

고마워요. 몇 가지 오류가 있었지만 디버깅되었습니다. 변수를 사용하는 것이 한 가지 더 중요합니다. – Ayush

+0

신호를 할당하려면 절차를 사용하여 '한 가지 더'를 이해할 수 없습니다. VHDL, 상수, 변수, 신호 및 파일에는 네 가지 객체 클래스가 있습니다. 그들 중 누구라도 인수가 될 수 있습니다. 함수는 반환 값을 가지며 표현식입니다. 프로시 듀어에는 순차 명령문과 동시 명령문의 두 가지 유형이 있습니다. 첫 번째 프로 시저에서만 중첩 된 프로 시저에 대한 신호를 지정해야한다는 요구 사항이 있습니다. 어떤 종류의 참조 텍스트가 필요할 수 있습니다. – user1155120

관련 문제