2016-09-21 2 views
1

VHDL의 모든 버전에서, 어쩌면 2008 년에 유형을 선언하기 전에 사용할 수 있습니까?VHDL (2008)로 선언하기 전에 유형을 사용하십시오.

예. 나는 기업의 건축이 배열 선언이 : 동일한 아키텍처 섹션에서 여전히

type my_array is array (integer range <>) of my_type; 

그리고, 그러나 나중에 파일에 나는이 있습니다

type my_type is record 
    my_field: signed(31 downto 0); 
end record; 

지금이에서 다음과 같은 오류를 제공을 Vivado :

[신디 8-1031] my_type 선언되지

물론 해결책은 배열 선언 위에 레코드 선언을 옮기는 것입니다. 그러나 이것은 매우 복잡하고 지저분 해져 유형의 수가 증가합니다 (기본적으로 유형을 종속성을 고려하여 토폴로지별로 정렬해야하기 때문에).

저는 모든 주요 프로그래밍 언어에서 지원되므로 어쩌면 VHDL로 존재할 수도 있습니다. 나는 또한 이것에 대해 VHDL 2008에 추가되었지만 VHDL 2008에 대한 나의 빠른 테스트에 대한 어떠한 자원도 찾을 수 없다는 것을 모호하게 읽었습니다.

형식이 동일한 아키텍처, 같은 파일이지만 아래 몇 줄에 여전히 선언되어 있으므로 VHDL 형식을 선언하기 전에 사용할 수 있습니까?

+1

VHDL-2008의 일반 유형이 도움이 될 수 있습니다. –

+0

흠. 제네릭은 복잡한 종속성 관계를 단순화하는 데 도움이 될 수 있지만 일반적으로 문제가 쉽게 발생하지는 않습니다 (이제는 제네릭을 별도로 연결하는 것에주의해야하므로 코드를 읽거나 반복하기가 더 어려워 질 수 있습니다). – Piedone

답변

2

VHDL의 모든 버전에서 어쩌면 2008 년에 선언되기 전에 유형을 사용할 수 있습니까?

번호

IEEE 표준 1,076에서 2,008 사이 6. 선언

6.1 일반

언어는 선언에 의해 명시 적 또는 암시 적으로 선언 된 이름 엔티티의 여러 종류를 정의합니다. 각 엔티티의 이름은 식별자 또는 연산자 심볼 또는 문자 리터럴 중 하나로 선언에 의해 정의됩니다.
...
각 선언 형식에 대해 언어 규칙은 선언 범위 (12.2 참조)라는 특정 텍스트 영역을 정의합니다. ... 선언

12.2 범위

아키텍처 체 제외한 선언의 범위, 직전에 폐쇄 선언적 영역의 마지막으로 선언의 시작으로부터 연장; 아키텍처 본문의 범위는 아키텍처 본문의 처음부터 끝까지 확장됩니다. 두 경우 모두 선언 범위의이 부분을 즉치 범위이라고합니다.

12.3 가시성

선언은 해당 범위의 특정 부분에서만 볼 수 있습니다. 이 부분은 PSL 검증 단위, 패키지 선언 또는 보호 형 선언 이외의 설계 단위의 선언을 제외하고는 선언의 끝에서 시작한다.이 경우, 다음의 식별자 뒤에 예약어가 발생한 직후에 시작된다. 디자인 단위, 패키지 선언 또는 보호 된 형식 선언 이 규칙은 명시 적 및 암시 적 선언에 모두 적용됩니다.

유형이 선언되기 전에 참조를 중단하는 것은 가시성 규칙입니다.

또한 VHDL은 인터페이스 유형 선언 (일반 유형) 이외의 유형에 대한 순방향 선언을 지원하지 않지만 예를 들어 my_array과 같이 하위 유형에 대해 지원합니다.

브라이언 유용성이 유형의 작업에 합성 공급 업체의 지원 부족뿐만 아니라 한계 제한을 나타냅니다 일반적인 유형의 피터 Ashenden의 책 VHDL 2008 그냥 새로운 재료에 요약 (6.5.3 인터페이스 유형 선언을 참조)

1.1 일반 유형

VHDL-2008 형식 일반적인 유형과 그들이 사용할 수있는 방법을 포함하는 규칙의 수를 정의합니다. 정식 제네릭 형식 이름은 파일 형식이나 보호 된 형식을 제외한 모든 제한된 형식을 나타낼 수 있습니다. 실체는 오직 그러한 모든 유형에 사용 가능한 연산이 적용 가능하다고 가정 할 수있다. 새로운 것을 사용하여 할당; 유형 자격 및 유형 변환; 평등 및 불평등 운영. 형식 제네릭 형식은 파일 요소 또는 특성의 형식으로 사용할 수 없습니다. 또한 실제 유형이 액세스 유형이 아니며 액세스 유형의 하위 요소를 포함하지 않는 경우 명시 적으로 선언 된 상수 또는 신호 (포트 포함)의 유형으로 만 사용할 수 있습니다. 신호의 경우 실제 유형의 사전 정의 된 항등 연산자가 드라이버 업데이트 및 이벤트 감지에 사용됩니다. 액세스 유형에 대한 불완전한 유형 선언이 참조 될 수있는 특별한 경우, 같은 연결리스트에 대한 유형, 수 있도록하기 위해,이 있음을

+0

슬픈 일이지만 불편한 진실을 가지고 살아야합니다. 우연히 액세스 유형과 같은 간접적 인 임시 해결책을 알고 있습니까? – Piedone

2

참고 : 그러나

type value_cell; -- Incomplete declaration 

type value_ptr is access value_cell; -- value_cell only for access type 

type value_cell is record -- Full declaration 
    value  : bit_vector(0 to 3); 
    next_cell : value_ptr; 
end record value_cell; 

을,이 사용하지 않는 선언되기 전의 유형이며 액세스 유형은 합성 할 수 없지만 테스트 벤치 코드에 유용한 기술입니다.

+0

이것은 내 사건을 해결할 수있는 것과 정확히 같습니다. 하지만 여러분이 말한 것처럼 이것은 합성이 가능하지 않습니다. 이것은 불행한 일입니다 ... 불행히도이 합성 가능 코드에 이것을 필요로합니다. – Piedone