2012-04-18 3 views
2

컴파일되지 않습니다하지만 난 여기에 VHDL 기능은 내가 VHDL에서 함수를 정의하려고

Error: tst.vhd(4): near "subtype": syntax error

그것은 내가 VHDL 및 I에 처음으로 코딩하고있는 코드

subtype word10 is bit_vector(9 downto 0); 
subtype word8 is bit_vector(7 downto 0); 

function tst (input : in word10) return word10 is 
    variable tmp : word10; 
    -- code here 
    begin 

    return tmp; 
end tst; 

entity tester is 
end; 

architecture tst of tester is 
begin 
end; 

입니다 얻을 오류는 무엇인지 파악할 수 없습니다.

아이디어가 있으십니까?

답변

4

문제는 정의하려는 것 (하위 유형 및 함수)이 라이브러리 단위 (패키지 또는 엔티티) 또는 기타 다른 본문 내부에서 선언되어야 할 필요가 있다는 것입니다. 테스터 엔티티 선언을 이동하십시오 (예 : 라인 "엔티티 테스터는"후) : 당신이 당신의 서브 타입과 함수를 선언 정확히

entity tester is 
    subtype word10 is bit_vector(9 downto 0); 
    subtype word8 is bit_vector(7 downto 0); 

    function tst (input : in word10) return word10 is 
     variable tmp : word10; 
     -- code here 
     begin 

     return tmp; 
    end tst; 
end tester; 

당신이 볼 수 있도록 그들이 필요 범위에 따라 달라집니다. 전체 디자인에서 액세스 할 수 있어야 할 경우 일반적으로 함께 모아 패키지로 선언합니다.

1

문제는 당신이 드 정의와 begin 사이의 함수의 내부 SUBTYPE를 정의 할 필요가 있다는 것이다.

그러나 VHDL이 프로그래밍 언어와 다르지는 않지만 디자인 언어와 다르다는 사실을 알고 있는지 확신 할 수 없습니다. 코드를 합성하려면 함수를 합성 할 수 있는지 여부를주의해야합니다.

+0

만약 내가'subtype' 것을 우회하면. 'function tst (input : bit_vector (9 downto 0)) return bit_vector (7 downto 0) is'함수에 대해 비슷한 오류가 발생합니다. 당신이 그것이 작동하지 않을 수도 있다고 그래서 내가이 코드는 FPGA 용 쓰고 있어요? 나는 혼란 스럽다. 오류 : tst.vhd (4) : "function"근처 : 구문 오류 ' – kechapito

+0

VHDL의 함수처럼 모든 것을 피해야합니다. C와는 다르기 때문에 사용해야합니다. 포트 선언에 대해서는'entities '를 사용하고 동작 선언에 대해서는'architecture ' , 아무것도 더. 그리고 합성 될 수 없기 때문에 '기다림'과 같은 경고문을주의하십시오. 좋은 (최고의 IMO) 책 : Peter 's Ashenden의 VHDL에 대한 Designer 's Guide. –

+0

나는 vhdl에서 암호화 알고리즘을 구현할 것이고, 그렇지 않으면 코드가 꽤 복잡해질 것입니다. 구성 요소에 대해 읽었지 만 필자가 필요한 것은 아니라고 생각합니다. – kechapito

1

subtype들과 function의 보통 package들과 package body 초 이내에 선언 -있는 그대로 당신이 그 코드를 컴파일하려는 경우, 다음, 그래, 그것이 실패합니다.

시도는 (내 머리 위로를 입력, 그래서 구문 오타가있을 수 있지만, 그것은 당신에게 올바른 아이디어를 줄 것이다) :

package mypkg is 
    subtype word10 is bit_vector(9 downto 0); 
    subtype word8 is bit_vector(7 downto 0); 
    function tst (input : in word10) return word10; 
end package; 
package body mypkg 
    function tst (input : in word10) return word10 is 
     variable tmp : word10; 
    begin 
     -- code here 
     return tmp; 
    end tst; 
end package body; 

코드에 "실행"위해 (인 하드웨어를 묘사하려는 코드에 대한 약간의 잘못된 표현)에는 시뮬레이터 내에서 tst 함수를 호출하기 위해 entity이 "정교하게"작성되어야합니다. 엔티티는 블록 내에서 동작을 캡처하는 데 사용되는 프로세스와 함께 VHDL 빌딩 블록으로 훨씬 더 많이 사용됩니다. 기능 및 절차는 소프트웨어 세계 에서처럼 자주 사용되는 기능을 캡처하기 위해 엔티티 및 프로세스 내에서 종종 사용됩니다.