사용자 지정 연산자 라이브러리

VisualApplets를 사용하면 VHDL로 설계한 이미지 처리 모듈을 VisualApplets 오퍼레이터로 변환할 수 있습니다.

모듈을 IP 코어 형태로 VisualApplets에 통합합니다. 각 IP 코어는 하나의 오퍼레이터를 구성합니다. 구현 후 이 오퍼레이터들은 내장된 VisualApplets 오퍼레이터처럼 작동합니다. 이러한 방식으로 구현된 오퍼레이터를 사용자 정의 오퍼레이터라고 합니다.

VisualApplets GUI에서 사용자 정의 오퍼레이터를 사용할 수 있도록 하려면, 하나 이상의 사용자 정의 오퍼레이터를 포함하는 하나 이상의 사용자 정의 라이브러리를 정의해야 합니다. 각 사용자 정의 오퍼레이터는 특정 사용자 정의 라이브러리의 일부여야 합니다.

워크플로

몇 가지 단계를 거쳐 VisualApplets에 새로운 사용자 정의 오퍼레이터를 추가할 수 있습니다. 전체 워크플로를 직접 완료할 수 있습니다.

  1. VA GUI에서 직접 사용자 정의 오퍼레이터의 주요 속성과 인터페이스를 지정합니다(오퍼레이터 이름, 오퍼레이터 버전, 필요한 입력 이미지, 출력 이미지, 메모리 포트 등의 수와 속성).

  2. 1단계의 입력을 바탕으로 VisualApplets가 오퍼레이터 인터페이스(블랙박스)용 VHDL 코드와 구현 테스트용 VHDL 테스트 벤치를 생성하도록 합니다.

  3. 인터페이스가 생성된 블랙박스와 일치하도록 HDL 코드를 래핑합니다. 구현 테스트 시 자동으로 생성된 테스트 벤치가 도움이 될 수 있습니다.

  4. 구현에 대한 넷리스트를 생성합니다. 필요한 경우 제약 조건 파일도 생성합니다.

  5. 선택 사항으로, 오퍼레이터 문서(오퍼레이터 도움말 창용)와 시뮬레이션 모델(나중에 사용자 정의 오퍼레이터가 포함된 VA 설계를 시뮬레이션할 수 있게 해줌)을 생성합니다.

  6. VA에서 사용자 정의 오퍼레이터를 다시 편집합니다. 생성된 넷리스트와 선택 사항으로 도움말 파일 및 시뮬레이션 모델을 추가합니다.

이 단계를 거치면 이미지 처리 모듈이 VisualApplets에서 사용자 정의 오퍼레이터로 직접 제공되며 다른 오퍼레이터와 동일한 방식으로 사용할 수 있습니다. 사용자 정의 라이브러리는 다음 파일로 *.val 또는 *.vl 저장됩니다(사용자 라이브러리와 유사함). 이 형식으로 배포 및 유포할 수 있습니다.

VisualApplets 사용자 정의 연산자 기능

VisualApplets(즉, VisualApplets 사용자 정의 오퍼레이터 기능)는 이 워크플로 동안 두 번 사용됩니다.

  1. 관련 IP 코어 인터페이스(블랙박스 및 테스트 벤치)를 정의하는 HDL 코드를 내보낼 수 있는 VisualApplets 내 오퍼레이터 프로토타입 생성용.

  2. 합성 및 (선택 사항) 시뮬레이션과 도움말 콘텐츠에 필요한 파일을 추가하여 오퍼레이터를 완성하기 위함.

오퍼레이터 프로토타입 생성: VA 사용자 정의 오퍼레이터 기능을 사용하면 Visual Applets에서 오퍼레이터를 인스턴스화하는 데 즉시 사용할 수 있는 오퍼레이터 프로토타입을 만들 수 있습니다. 이 오퍼레이터 프로토타입의 경우, 블랙박스 인터페이스와 생성된 오퍼레이터 인터페이스의 통신 포트를 에뮬레이션하기 위한 RTL 수준 시뮬레이션 엔터티를 내보낼 수 있습니다. 그런 다음 코딩을 시작하고(즉, 블랙박스의 인터페이스를 준수하는 HDL 코드 구현) 사용자 정의 오퍼레이터 설계를 시뮬레이션할 수 있습니다. 그 결과로 나온 FPGA 설계를 EDIF 또는 NGC 넷리스트로 합성합니다. 선택 사항으로 제약 조건 파일을 추가하고, VisualApplets 상위 수준 시뮬레이션을 위한 동적 연결 라이브러리를 만들고, VisualApplets GUI용 HTML 문서를 작성합니다.

오퍼레이터 정의 완료: VA 사용자 정의 오퍼레이터 기능을 사용하면 넷리스트, 시뮬레이션 라이브러리 및 문서 파일을 지정할 수 있습니다. 이러한 파일이 보완되면 오퍼레이터를 즉시 사용할 수 있습니다.

Operator 유형

VisualApplets는 기본 흐름 제어 메커니즘에 따라 다양한 유형의 오퍼레이터와 포트를 지원합니다. 오퍼레이터는 O 유형 또는 M 유형일 수 있습니다.

[팁] 사용자 정의 오퍼레이터 유형: M

사용자 정의 오퍼레이터는 항상 M 유형입니다.

Synchronous 및 Asynchronous Operator Ports

오퍼레이터 포트는 동기식 또는 비동기식일 수 있습니다. VisualApplets에서 동기식이란 기본적으로 여러 포트의 데이터가 동기화되어 전송되는 것을 의미하며, 서로 비동기식인 포트는 정렬되지 않은 통신 패턴을 지원합니다.

포트는 공통 M 소스가 있거나 SYNC 모듈에서 소스를 가져오는 경우에만 동기식이며, 해당 소스와 포트 사이에 모든 구성의 O 오퍼레이터가 있을 수 있습니다.

오퍼레이터 입력 포트 간의 관계에 따라 다음과 같은 옵션으로 구분됩니다.

  1. 동기식 입력: 모든 입력 포트가 서로 동기화됩니다. 하나의 출력 포트가 있습니다.

  2. 비동기식 입력: 일부 입력 포트가 서로 비동기식이며 모든 출력은 서로 동기화됩니다.

비동기 출력이 있는 오퍼레이터는 허용되지 않습니다. 동기 입력이 있는 오퍼레이터는 단일 출력만 가질 수 있습니다. 둘 이상의 출력이 필요한 경우, 입력은 비동기로 선언되어야 합니다.

[팁] 다중 출력 정의

여러 개의 출력이 있는 오퍼레이터를 생성하려면 입력을 비동기로 선언해야 합니다. 다중 출력은 항상 동기 방식입니다.

두 클래스 모두에 대한 예시(기본 제공 VisualApplets 오퍼레이터):

RemoveImage

동기 입력과 하나의 출력을 가진 M-Operator.

SYNC

비동기 입력과 여러 개의 동기 출력을 가진 M-Operator.

인터페이스 아키텍처

VisualApplets 커스텀 오퍼레이터 인터페이스는 새로운 오퍼레이터를 원활하게 통합하여 VisualApplets 내에서 기본 제공 오퍼레이터처럼 작동하도록 설계되었습니다. 커스텀 오퍼레이터에 대해 임의의 수의 입력 및 출력 포트를 정의할 수 있습니다.

  • Image In / Image Out: Image In 및 Image Out 포트는 여러 이미지 포맷을 지원할 수 있습니다. 이 포트들은 사용하기 쉬운 FIFO 인터페이스로 구동됩니다. FIFO는 커스텀 오퍼레이터의 VA 부분에 상주하므로, FIFO가 아닌 흐름 제어(flow control)만 구현하면 됩니다.

  • Memory ports: 임의의 수의 메모리 포트도 정의할 수 있습니다. 이 포트들 역시 커스텀 오퍼레이터의 VA 부분에 상주하는 FIFO를 사용합니다.

  • GPIO ports: 이미지 포트 외에도, 예를 들어 오퍼레이터에 비동기 신호를 통신하기 위한 범용 I/O 포트를 정의할 수 있습니다.

  • Registers: 오퍼레이터의 최종 사용자가 오퍼레이터를 구성하고 상태 정보에 액세스할 수 있도록, 임의의 수의 쓰기 및 읽기 레지스터를 정의할 수 있습니다.

  • Clock: 클록 펄스를 수신하기 위한 포트는 모든 커스텀 오퍼레이터에 대해 자동으로 설정됩니다.

  • Reset/Enable port: 리셋 또는 인에이블 명령을 수신하기 위한 포트는 모든 커스텀 오퍼레이터에 대해 자동으로 설정됩니다.

다음 섹션에서는 위 그림에 나타난 다양한 인터페이스 유형에 대해 자세히 설명합니다.

Clock Interface

VisualApplets은 디자인 클록과, 디자인 클록과 동기화되지만 주파수가 두 배인 두 번째 클록 등 두 개의 클록 입력을 연결합니다. 메모리 인터페이스를 제외한 모든 인터페이스는 디자인 클록과 동기화되어야 합니다. 메모리 인터페이스는 읽기 및/또는 쓰기 인터페이스를 위해 디자인 클록 또는 2배 주파수 클록을 사용하도록 설정할 수 있습니다.

재설정 및 활성화

Reset 및 Enable 입력은 오퍼레이터가 인스턴스화되는 VA 프로세스의 해당 “process enable” 및 “process reset” 신호에 의해 구동됩니다. 이러한 신호에 대한 반응으로 오퍼레이터에 다음 동작을 구현해야 합니다.

  • Reset 어설션은 오퍼레이터를 초기(init) 상태로 전환합니다.

  • Enable 어설션은 처리를 시작합니다.

  • Enable 비활성화는 처리를 중지합니다.

  • (Enable=0일 때, 오퍼레이터의 출력 FIFO는 읽혀지지 않습니다. 이미지 처리 파이프라인의 상태에 따라 일부 데이터가 여전히 입력 포트에 기록될 수 있지만, 흐름 제어를 통해 FIFO 내용이 손상되는 것을 안전하게 방지합니다.)

  • Reset은 Enable=0일 때만 어설션됩니다.

이러한 신호에 대한 다음 동작은 커스텀 오퍼레이터의 VA 부분에 구현되어 있습니다.

  • Reset은 모든 포트 인터페이스 FIFO를 비웁니다.

  • Reset과 Enable은 오퍼레이터의 파라미터에 영향을 미치지 않습니다.

  • Reset과 Enable은 오퍼레이터의 GPIO 인터페이스에 영향을 미치지 않습니다.

Register Interface

사용자 정의 오퍼레이터는 오퍼레이터 매개변수와 상태를 통신하기 위해 임의 개수의 VisualApplets 매개변수를 제공받을 수 있습니다. 각 매개변수는 사용자 정의 오퍼레이터의 개별 레지스터 포트로 변환됩니다. VisualApplets는 오퍼레이터 레지스터와의 접근 디스패칭을 처리합니다.

이미지 데이터용 인터페이스

Image Protocols

사용자 정의 오퍼레이터의 이미지 입력 및 이미지 출력 포트에서 지원할 이미지 프로토콜을 정의할 수 있습니다. 이후 오퍼레이터 사용자는 제공된 이미지 프로토콜 목록에서 선택할 수 있습니다.

VisualApplets는 오퍼레이터의 ImgIn 및 ImgOut 포트에서 지원하는 다음과 같은 이미지 포맷을 제공합니다.

  • grayXxP: 픽셀당 비트 수가 X이고 Parallelism이 P인 그레이스케일 이미지

  • rgbYxP: 색상 구성 요소(빨강, 초록, 파랑)당 비트 수가 Y/3이고 Parallelism이 P인 컬러 이미지

  • hsiYxP: 색상 구성 요소(HSI 색상 모델)당 비트 수가 Y/3이고 Parallelism이 P인 컬러 이미지

  • hslYxP: 색상 구성 요소(HSL 색상 모델)당 비트 수가 Y/3이고 Parallelism이 P인 컬러 이미지

  • hsvYxP: 색상 구성 요소(HSV 색상 모델)당 비트 수가 Y/3이고 Parallelism이 P인 컬러 이미지

  • yuvYxP: 색상 구성 요소(YUV 색상 모델)당 비트 수가 Y/3이고 Parallelism이 P인 컬러 이미지

  • ycrcbYxP: 색상 구성 요소(YCrCb 색상 모델)당 비트 수가 Y/3이고 Parallelism이 P인 컬러 이미지

  • labYxP: 색상 구성 요소(LAB 색상 모델)당 비트 수가 Y/3이고 Parallelism이 P인 컬러 이미지

  • xyzYxP: 색상 구성 요소(XYZ 색상 모델)당 비트 수가 Y/3이고 Parallelism이 P인 컬러 이미지

또한 이미지 크기와 픽셀 구성 요소의 부호(signed/unsigned) 여부 정보는 선택적 접미사를 사용하여 부호화할 수 있습니다.

The pixel data width X is limited to 64 bit. The width Y must be a multiple of 3 and is limited to 63 bit. The parallelism P defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}.

지정된 인터페이스 너비 N의 워드로 이미지 데이터를 패킹할 때는 다음 규칙을 따라야 합니다.

  • 모든 P 픽셀의 데이터는 길이 N의 단일 워드에 맞아야 합니다. 데이터는 LSB 정렬 방식으로 저장되므로, 픽셀 너비가 Z(그레이의 경우 Z=X, 컬러의 경우 Z=Y)인 경우 데이터는 Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]과 같이 분배됩니다.

  • RGB 이미지의 경우 세 가지 색상 구성 요소가 LSB 정렬되어 하위 워드 [0..Y-1]에 다음 순서로 패킹됩니다. 빨강은 비트 [0..Y/3-1], 초록은 비트 [Y/3..2*Y/3-1], 파랑은 비트 [2*Y/3..3*Y/3-1]를 사용합니다.

  • YUV 컬러 이미지의 경우 RGB와 동일한 규칙이 적용되며, Y가 빨강, U가 초록, V가 파랑의 역할을 합니다.

  • HSI 컬러 이미지의 경우 RGB와 동일한 규칙이 적용되며, H가 빨강, S가 초록, I가 파랑의 역할을 합니다.

  • LAB 컬러 이미지의 경우 RGB와 동일한 규칙이 적용되며, L이 빨강, A가 초록, B가 파랑의 역할을 합니다.

  • XYZ 컬러 이미지의 경우 RGB와 동일한 규칙이 적용되며, X가 빨강, Y가 초록, Z가 파랑의 역할을 합니다.

VisualApplets에서 모든 링크는 최대 이미지 너비와 최대 이미지 높이 속성을 가집니다. VisualApplets를 사용하면 사용자 정의 오퍼레이터가 지원하는 이미지 프로토콜 각각에 대해 최대 너비와 높이에 대한 선택적 제약 조건을 개별적으로 정의할 수 있습니다.

이미지 인터페이스 포트의 경우 허용되는 이미지 프로토콜 목록을 정의합니다. 이 목록은 가능한 VisualApplets 이미지 포맷의 하위 집합을 구성합니다(위 참조). 포맷은 다음 속성으로 설명할 수 있습니다.

  • 데이터 유형 uint 또는 int

  • 픽셀 데이터 Bit Width N = [1..64]

  • 그레이 또는 Color Format(너비 N이 집계된 단일 또는 3개의 데이터 구성 요소)

  • Color Format의 종류(RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)

  • 2D, 1D 또는 0D

  • Parallelism P = {1,2,4,8,16,32,64}

기본적으로 커널 크기는 1x1인 것으로 가정합니다. 나열된 포트들은 0부터 시작하여 번호가 매겨지며, 이를 통해 ID를 정의합니다.

VisualApplets에서 최종 오퍼레이터로 작업할 때, 오퍼레이터 사용자는 문제의 이미지 통신 포트에 대해 여기에 나열된 형식 중 원하는 것을 선택할 수 있습니다. VA 사용자가 선택한 내용에 따라, 해당 ID가 관련 커스텀 오퍼레이터 포트로 출력됩니다.

이를 통해 커스텀 오퍼레이터는 선택된 형식에 맞게 동작을 조정할 수 있습니다.

이미지 입력 포트

이미지 입력 포트를 사용하면 VisualApplets 프로세스에서 커스텀 오퍼레이터로 이미지 데이터를 전달할 수 있습니다. 이 포트들의 이름은 ImgIn입니다. 입력 채널 구성(섹션 'Image Protocols' 참조)을 지원하도록 커스텀 오퍼레이터를 설계한 경우, VisualApplets 내의 해당 형식 파라미터로 선택된 단일 포트를 통해 여러 가지 서로 다른 프로토콜을 구동할 수 있습니다. 이 인터페이스는 기본적으로 실제 사용되는 데이터 형식의 ID를 제공하는 파라미터 레지스터와 FIFO로 구성됩니다. 커스텀 오퍼레이터는 선택된 이미지 형식의 프로토콜에 따라 FIFO를 읽고 이미지 데이터를 해석하는 작업을 처리해야 합니다. 오퍼레이터는 FIFO의 채워진 상태에 대한 정보를 제공하는 상태 핀에 따라 올바른 흐름 제어를 보장해야 합니다. 즉, FIFO가 비어 있을 때는 데이터를 읽을 수 없습니다.

이미지 인터페이스 포트의 경우 허용되는 이미지 형식 목록을 정의해야 합니다. 이 목록은 가능한 VisualApplets 이미지 형식(섹션 'Image Protocols' 참조)의 하위 집합을 구성하며, 형식은 다음 속성으로 설명할 수 있습니다.

  • 데이터 유형 uint 또는 int

  • 픽셀 데이터 Bit Width N = [1..64]

  • 그레이 또는 Color Format(너비 N이 집계된 단일 또는 3개의 데이터 구성 요소)

  • Color Format의 종류(RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)

  • 2D, 1D 또는 0D

  • Parallelism P = {1,2,4,8,16,32,64}

기본적으로 커널 크기는 1x1인 것으로 가정합니다. 나열된 포트들은 0부터 시작하여 번호가 매겨지며, 이를 통해 ID를 정의합니다.

VisualApplets에서 최종 오퍼레이터로 작업할 때, 사용자는 해당 이미지 통신 포트에 대해 여기에 나열된 형식 중 원하는 것을 선택할 수 있습니다. VA 사용자가 선택한 내용에 따라 해당 ID가 관련 커스텀 오퍼레이터 포트로 출력됩니다. 이를 통해 커스텀 오퍼레이터는 선택된 형식에 맞춰 동작을 조정할 수 있습니다.

Image Output Ports

이미지 출력 포트를 통해 커스텀 오퍼레이터에서 VisualApplets 프로세스로 이미지 데이터를 전달할 수 있습니다. 이 포트들의 이름은 ImgOut입니다. 출력 채널의 적절한 구성을 지원하도록 커스텀 오퍼레이터를 설계한 경우(섹션 'Image Protocols' 참조), VisualApplets 내의 해당 형식 파라미터로 선택된 단일 포트를 통해 여러 가지 서로 다른 프로토콜을 구동할 수 있습니다. 이 인터페이스는 기본적으로 실제 사용되는 데이터 형식의 ID를 제공하는 파라미터 레지스터와 FIFO로 구성됩니다. 커스텀 오퍼레이터는 선택된 이미지 형식의 프로토콜에 따라 이미지 데이터로 FIFO를 채우는 작업을 처리해야 합니다. 오퍼레이터는 FIFO의 채워진 상태에 대한 정보를 제공하는 상태 핀에 따라 올바른 흐름 제어를 보장해야 합니다. 즉, FIFO가 가득 찼을 때는 데이터를 쓸 수 없습니다.

이미지 인터페이스 포트의 경우 허용되는 이미지 형식 목록을 정의해야 합니다. 이 목록은 가능한 VisualApplets 이미지 형식(섹션 'Image Protocols' 참조)의 하위 집합을 구성하며, 형식은 다음 속성으로 설명할 수 있습니다.

  • 데이터 유형 uint 또는 int

  • 픽셀 데이터 Bit Width N = [1..64]

  • 그레이 또는 Color Format(너비 N이 집계된 단일 또는 3개의 데이터 구성 요소)

  • Color Format의 종류(RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)

  • 2D, 1D 또는 0D

  • Parallelism P = {1,2,4,8,16,32,64}

기본적으로 커널 크기는 1x1인 것으로 가정합니다. 나열된 포트들은 0부터 시작하여 번호가 매겨지며, 이를 통해 ID를 정의합니다.

VisualApplets에서 최종 오퍼레이터로 작업할 때, 사용자는 해당 이미지 통신 포트에 대해 여기에 나열된 형식 중 원하는 것을 선택할 수 있습니다. VA 사용자가 선택한 내용에 따라, 해당 ID가 관련 커스텀 오퍼레이터 포트로 출력됩니다. 이를 통해 커스텀 오퍼레이터는 선택된 형식에 맞게 동작을 조정할 수 있습니다.

범용 I/O

General Purpose I/O 인터페이스를 통해 커스텀 오퍼레이터의 전용 신호 핀을 연결할 수 있습니다. 모든 GPIO 포트는 입력 또는 출력인 커스텀 오퍼레이터의 핀에 매핑됩니다.

양방향 핀은 지원되지 않습니다. VisualApplets에서 해당 오퍼레이터 포트는 SIGNAL 타입입니다.

[팁] 양방향 핀이 지원되지 않음

GPIO 핀은 입력 또는 출력 중 하나여야 합니다. 양방향 핀은 지원되지 않습니다.

Memory Interface

커스텀 오퍼레이터는 하나 이상의 메모리 뱅크에 액세스하도록 설정할 수 있습니다. 관련 메모리 포트는 쓰기 및 읽기 명령을 위한 FIFO 유사 인터페이스를 가지고 있습니다. FIFO는 커스텀 오퍼레이터의 VA 부분에 상주하므로, 사용자는 FIFO가 아닌 흐름 제어만 구현하면 됩니다. 커스텀 오퍼레이터에 연결된 메모리 컨트롤러로 FIFO 콘텐츠를 전달하는 타이밍은 완전히 VisualApplets에 의해 제어됩니다.

GUI를 통해 개별 사용자 정의 연산자 정의

먼저, 새 커스텀 오퍼레이터를 설명하는 몇 가지 세부 정보를 입력해야 합니다.

VisualApplets은 이 세부 정보를 사용하여 커스텀 오퍼레이터를 위한 VHDL 블랙박스와 시뮬레이션을 위한 해당 테스트 벤치를 생성합니다.

VisualApplets GUI를 통해 개별 커스텀 오퍼레이터의 구성을 입력합니다. VisualApplets은 넷리스트, 시뮬레이션 모델 및 문서화 측면에서 오퍼레이터 사양이 불완전하더라도, 지정된 오퍼레이터를 디자인에서 즉시 사용할 수 있도록 만듭니다.

[팁] Custom Library File

포함된 모든 오퍼레이터가 있는 커스텀 라이브러리는 하나의 단일 파일로 <LibaryName>.val 또는 <LibaryName>.vl 파일. <LibaryName> 은(는) 커스텀 라이브러리의 이름입니다.

이 파일은 배포하여 VisualApplets에서 직접 적용할 수 있습니다. VisualApplets 설정에 지정된 Custom Library 디렉토리에 복사하기만 하면 됩니다.

[팁] XML 형식의 오퍼레이터 구성

VisualApplets은 커스텀 오퍼레이터 사양을 XML 형식으로 저장합니다. 예를 들어 버전 관리 시스템에서 처리하기 위해 커스텀 라이브러리에서 XML 콘텐츠를 파일로 내보낼 수 있습니다. 반대로, 커스텀 오퍼레이터를 추가하기 위해 XML을 가져올 수도 있습니다(섹션 'Importing and Exporting Individual Custom Operators' 참조). 이 XML 파일의 생김새를 알 필요는 없습니다. 하지만 확인하고 싶다면 섹션 'XML Format for Custom Operator Specification'을 참조하십시오.

새 사용자 정의 라이브러리 만들기

새로운 사용자 정의 연산자를 정의하기 전에, 해당 연산자가 속할 사용자 정의 라이브러리를 생성해야 합니다.

새로운 사용자 정의 연산자가 속하게 될 사용자 정의 라이브러리가 이미 있다면, 이 섹션을 건너뛰고 '새로운 사용자 정의 연산자 만들기' 섹션으로 넘어가십시오 .

새 사용자 정의 라이브러리를 만들려면:

  1. 메뉴에서 '라이브러리'에서 메뉴 항목 새 사용자 지정 라이브러리 만들기를 선택합니다.

  2. 새 사용자 지정 라이브러리에 이름을 지정하세요.

  3. 기본적으로 새로운 사용자 정의 연산자 라이브러리는 *.val 파일 형식. 이 라이브러리를 VisualApplet 버전 3.3.2 또는 그 이전 버전에서 열려면 다음을 선택하십시오. 구형 라이브러리 형식 (.vl).

  4. 클릭 ‘확인’

[팁] 유효한 C 식별자에 대한 규칙을 준수하십시오

라이브러리 이름을 정의할 때는 유효한 C 식별자에 대한 규칙을 반드시 준수해야 합니다.

이제 새로운 사용자 정의 라이브러리가 생성되었습니다. 이 라이브러리는 운영자 패널의 사용자 정의 라이브러리 탭에서 확인할 수 있습니다:

사용자 지정 라이브러리 이름 위로 마우스를 올리면, 해당 라이브러리가 *.vl 구형 파일 형식:

새 사용자 정의 라이브러리를 생성하려면, 모든 사용자 정의 라이브러리 관련 파일이 저장될 디렉터리를 지정해야 할 수 있습니다. 이 작업은 설정 → 시스템 설정 → 경로.

새로운 Custom Operator 생성

새로운 사용자 정의 연산자를 정의하려면:

  1. 메뉴에서 '라이브러리'에서 메뉴 항목 사용자 지정 라이브러리 편집를 선택하십시오.

  2. 열리는 하위 메뉴에서 다음을 선택하세요. 새 사용자 정의 라이브러리 요소를 선택하십시오.

  3. 열리는 창에서 라이브러리 이름을 더블 클릭하여 사용자 지정 라이브러리를 선택하십시오. .

  4. 사용자 지정 연산자의 이름을 입력하세요:

    [팁] VHDL 명명 규칙 준수

    VA GUI에서 연산자 이름을 정의할 때는 VHDL 명명 규칙을 준수해야 합니다.

    VHDL에서 유효한 이름은 다음과 같이 정의됩니다:

    “포트, 신호, 변수, 엔티티 이름, 아키텍처 본문 또는 이와 유사한 객체에 사용할 수 있는 유효한 이름은 공백 없이 한 글자 뒤에 임의의 개수의 글자나 숫자가 이어지는 형태로 구성됩니다. 유효한 이름을 ‘명명된 식별자’라고도 합니다. VHDL은 대소문자를 구분하지 않습니다. 단, 이름 내부에서는 밑줄을 사용할 수 있으나, 이름의 시작이나 끝에는 사용할 수 없습니다. 연속된 두 개의 밑줄은 허용되지 않습니다.“

  5. 저장하기 전에 새 연산자의 속성을 정의해야 합니다:

    새 커스텀 operator의 속성 정의에 대한 자세한 내용은 'Defining Basic Information about Custom Operator'를 참조하십시오.

  6. Create 버튼을 클릭합니다.

    Edit Custom Operator 대화상자가 열립니다. 여기에서 커스텀 operator를 정의할 수 있습니다.

  7. Save 버튼을 클릭합니다.

이제 속한 커스텀 라이브러리 아래에 새로운 커스텀 operator가 표시됩니다.

새로운 커스텀 operator를 생성하여 VisualApplets에 저장한 후에는 작업을 중단했다가 언제든지 이어서 진행할 수 있습니다. 계속하려면 Custom Library 탭으로 이동하여 라이브러리를 열고 operator 이름을 마우스 우클릭한 다음 하위 메뉴에서 Edit를 선택합니다.

[팁] 대신 Operator Template 사용

또는 VisualApplets 설치 시 제공되는 커스텀 operator 템플릿을 사용하여 새로운 커스텀 operator를 정의할 수 있습니다. 템플릿 사용법은 'Custom Operator Template' 섹션을 참조하십시오.

사용자 정의 연산자에 대한 기본 정보 정의

첫 번째 단계로 커스텀 operator의 인터페이스를 정의합니다.

  1. 공급업체 이름을 입력합니다. 임의의 문자열을 입력할 수 있습니다. 이 정보는 사용자가 operator를 식별하기 위한 것입니다.

  2. Provide a version number for your operator, e.g., version 1.0. You can enter any number but you should comply with the version scheme <major>.<minor>. This information is intended for operator version identification by the user.

  3. Inputs 탭으로 이동합니다.

이미지 입력 포트 정의

Inputs 탭에서는 이미지 입력 포트의 속성을 설명합니다.

  1. 먼저 커스텀 operator의 ImgIn 포트 입력 모드를 정의합니다.

[팁] Synchronous 및 Asynchronous Operator Ports

Operator 포트는 동기식 또는 비동기식일 수 있습니다. VisualApplets에서 동기식이란 기본적으로 여러 포트의 데이터가 동기화되어 전송되는 것을 의미하며, 서로 비동기식인 포트는 정렬되지 않은 통신 패턴을 지원합니다.

포트는 공통 M-source가 있거나 SYNC 모듈에서 소스가 파생된 경우에만 동기식이며, 해당 소스와 포트 사이에 임의의 O-operators 구성이 있을 수 있습니다.

Operator 입력 포트 간의 관계에 따라 다음과 같은 옵션으로 구분됩니다.

동기식 입력:

모든 입력 포트가 서로 동기식입니다. 하나의 출력 포트가 존재합니다.

A동기식 입력:

일부 입력 포트는 서로 비동기식이고 모든 출력은 서로 동기식입니다.

비동기식 출력을 가진 operator는 허용되지 않습니다. 동기식 입력을 가진 operator는 단일 출력만 가질 수 있습니다. 둘 이상의 출력이 필요한 경우 입력은 비동기식으로 선언되어야 합니다.

여러 출력을 가진 operator를 생성하려면 입력을 비동기식으로 선언해야 합니다. 복수의 출력은 항상 동기식입니다.

두 범주에 대한 예시(VisualApplets 내장 operator):

RemoveImage

동기식 입력과 하나의 출력을 가진 M-Operator

SYNC

비동기식 입력과 여러 동기식 출력을 가진 M-Operator

하나 이상의 이미지 입력 포트(ImgIn)를 정의할 수 있습니다. 각 ImgIn 포트는 지정한 횟수만큼 사용할 수 있습니다.

  1. 버튼을 Plus 버튼 를 클릭하여 첫 번째 이미지 입력(ImgIn) 포트를 생성합니다.

  2. ImgIn 포트의 이름을 지정하고 Multiplicity 필드에서 입력 포트 수를 정의합니다. >1로 설정하면 기본 이름과 인덱스로 구성된 이름을 가진 포트 배열이 정의됩니다.

    프로그램 창의 연산자 표현에 입력한 ImgIn 포트 배열이 즉시 표시됩니다.

  3. Properties 패널에서 이 ImgIn 포트가 지원하는 프로토콜의 속성을 지정합니다.

  4. Port Width에서 ImgIn 포트의 너비를 지정합니다.

  5. Fifo Depth에서 VA 코어가 제공해야 하는 입력 데이터용 버퍼 FIFO의 깊이를 지정합니다. 값은 15에서 1023 사이의 2의 거듭제곱에서 1을 뺀 값이어야 합니다.

    이미지 인터페이스 포트의 경우 허용되는 프로토콜 목록을 정의합니다. 프로토콜은 다음과 같은 속성으로 설명할 수 있습니다.

    • 그레이 또는 컬러 형식(통합 너비 N을 가진 단일 또는 3개의 데이터 컴포넌트)

    • Color Format의 종류(RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)

    • 픽셀 데이터 Bit Width N = [1..64]

    • Parallelism P = {1,2,4,8,16,32,64}

    • 2D(배열), 1D(라인) 또는 0D(Raw)

    • 데이터 유형 uint 또는 int

    • 최대 이미지 크기

    커널 크기는 암시적으로 1x1로 가정됩니다.

    나열된 프로토콜은 0부터 시작하여 번호가 매겨지며, 이를 통해 ID가 정의됩니다(아래 이미지의 Properties 패널 테이블의 왼쪽 열에서 볼 수 있음).

    둘 이상의 프로토콜을 지정하는 경우, 커스텀 연산자가 입력 채널의 구성을 지원하도록 설계합니다. 이 경우 단일 포트를 통해 여러 가지 다른 프로토콜을 구동할 수 있습니다.

    커스텀 연산자 사용자는 특정 ImgIn 포트에서 사용할 프로토콜을 선택할 수 있습니다. VA 사용자가 선택한 내용에 따라 해당 ID가 관련 커스텀 연산자 포트로 출력됩니다. 이를 통해 커스텀 연산자는 선택한 프로토콜에 맞게 동작을 조정할 수 있습니다.

  6. Format에서 프로토콜의 컬러 형식을 지정합니다.

    다음 컬러 형식이 허용됩니다.

    • grayXxP: 픽셀당 X비트 및 Parallelism P를 갖는 그레이 이미지

    • rgbYxP: 컬러 컴포넌트(빨강, 초록, 파랑)당 Y/3비트 및 Parallelism P를 갖는 컬러 이미지

    • hsiYxP: 컬러 컴포넌트(HSI 컬러 모델)당 Y/3비트 및 Parallelism P를 갖는 컬러 이미지

    • hslYxP: 컬러 컴포넌트(HSL 컬러 모델)당 Y/3비트 및 Parallelism P를 갖는 컬러 이미지

    • hsvYxP: 컬러 컴포넌트(HSV 컬러 모델)당 Y/3비트 및 Parallelism P를 갖는 컬러 이미지

    • yuvYxP: color component당 Y/3 비트(YUV 컬러 모델) 및 Parallelism P를 사용하는 컬러 이미지

    • ycrcbYxP: color component당 Y/3 비트(YCrCb 컬러 모델) 및 Parallelism P를 사용하는 컬러 이미지

    • labYxP: color component당 Y/3 비트(LAB 컬러 모델) 및 Parallelism P를 사용하는 컬러 이미지

    • xyzYxP: color component당 Y/3 비트(XYZ 컬러 모델) 및 Parallelism P를 사용하는 컬러 이미지

  7. Pix.Width 열의 필드를 더블 클릭하고 특정 포맷의 픽셀 데이터 너비를 지정합니다.

    Pix.Width의 값 범위는 Format에서 선택한 항목에 따라 달라집니다.

    Gray: 픽셀 데이터 너비(이하 X로 지칭)는 64비트로 제한됩니다.

    All color formats: 픽셀 데이터 너비(이하 Y로 지칭)는 3의 배수여야 하며 63비트로 제한됩니다.

  8. Parall. 열의 필드를 더블 클릭하고 특정 포맷의 Parallelism를 지정합니다.

    The parallelism defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}. Packing of image data into words of a given interface width N (specified under Port Width) must follow certain rules:

    • 모든 P 픽셀의 데이터는 길이 N의 단일 워드에 맞아야 합니다. 데이터는 LSB 정렬 방식으로 저장되므로 픽셀 너비가 Z(그레이의 경우 Z=X, 컬러의 경우 Z=Y)일 때 데이터는 Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]과 같이 분배됩니다.

    • RGB 이미지의 경우 세 가지 color component가 다음 순서로 하위 워드 [0..Y-1]에 LSB 정렬되어 패킹됩니다. 빨간색은 비트 [0..Y/3-1], 초록색은 비트 [Y/3..2*Y/3-1], 파란색은 비트 [2*Y/3..3*Y/3-1]을 사용합니다.

    • HSI 컬러 이미지의 경우 H가 빨간색, S가 초록색, I가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • HSL 컬러 이미지의 경우 H가 빨간색, S가 초록색, L이 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • HSV 컬러 이미지의 경우 H가 빨간색, S가 초록색, V가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • YUV 컬러 이미지의 경우 Y가 빨간색, U가 초록색, V가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • YCrCb 컬러 이미지의 경우 Y가 빨간색, Cr이 초록색, Cb가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • LAB 컬러 이미지의 경우 L이 빨간색, A가 초록색, B가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • XYZ 컬러 이미지의 경우 X가 빨간색, Y가 초록색, Z가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

  9. Dimension에서 프로토콜이 2D(Area), 1D(Line) 또는 0D(Raw) 이미지를 지원하는지 지정합니다.

  10. Max.Width/Max.Height: 이 선택적 필드를 사용하여 이미지 너비 및 이미지 높이에 대한 제약 조건을 정의할 수 있습니다.

  11. 6단계부터 10단계까지 반복하여 ImgIn 포트가 지원할 프로토콜을 원하는 만큼 정의합니다.

  12. 1단계부터 11단계까지 반복하여 사용자 정의 연산자에서 제공할 ImgIn 포트를 원하는 만큼 정의합니다.

Image Output Ports 정의

Outputs 탭에서 이미지 출력 포트의 속성을 설명합니다.

하나 이상의 이미지 출력 포트(ImgOut)를 정의할 수 있습니다. 각 ImgOut 포트는 지정한 횟수만큼 사용할 수 있습니다.

  1. 버튼을 Plus 버튼 첫 번째 이미지 출력을 생성하려면ImgOut) 포트를 생성합니다.

  2. ImgOut 포트의 이름을 지정합니다.

  3. Multiplicity 열의 필드를 더블클릭하여 포트 배열을 생성합니다. Multiplicity 값이 1보다 크면 기본 이름과 인덱스로 구성된 이름의 포트 배열이 정의됩니다.

    프로그램 창의 오퍼레이터 표현에 입력한 ImgOut 포트 배열이 즉시 표시됩니다.

  4. Properties 패널에서 이 ImgOut 포트가 지원하는 프로토콜의 속성을 지정합니다.

    Port Width에서 ImgOut 포트의 너비를 지정합니다.

  5. Fifo Depth에서 VA 코드가 최소한 제공해야 하는 출력 데이터용 버퍼 FIFO의 깊이를 지정합니다. 값은 15에서 1023 사이의 2의 거듭제곱에서 1을 뺀 값이어야 합니다.

    이미지 인터페이스 포트의 경우 허용되는 프로토콜 목록을 정의합니다. 프로토콜은 다음과 같은 속성으로 설명할 수 있습니다.

    • 그레이 또는 Color Format(너비 N이 집계된 단일 또는 3개의 데이터 구성 요소)

    • Color Format의 종류(RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)

    • 픽셀 데이터 Bit Width N = [1..64]

    • Parallelism P = {1,2,4,8,16,32,64}

    • 2D(배열), 1D(라인) 또는 0D(Raw)

    • 데이터 유형 uint 또는 int

    • 최대 이미지 크기

    커널 크기는 암시적으로 1x1로 가정됩니다.

    나열된 프로토콜은 0부터 시작하여 번호가 매겨지며, 이를 통해 ID가 정의됩니다(아래 이미지의 Properties 패널 테이블의 왼쪽 열에서 볼 수 있음).

    둘 이상의 프로토콜을 지정하는 경우, 커스텀 연산자가 입력 채널의 구성을 지원하도록 설계합니다. 이 경우 단일 포트를 통해 여러 가지 다른 프로토콜을 구동할 수 있습니다.

    커스텀 오퍼레이터 사용자는 특정 ImgOut 포트에서 사용할 프로토콜을 선택할 수 있습니다. VisualApplets 사용자의 선택에 따라 해당 ID가 관련 커스텀 오퍼레이터 포트로 출력됩니다. 이를 통해 커스텀 오퍼레이터는 선택된 프로토콜에 맞게 동작을 조정할 수 있습니다.

  6. Format에서 프로토콜의 컬러 형식을 지정합니다.

    다음 컬러 형식이 허용됩니다.

    • grayXxP: 픽셀당 X비트 및 Parallelism P를 갖는 그레이 이미지

    • rgbYxP: 컬러 컴포넌트(빨강, 초록, 파랑)당 Y/3비트 및 Parallelism P를 갖는 컬러 이미지

    • hsiYxP: 컬러 컴포넌트(HSI 컬러 모델)당 Y/3비트 및 Parallelism P를 갖는 컬러 이미지

    • hslYxP: 컬러 컴포넌트(HSL 컬러 모델)당 Y/3비트 및 Parallelism P를 갖는 컬러 이미지

    • hsvYxP: 컬러 컴포넌트(HSV 컬러 모델)당 Y/3비트 및 Parallelism P를 갖는 컬러 이미지

    • yuvYxP: color component당 Y/3 비트(YUV 컬러 모델) 및 Parallelism P를 사용하는 컬러 이미지

    • ycrcbYxP: color component당 Y/3 비트(YCrCb 컬러 모델) 및 Parallelism P를 사용하는 컬러 이미지

    • labYxP: color component당 Y/3 비트(LAB 컬러 모델) 및 Parallelism P를 사용하는 컬러 이미지

    • xyzYxP: color component당 Y/3 비트(XYZ 컬러 모델) 및 Parallelism P를 사용하는 컬러 이미지

  7. Pix.Width 열의 필드를 더블 클릭하고 특정 포맷의 픽셀 데이터 너비를 지정합니다.

    Pix.Width의 값 범위는 Format에서 선택한 항목에 따라 달라집니다.

    Gray: 픽셀 데이터 너비(이하 X로 지칭)는 64비트로 제한됩니다.

    All color formats: 픽셀 데이터 너비(이하 Y로 지칭)는 3의 배수여야 하며 63비트로 제한됩니다.

  8. Parall. 열의 필드를 더블 클릭하고 특정 포맷의 Parallelism를 지정합니다.

    The parallelism defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}. Packing of image data into words of a given interface width N (specified under Port Width) must follow certain rules:

    • 모든 P 픽셀의 데이터는 길이 N의 단일 워드에 맞아야 합니다. 데이터는 LSB 정렬 방식으로 저장되므로 픽셀 너비가 Z(그레이의 경우 Z=X, 컬러의 경우 Z=Y)일 때 데이터는 Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]과 같이 분배됩니다.

    • RGB 이미지의 경우 세 가지 color component가 다음 순서로 하위 워드 [0..Y-1]에 LSB 정렬되어 패킹됩니다. 빨간색은 비트 [0..Y/3-1], 초록색은 비트 [Y/3..2*Y/3-1], 파란색은 비트 [2*Y/3..3*Y/3-1]을 사용합니다.

    • HSI 컬러 이미지의 경우 H가 빨간색, S가 초록색, I가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • HSL 컬러 이미지의 경우 H가 빨간색, S가 초록색, L이 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • HSV 컬러 이미지의 경우 H가 빨간색, S가 초록색, V가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • YUV 컬러 이미지의 경우 Y가 빨간색, U가 초록색, V가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • YCrCb 컬러 이미지의 경우 Y가 빨간색, Cr이 초록색, Cb가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • LAB 컬러 이미지의 경우 L이 빨간색, A가 초록색, B가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

    • XYZ 컬러 이미지의 경우 X가 빨간색, Y가 초록색, Z가 파란색의 역할을 한다는 점을 제외하면 RGB와 동일한 규칙이 적용됩니다.

  9. Dimension에서 프로토콜이 2D(Area), 1D(Line) 또는 0D(Raw) 이미지를 지원하는지 지정합니다.

  10. Max.Width/Max.Height: 이 선택적 필드를 사용하여 이미지 너비 및 이미지 높이에 대한 제약 조건을 정의할 수 있습니다.

  11. ImgOut 포트가 지원할 프로토콜 개수만큼 6단계부터 10단계까지 반복합니다.

  12. 커스텀 오퍼레이터가 지원할 ImgOut 포트 개수만큼 1단계부터 11단계까지 반복합니다.

GPIO 포트 정의

General Purpose I/O 인터페이스를 통해 커스텀 오퍼레이터의 전용 신호 핀을 연결할 수 있습니다. 모든 GPIO 포트는 입력 또는 출력인 커스텀 오퍼레이터의 핀에 매핑됩니다.

양방향 핀은 지원되지 않습니다. VisualApplets에서 해당 오퍼레이터 포트는 SIGNAL 타입입니다.

  1. GPIO 탭으로 이동합니다.

  2. 다음 항목을 사용하여 필요한 만큼 GPI 및 GPO를 추가합니다. Plus 버튼 .

  3. 필드를 더블클릭하여 특정 GPI 또는 GPO의 이름을 지정합니다.

정의된 GPI 및 GPO는 프로그램 창의 왼쪽 상단 패널에 있는 커스텀 오퍼레이터 그림에 즉시 표시됩니다.

[팁] 양방향 핀 지원되지 않음

핀은 입력 또는 출력 중 하나여야 합니다. 양방향 핀은 지원되지 않습니다.

메모리 포트 정의

커스텀 오퍼레이터는 하나 이상의 메모리 뱅크(DRAM, SRAM 등)에 액세스하도록 설정할 수 있습니다.

모든 메모리 포트에는 쓰기 및 읽기 명령을 위한 FIFO 유사 인터페이스가 있습니다. FIFO는 커스텀 오퍼레이터의 VA 부분에 상주하므로, FIFO가 아닌 흐름 제어만 구현하면 됩니다. FIFO 내용을 커스텀 오퍼레이터에 연결된 메모리 컨트롤러로 전달하는 타이밍은 VisualApplets에 의해 완전히 제어됩니다.

Memory 탭에서 오퍼레이터가 외부 메모리에 액세스하도록 정의할 수 있습니다. 최대 4개의 포트를 지정할 수 있습니다. 오퍼레이터에 필요한 메모리 인터페이스 속성을 지정할 수 있습니다.

[팁] 대상 플랫폼의 메모리 레이아웃 준수

(커스텀 오퍼레이터를 포함하는 앱렛이 실행될) 잠재적 대상 플랫폼의 메모리 레이아웃을 염두에 두십시오.

파라미터 이름

Type

설명

Data Width

정수

데이터 너비

Address Width

정수

주소 너비

Number of Write Flags (Width)

정수

쓰기 액세스 표시용 플래그의 너비입니다. 이 파라미터는 >= 1이어야 합니다.

Number of Read Flags (Width)

정수

읽기 액세스 표시용 플래그의 너비입니다. 이 파라미터는 >= 8이어야 합니다.

SyncMode

String

이 파라미터는 메모리 인터페이스 클록과 디자인 클록의 관계를 나타냅니다. 다음과 같은 값을 사용할 수 있습니다:

SyncToDesignClk – 메모리 인터페이스 포트가 동기화됨 iDesignClk.

SyncToDesignClk2x – 메모리 인터페이스 포트가 동기화됨 iDesignClk2x.

Custom Operator의 Register 정의

Registers 탭에서 커스텀 오퍼레이터가 제공할 쓰기 및 읽기 레지스터를 정의할 수 있습니다. 이러한 각 레지스터는 전용 오퍼레이터 파라미터를 통해 VisualApplets에서 액세스됩니다. (파라미터 이름은 레지스터 이름과 동일합니다.)

  1. Registers 탭으로 이동합니다.

  2. Write Registers에서 커스텀 오퍼레이터에 지정할 쓰기 레지스터를 정의합니다.

  3. 각 쓰기 레지스터에 대한 특정 너비를 정의합니다.

  4. Read Registers에서 커스텀 오퍼레이터에 지정할 읽기 레지스터를 정의합니다.

  5. 각 읽기 레지스터에 대한 특정 너비를 정의합니다.

    관련 오퍼레이터 파라미터가 대화 상자의 왼쪽 하단 패널에 즉시 표시됩니다:

  6. Save를 클릭합니다.

VHDL 블랙박스 및 테스트 벤치 생성

'Defining an Individual Custom Operator via GUI' 섹션에 설명된 대로 모든 세부 정보를 입력하면 실제 VHDL 코딩을 진행할 준비가 된 것입니다. 무엇보다도 먼저 VisualApplets를 통해 VHDL 블랙박스 및 테스트 벤치를 생성해야 합니다.

VHDL 블랙박스 및 테스트 벤치 생성을 트리거하려면:

  1. VisualApplets 프로그램 창의 Library 패널에서 Custom Library 탭으로 이동합니다.

  2. 커스텀 라이브러리를 열고 구현하려는 커스텀 오퍼레이터를 선택합니다.

  3. 오퍼레이터 이름을 마우스 우클릭하고 하위 메뉴에서 Export → VHDL을 선택합니다.

  4. 생성된 VHDL 파일을 저장할 폴더를 지정합니다.

이제 생성이 시작됩니다. 생성이 완료되면 확인 대화 상자가 열립니다. OK를 클릭하여 확인합니다.

지정한 폴더에서 생성된 모든 파일을 확인할 수 있습니다.

Operator Interface Ports

생성된 블랙박스는 GUI를 통해 지정한 모든 포트를 제공합니다('Defining an Individual Custom Operator via GUI' 참조).

이 장에서는 생성된 VHDL 블랙박스에서 이러한 포트가 어떻게 구성되는지에 대한 자세한 설명을 제공합니다.

Clock System, Reset 및 Enable

VisualApplets는 두 개의 클록 도메인을 지원합니다. 기본 디자인 클록이 하나 있고, 그 클록과 위상이 같고 주파수가 두 배인 파생 클록이 하나 있습니다. 따라서 커스텀 오퍼레이터에는 두 개의 클록 입력이 존재합니다. 또한 다음과 같은 Reset 및 Enable 위에서 설명한 입력이 있습니다.

포트

방향

Width

설명

iDesignClk

에서

1

Base design clock

iDesignClk2x

에서

1

Clock sync. to iDesignClk but double frequency

iReset

에서

1

Reset of operator

iEnable

에서

1

Enable processing

Parameter Interface

'Defining an Individual Custom Operator via GUI' 섹션에 설명된 대로 쓰기 레지스터 포트를 정의하면 'Defining an Individual Custom Operator via GUI' 다음과 같은 인터페이스가 생성되며, 여기서 PORTID 은(는) 레지스터 이름이고 PORTIDWidth 은(는) 정의된 레지스터 너비입니다.

포트

방향

Width

설명

ivReg_PORTID_D

에서

PORTIDWidth

Register data

iReg_PORTID_Wr

에서

1

Signal write access

'Defining the Registers of the Custom Operator'에 설명된 대로 읽기 레지스터 포트를 정의하면 그에 따라 다음과 같은 인터페이스가 생성됩니다.

포트

방향

Width

설명

ovReg_PORTID_D

Out

PORTIDWidth

Register data

iReg_PORTID_Rd

에서

1

Signal read access

Image Communication Interfaces

VisualApplets 코어와 커스텀 오퍼레이터 간의 데이터 통신을 위해 'Defining the Image Input Ports'에 설명된 대로 이미지 통신 포트를 구성할 수 있습니다. 통신은 단순한 FIFO 인터페이스와 추가 포맷 식별자 포트를 통해 수행됩니다.

ImgIn 유형의 인터페이스

VisualApplets 코어에서 커스텀 오퍼레이터로 데이터를 전송하기 위한 ImgIn 채널은 다음과 같은 인터페이스를 생성하며, 여기서 PORTID는 해당 포트 유형 이름이고 X는 동일한 종류의 여러 포트를 구분하기 위한 포트 번호입니다.

포트

방향

Width

설명

ivPORTIDXData

에서

PORTIDWidth

Data entering the custom operator

oPORTIDXRead

Out

1

Accept input data

iPORTIDXEndOfLine

에서

1

라인의 끝을 신호로 알립니다. 이 플래그가 활성화되면 데이터에 픽셀 값이 포함되지 않습니다.

iPORTIDXEndOfFrame

에서

1

프레임의 끝을 신호로 알립니다. 이 플래그가 활성화되면 데이터에 픽셀 값이 포함되지 않습니다. 이 플래그는 라인 끝도 함께 신호로 전달될 때만 어서트(assert)됩니다.

iPORTIDXFIFOEmpty

에서

1

Buffer FIFO is empty

ivPORTIDXFIFOCnt

에서

Ceil Log2(PORTIDFIFODepth)

버퍼 FIFO의 단어 수입니다. 이 신호는 다음과 같은 FIFO 플래그를 생성하는 데 사용할 수 있습니다. Almost Empty.

ivPORTIDX_FID_D

에서

Ceil Log2(N)

현재 이미지 데이터 포맷을 알려주는 미리 정의된 파라미터입니다. N은 이 포트에 대해 지정된 이미지 포맷의 수입니다.

아래 그림은 ImgIn 포트에서의 데이터 흐름을 보여줍니다. 포트 이름 구성 요소인 PORTIDX는 ImgIn으로 대체되었습니다. 파형은 3x2 크기의 2차원 프레임 입력을 보여줍니다.

ImgIn 포트가 여러 O-동기(O-synchronous) 입력 포트의 일부인 경우, 모든 포트가 동시에 FIFO 데이터를 소비해야 합니다. 이 경우 모든 포트의 FIFO Fill 레벨이 정확히 일치하므로, 오퍼레이터는 여러 O-동기 입력 중 하나의 Fill 레벨에 따라서만 흐름 제어를 구현하면 됩니다.

ImgOut 타입 인터페이스

사용자 정의 오퍼레이터에서 VisualApplets 코어로 데이터를 전송하기 위한 ImgOut 채널은 다음과 같은 인터페이스로 이어집니다. 여기서 PORTID는 해당 포트 타입 이름이고, X는 동일한 종류의 여러 포트를 구별하기 위한 포트 번호입니다.

포트

방향

Width

설명

ovPORTIDXData

Out

PORTIDWidth

출력 데이터

oPORTIDXValid

Out

1

출력 데이터 유효함

oPORTIDXEndOfLine

Out

1

라인 끝 알림으로 현재 쓰기 액세스를 신호로 보냅니다. 이 경우 쓰기 데이터는 픽셀 데이터로 해석되지 않습니다.

oPORTIDXEndOfFrame

Out

1

프레임 끝 알림으로 현재 쓰기 액세스를 신호로 보냅니다. 이 경우 쓰기 데이터는 픽셀 데이터로 해석되지 않습니다. 이 플래그는 동시에 라인 끝 스트로브와 상관관계가 있어야 합니다.

iPORTIDXFIFOFull

에서

1

버퍼 FIFO가 가득 찼으며, 더 이상의 데이터가 허용되지 않습니다.

ivPORTIDXFIFOCnt

에서

Ceil Log2(PORTIDFIFODepth)

버퍼 FIFO의 단어 수입니다. 이 신호는 다음과 같은 FIFO 플래그를 생성하는 데 사용할 수 있습니다. Almost Full.

ivPORTIDX_FID_D

에서

Ceil Log2(N)

현재 이미지 데이터 포맷을 알려주는 미리 정의된 파라미터입니다. N은 이 포트에 대해 지정된 이미지 포맷의 수입니다.

아래 그림은 ImgOut 포트에서의 데이터 흐름을 보여줍니다. 파형은 3x2 크기의 2차원 프레임 출력을 보여줍니다. ImgOut 포트가 여러 O-동기(O-synchronous) 출력 포트의 일부인 경우, 모든 포트가 동시에 데이터를 출력해야 합니다.

메모리 인터페이스

사용자 정의 오퍼레이터는 최대 4개의 메모리 포트를 갖도록 설정할 수 있습니다. 생성된 인터페이스의 I/O 포트에는 접미사 X가 붙으며, 여기서 X는 메모리 포트의 인덱스입니다.

이름

방향

Width

설명

ovMemWrDataX

Out

MemDataWidthX

VisualApplets 코어를 통해 메모리로 출력되는 쓰기 데이터

ovMemWrFlagX

Out

MemWrFlagWidthX

쓰기 플래그 출력

ovMemWrAddrX

Out

MemAddrWidthX

쓰기 주소

oMemWrAddrValidX

Out

1

쓰기 명령 발행

oMemWrPriorityX

Out

1

이 쓰기 포트에 대한 우선순위 요청

iMemWrAlmostFullX

에서

1

단일 추가 쓰기 명령만 허용될 수 있음

iMemWrFullX

에서

1

관련 FIFO가 가득 찼으므로 쓰기 명령이 허용되지 않음

iMemWrEmptyX

에서

1

쓰기 명령용 FIFO가 비어 있음

ivMemWrCntX

에서

4

버퍼링된 쓰기 명령 수

ivMemWrFlagX

에서

MemWrFlagWidthX

VisualApplets 코어에서 출력되는 쓰기 플래그

iMemWrFlagValidX

에서

1

쓰기 플래그 입력 유효함 – 다음을 신호로 알림 iMemWrFlagX 이(가) 유효하며, 이는 해당하는 항목으로 표시된 쓰기 액세스가 oMemWrFlagX 실행되었습니다.

ovMemRdFlagX

Out

MemRdFlagWidthX

Read 플래그

ovMemRdAddrX

Out

MemAddrWidthX

Read 주소

oMemRdAddrValidX

Out

1

Read 명령 발행

oMemRdPriorityX

Out

1

이 Read 포트에 대한 우선순위 요청

iMemRdAlmostFullX

에서

1

추가적인 단일 Read 명령만 수락될 수 있음

iMemRdFullX

에서

1

관련 FIFO가 가득 차 있어 Read 명령이 수락되지 않음

iMemRdEmptyX

에서

1

Read 명령용 FIFO가 비어 있음

ivMemRdCntX

에서

4

버퍼링된 Read 명령 수

ivMemRdFlagX

에서

MemRdFlagWidthX

Read 플래그 입력 – 다음에만 유효함 iMemRdDataValidX 가 어설션(asserted)됨

ivMemRdDataX

에서

MemDataWidthX

Read 데이터 입력

iMemRdDataValidX

에서

1

Read 데이터 유효

위 그림은 Memory 인터페이스 프로토콜의 파형을 보여줍니다.

General Purpose I/O 핀

커스텀 오퍼레이터의 인터페이스 설명(섹션 'Defining an Individual Custom Operator via GUI')에 정의된 모든 GPIO 입력 또는 출력 신호는 생성된 오퍼레이터 인터페이스에 해당하는 입력 또는 출력 포트를 갖습니다. 범용 핀이 선언되면 다음과 같은 포트가 생성됩니다:

  • iSig_이름 다음이라는 이름의 GPIO 입력 신호용 이름.

  • oSig_이름 다음이라는 이름의 GPIO 출력 신호용 이름.

VHDL 시뮬레이션 및 검증

커스텀 오퍼레이터 모듈이 포함된 VisualApplets 디자인을 시뮬레이션하기 위해, VisualApplets는 커스텀 오퍼레이터에 연결되는 인터페이스를 위한 시뮬레이션 테스트 벤치를 생성합니다.

각 인터페이스 포트는 File I/O에 의해 구동되며 독립적으로 에뮬레이션됩니다. 시뮬레이션 엔티티는 다음 요소들로 구성됩니다:

  • 레지스터 액세스 에뮬레이션. 자극(stimuli) 파일에 따라 일련의 레지스터를 쓰고 읽을 수 있습니다.

  • ImgIn 유형의 포트에 연결된 프레임 소스용 에뮬레이터. 파일의 자극을 받아 이러한 종류의 모듈은 프레임 데이터를 ImgIn으로 출력합니다.

  • ImgOut 유형의 포트에 연결된 프레임 싱크용 에뮬레이터. 이 종류의 모듈은 ImgOut에 연결된 오퍼레이터를 에뮬레이트합니다. 모듈은 수신된 데이터를 파일에 씁니다.

  • Memory 포트 에뮬레이터.

  • GPIO 에뮬레이터. 각 입력용 GPIO 신호는 파일에 의해 구성된 신호Generator에 의해 구동됩니다. 각 출력용 GPIO 신호는 모니터링되며 신호 변경 사항이 보고서 파일에 기록됩니다.

시뮬레이션 프레임워크

RTL 레벨 시뮬레이션을 위해 VisualApplets은 다음 이름의 패키지를 포함하는 VHDL 파일을 생성합니다. CustomOperator_<OPERATORNAME> 여기서 <OPERATORNAME> 은(는) 지정된 오퍼레이터 이름입니다.

이 패키지에는 다음 컴포넌트가 포함됩니다. <OPERATORNAME> 및 <OPERATORNAME>_TB 여기서 후자는 VisualApplets 디자인과 커스텀 오퍼레이터 간의 인터페이스에 대한 테스트 벤치입니다. 다음은 다음과 같은 간단한 커스텀 오퍼레이터에 대해 생성된 코드를 보여줍니다. RegExample 읽기 및 쓰기 레지스터 포트로만 구성된(Ctrl 및 Status), 각각 4비트 너비:

 
component 
RegExample port(
  iDesignClk: in std_logic := '0';
  iDesignClk2x: in std_logic := '0';
  iReset: in std_logic := '0';
  iEnable: in std_logic := '0';
  ivReg_Ctrl_D: in std_logic_vector(3 downto 0);
  iReg_Ctrl_Wr: in std_logic;
  ovReg_Status_D: out std_logic_vector(3 downto 0);
  iReg_Status_Rd: in std_logic
);
end component;

component 
RegExample_TB generic(
  DesignClkPeriod: time := 16 ns;
  Register_StimuliFileName: string := ""
);
end component;
 

테스트 벤치는 커스텀 오퍼레이터의 인스턴스를 생성하고 각 인터페이스 포트에 프로토콜 에뮬레이션 모듈을 연결합니다. 다음 섹션에서는 다양한 종류의 에뮬레이터, 자극 파일을 통해 제어하는 방법, 출력 파일이 생성되는 방법을 설명합니다.

Register Interface 에뮬레이션

생성된 테스트 벤치는 레지스터 액세스 인터페이스용 에뮬레이터를 구현합니다. 에뮬레이터는 단일 프로세스로 디자인을 주소 지정하도록 구성됩니다. 쓰기 및 읽기 레지스터의 주소는 0x4에서 시작하며, 레지스터 주소는 지정된 커스텀 오퍼레이터 컴포넌트(위의 예제 컴포넌트와 같은)의 레지스터 인터페이스 포트 시퀀스에 따라 1씩 증가합니다. RegExample). 읽기 및 쓰기용 레지스터 주소는 독립적으로 카운트됩니다. 에뮬레이터는 엔티티 파라미터에 의해 설정된 텍스트 파일에 의해 구동됩니다. Register_StimuliFileName 위의 VHDL 코드에 제공된 바와 같습니다.

자극 파일에는 다음 명령이 포함될 수 있습니다.

명령

설명

REM

나머지 줄은 주석입니다.

GRS

글로벌 리셋 에뮬레이션

PRS

프로세스 리셋 에뮬레이션. 이 명령의 구문은 다음과 같습니다. PRS <procNr> 여기서 파라미터 <procNr> 은(는) 항상 0이어야 합니다.

PEN

프로세스 활성화. 구문은 다음과 같습니다. PEN <procNr> <value> (각각 <procNr> 은(는) 항상 0이고 <value> 은(는) 활성화 상태를 신호로 전달합니다.

WCK

지정된 클럭 사이클 수만큼 대기합니다. 구문은 다음과 같습니다. WCK <clock_ticks> (각각 <clock_ticks> 16진수 형식으로 클럭 틱 수를 제공합니다.

WRR

레지스터에 쓰기: WRR <wrRegAddr> <value> 파라미터: <wrRegAddr>: 레지스터 주소(16진수) <value>: 16진수 레지스터 값

RDR

레지스터 읽기: RDR <rdRegAddr> (각각 <wrRegAddr> 은(는) 레지스터 주소(16진수)입니다.

모든 명령어의 마지막 파라미터 뒤에는 #(으)로 시작하는 주석을 추가할 수 있습니다.

다음 코드는 위에서 설명한 테스트 벤치에 따라 레지스터에 접근하는 예시 자극 파일입니다. RegExample_TB:

REM ************************************************************ 
REM Command formats:
REM GRS	-> Global reset
REM GEN <value>	-> Set global enable to <value>
REM PRS <procID>	-> Reset process <procID> (0 .. F) REM PEN <procID> <value>	
  -> Set enable of process <procID> to
<value>
REM WCK <clk_ticks>	-> Wait for <clk_ticks> clock cycles REM WRR <wrRegAddr> <value> 
  -> Write <value> to register <wrRegAddr> REM RDR <rdRegAddr>	-> Read from register <rdRegAddr>
REM ************************************************************

WCK	0004		#	wait for 4 clock cycles
GRS			#	global reset
GEN	1		#	set global enable
WCK	0001		#	wait for 1 clock tick
PRS	0		#	reset process 0
PEN	0 1		#	set enable of process 0
WCK	0002		#	wait for 2 clock ticks
WRR	0004	0000000A	#	write 0xA to address 0x4
WCK	0002		#	wait for 2 clock ticks
RDR	0004		#	read from address 0x4
WCK	FFFF			       
      

ImgIn 인터페이스 에뮬레이션

다음 유형의 이미지 통신 인터페이스 에뮬레이션은 ImgIn 커스텀 오퍼레이터로 입력되는 데이터 시퀀스에 대한 정보를 제공하는 자극 파일에 의해 구동됩니다. 존재하는 모든 ImgIn 포트에 대해 테스트 벤치는 제네릭(generic) <PORTIDX>_StimuliFileName where <PORTIDX>은(는) 해당 이미지 입력 포트 유형 이름 뒤에 포트 번호가 붙은 형식입니다. 지정된 파일 내의 각 라인은 다음 구문을 따라야 합니다.

 <Command> <Data> <EndOfLine> <EndOfFrame> <DataValid>            
      

여기서 <Command> 은(는) 3글자 명령어이며, <Data> 은(는) 16진수 데이터 워드를 제공하며, 나머지 3개의 파라미터는 이미지 프로토콜 플래그에 해당합니다.

다음 표는 사용 가능한 명령어를 설명합니다.

명령

설명

DAT

데이터 명령어입니다. 이 명령어는 포트에서 입력될 데이터를 제공합니다. ivPORTIDXData 및 관련 이미지 프로토콜 플래그 포트.

WCK

대기 명령어입니다. 파라미터 <Data> 은(는) 명령어 인터프리터가 일시 중지하는 클록 틱 수를 제공합니다.

FID

FID 입력 설정. 파라미터 <Data> 은(는) 포트가 설정될 ivPORTIDX_FID_D 값을 제공합니다.

모든 명령어 라인에는 #(으)로 시작하는 주석을 추가할 수 있습니다.

다음 코드는 3x2 이미지의 입력을 유발하는 자극 파일의 예시입니다.

      
FID	00000001	0	0	0 #Format: Cmd Data(hex) EndOfLine EndOfFrame DataValid
DAT	00000000	0	0	0
DAT	0000001a	0	0	1
DAT	0000001b	0	0	1
DAT	0000001c	0	0	1
DAT	00000000	1	0	1
WCK	00000004	0	0	0
DAT	0000002a	0	0	1
DAT	0000002b	0	0	1

DAT	0000002c	0	0	1
DAT	00000000	1	1	1
WCK	0000FFFF	0	0	0  
      

ImgOut 인터페이스 에뮬레이션

다음 유형의 이미지 통신 인터페이스 에뮬레이션은 ImgOut 은(는) FID 상태 시퀀스에 대한 정보가 제공되는 자극 파일에 의해 구동됩니다. 존재하는 모든 ImgOut 포트에 대해 VA_Design_Emulator 엔터티는 제네릭을 가집니다. <PORTIDX>_StimuliFileName 여기서 <PORTIDX> 해당 이미지 출력 포트 유형 이름 뒤에 포트 번호가 붙은 형식입니다. 구문은 다음과 같은 stimuli의 경우와 정확히 동일합니다. ImgIn 인터페이스는 다음과 같은 예외가 있습니다. 사용 가능한 DAT 명령이 없습니다. 간단한 stimuli 파일은 다음과 같을 수 있습니다:

WCK 00000010 0 0 0    #Format: Command Data(hex)
FID 00000001 0 0 0
WCK 0000FFFF 0 0 0 
    

파라미터 <EndOfLine>,<EndOfFrame> 및 <DataValid> 은(는) 실제로 의미가 없습니다.

The ImgOut 생성된 테스트 벤치에 있는 인터페이스 에뮬레이터는 수신된 데이터를 파일에 기록합니다. 이를 위해 테스트 벤치 엔티티에는 제네릭이 있습니다. <PORTIDX>_DumpFileName. 시뮬레이션 중에 지정된 이름의 파일이 생성되고 데이터가 기록됩니다. DAT 및 WCK 인터페이스 에뮬레이터용 stimuli 파일 형식과 정확히 일치하는 형식의 명령입니다. ImgIn 인터페이스 에뮬레이터입니다.

Emulation of Memory Communication

커스텀 연산자가 메모리 인터페이스를 구현하는 경우, 테스트 벤치는 메모리 에뮬레이션 모듈을 해당 인터페이스 포트에 연결합니다. 커스텀 연산자는 메모리 인터페이스의 특정 타이밍(예: 읽기 데이터가 반환될 때까지의 시간)에 의존하지 않을 수 있습니다. 이는 완전히 VisualApplets에 의해 제어되며 플랫폼마다, 심지어 서로 다른 디자인 간에도 달라질 수 있기 때문입니다.

GPIO 에뮬레이션

전용 입력 신호의 에뮬레이션은 stimuli 파일에 의해 구동되며 각 신호마다 독립적으로 수행됩니다. 여기에는 신호 상태 시퀀스에 대한 정보가 제공됩니다. stimuli 파일은 아래에 설명된 여러 개의 명령으로 구성될 수 있습니다. 존재하는 모든 출력 신호 포트에 대해 테스트 벤치 엔티티는 제네릭을 가집니다. iSig_<NAME>_StimuliFileName 여기서 <NAME> 은(는) 관련 포트 이름입니다.

다음 표는 사용 가능한 명령어를 설명합니다.

명령

설명

SET

신호 설정. 이 명령은 포트의 출력이 설정될 iSig_이름 신호 상태를 제공합니다. 다음 명령은 한 클록 틱 후에 실행됩니다. 구문은 다음과 같습니다: SET <value> 여기서 <value> 은(는) 0 또는 1일 수 있습니다.

WCK

대기 명령입니다. 구문은 다음과 같습니다: WCK <ticks> 여기서 매개변수 <ticks> 은(는) 신호가 일정한 상태로 유지되는 클록 틱 수를 제공합니다.

RST

처음부터 다시 시작. 명령 해석기가 stimuli 파일의 첫 번째 줄부터 다시 시작합니다. 이 명령에는 매개변수가 없습니다. 이 명령은 간격 없이 루프를 구성할 수 있도록 동일한 클록 틱에서 파일의 첫 번째 명령을 실행합니다.

STP

현재 상태에서 중지. 명령 해석기가 중지되고 시뮬레이션이 끝날 때까지 현재 신호 상태가 일정하게 유지됩니다. 이 명령에는 매개변수가 없습니다.

모든 명령어 라인에는 #(으)로 시작하는 주석을 추가할 수 있습니다.

다음 코드는 커스텀 연산자 입력 신호가 5클록 주기 동안 Low, 7클록 주기 동안 High로 토글되도록 하는 stimuli 파일의 예시입니다(동기화 대상: iDesignClk):

SET 0	   # deassert output
WCK 0004	# wait for 4 clock cycles
SET 1	   # assert output
WCK 0006	# wait for 6 clock cycles
RST	     # restart from begin
      

전용 출력 신호는 덤프 파일을 기록하여 모니터링됩니다. oSig_<NAME>_DumpFileName 여기서

<NAME> 은(는) 관련 포트 이름입니다. 파일은 다음으로 구성됩니다. SET 및 WCK 명령은 전용 입력 신호용 stimuli 파일의 명령과 정확히 일치합니다.

Defining the Custom Operator’s Software Interface

커스텀 연산자를 VisualApplets에 완전히 통합하려면 고수준 시뮬레이션 컴포넌트를 제공해야 합니다. 고수준 시뮬레이션 컴포넌트는 미리 정의된 내보내기 C-Function 세트가 포함된 동적 링크 라이브러리로 컴파일되어야 합니다. General → Simulation Library 탭에서 이 파일을 연산자 사양에 추가합니다:

VisualApplets 내에서 고수준 시뮬레이션을 수행하려면 다음 함수를 내보내야 합니다.

int SimulateOPNAME (va_custom_op_sim_handle simHandle)
        

여기서 OPNAME은 커스텀 오퍼레이터의 이름입니다.

고수준 시뮬레이션은 다음 요구사항에 따라 수행되어야 합니다:

  • 프레임 기반 시뮬레이션 - 각 이미지 입력 포트에서 하나 이상의 프레임을 사용할 수 있는지 여부를 조회할 수 있습니다. 시뮬레이션 시작에 필요한 모든 포트가 프레임을 제공할 수 있는 경우, 관련 출력 프레임을 계산하고 적절한 함수 호출을 통해 출력해야 합니다. 1차원 이미지 데이터의 경우 데이터 스트림이 자동으로 프레임으로 분할되며 2D 데이터와 마찬가지로 시뮬레이션됩니다.

  • 비트 단위 정확한 시뮬레이션 – 결과 프레임의 계산은 비트 단위로 정확해야 합니다. 즉, 출력 데이터는 하드웨어 구현에 의해 생성된 데이터와 정확히 일치해야 합니다.

  • 흐름의 일관성 유지 – 오퍼레이터 입력 포트가 서로 동기화된 경우 입력 이미지를 그에 따라 가져와야 합니다. 여러 출력이 정의된 경우 이미지를 동시에 출력해야 합니다. 시뮬레이션 함수의 경우, 이는 한 출력 링크로 프레임이 출력될 때 시뮬레이션 함수가 반환되기 전에 다른 모든 출력 링크로도 프레임이 출력되어야 함을 의미합니다.

오퍼레이터의 동작은 일반적으로 오퍼레이터 파라미터 세트에 따라 달라지므로, 이러한 파라미터는 다음 인터페이스를 통해 조회할 수 있습니다:

번호.

기능

설명

1

vaSi_CustomOp_GetParamValue()

오퍼레이터 파라미터의 값을 가져옵니다.

커스텀 오퍼레이터의 이미지 데이터를 가져오고, 생성하며, 저장하기 위해 VisualApplets에서 여러 함수가 제공됩니다:

번호.

기능

설명

1

vaSi_CustomOp_GetInputImage()

ImgIn 포트에서 사용 가능한 이미지를 가져옵니다.

2

vaSi_CustomOp_PutOutputImage()

이미지를 ImgOut 포트로 출력합니다.

3

vaSi_CustomOp_InputHasImage()

ImgIn 포트에서 이미지를 전달할 수 있는지 여부를 조회합니다.

4

vaSi_CustomOp_OutputReady()

ImgOut 포트에서 이미지를 받을 수 있는지 여부를 조회합니다.

5

vaSi_CustomOp_CreateImage()

새 이미지를 생성합니다.

6

vaSi_CustomOp_DeleteImage()

이미지를 삭제합니다.

7

vaSi_CustomOp_StoreImage()

나중에 이미지를 참조하는 데 사용할 수 있는 이름을 부여하여 오퍼레이터 인스턴스의 로컬 스토리지에 이미지를 저장합니다.

8

vaSi_CustomOp_GetStoredImagesCount()

오퍼레이터 인스턴스 내에 저장된 이미지의 개수를 조회합니다.

9

vaSi_CustomOp_GetStoredImage()

인덱스로 저장된 이미지를 가져옵니다.

10

vaSi_CustomOp_GetNameOfStoredImage()

인덱스로 저장된 이미지의 이름을 가져옵니다.

11

vaSi_CustomOp_GetStoredImageByName()

이름으로 저장된 이미지를 가져옵니다.

12

vaSi_CustomOp_CreateImageFormat()

지정된 포트와 연관된 포맷으로 초기화되는 새로운 이미지 포맷 핸들을 생성합니다.

13

vaSi_CustomOp_CopyImageFormat()

지정된 포맷의 복사본인 새 이미지 포맷을 생성합니다.

14

vaSi_CustomOp_DeleteImageFormat()

이전에 생성된 이미지 포맷 핸들을 삭제합니다.

이미지 핸들을 통해 이미지를 조작하기 위해 다음 함수들을 사용할 수 있습니다:

번호.

기능

설명

1

vaSi_Image_GetFormat()

이미지 포맷을 가져옵니다.

2

vaSi_Image_SetProperty()

프레임의 속성(예: 높이)을 설정합니다.

3

vaSi_Image_GetProperty()

프레임의 속성을 가져옵니다.

4

vaSi_Image_SetPixelValue()

픽셀 성분 값을 설정합니다.

5

vaSi_Image_GetPixelValue()

픽셀 성분 값을 가져옵니다.

6

vaSi_Image_SetLineLength ()

라인의 개별 길이를 설정합니다.

7

vaSi_Image_GetLineLength ()

개별 라인의 길이를 가져옵니다.

이미지 포맷은 다음 함수를 통해 조작할 수 있습니다:

번호.

기능

설명

1

vaSi_ImageFormat_SetProperty()

이미지 포맷 속성(예: 최대 너비)을 설정합니다.

2

vaSi_ImageFormat_GetProperty()

이미지 포맷 속성을 가져옵니다.

시뮬레이션 함수는 다음 함수를 사용하여 VisualApplets 시뮬레이션 시스템에 상태 메시지(즉, 오류 메시지)를 주입할 수 있습니다:

번호.

기능

설명

1

vaSi_CreateStatusMessage()

상태 메시지를 생성합니다.

2

vaSi_SetStatusMessageProperty()

상태 메시지의 속성(예: 심각도)을 설정합니다.

3

vaSi_SendStatusMessage()

상태 메시지를 시뮬레이션 엔진에 전송합니다.

데이터 통신

정보를 조회하고 파라미터를 구성하려면 소프트웨어 인터페이스를 통해 데이터를 교환해야 합니다. 인터페이스 함수를 단순하게 유지하면서도 타입 안전한 인터페이스를 제공하기 위해 데이터 추상화 메커니즘이 구현되어 있습니다. 타입이 다른 데이터를 통신해야 할 때마다 va_data 라는 데이터 구조가 사용되며, 이는 데이터에 대한 참조와 기본 데이터 타입에 대한 정보를 포함합니다. 이 데이터 구조는 사용자가 생성하지만 아래에 나열된 전용 함수들로 구성됩니다. 다음 표는 이 메서드에서 처리하는 데이터 타입을 보여줍니다:

Data Type

설명

VA_ENUM

32비트 정수로 제공되는 enum 항목

VA_INT32

32비트 부호 있는 정수

VA_UINT32

32비트 부호 없는 정수

VA_INT64

64비트 부호 있는 정수

VA_UINT64

64비트 부호 없는 정수

VA_DOUBLE

부동 소수점 수, 배정밀도

VA_INT32_ARRAY

32비트 부호 있는 정수 배열

VA_UINT32_ARRAY

32비트 부호 없는 정수 배열

VA_INT64_ARRAY

64비트 부호 있는 정수 배열

VA_UINT64_ARRAY

64비트 부호 없는 정수 배열

VA_DOUBLE_ARRAY

배정밀도 부동소수점 숫자 배열

VA_STRING

다음 형식으로 제공되는 문자열 const char*

이전에 생성된 va_data 구조체 (vaData)를 사용한 데이터 통신 설정은 다음 함수를 통해 수행됩니다.

  
va_data* va_data_enum(va_data* vaData, int32_t *data) 
va_data* va_data_int32(va_data* vaData, int32_t *data) 
va_data* va_data_uint32(va_data* vaData, uint32_t *data) 
va_data* va_data_int64(va_data* vaData, int64_t *data) 
va_data* va_data_uint64(va_data* vaData, uint64_t *data) 
va_data* va_data_double(va_data* vaData, double *data) 
va_data* va_data_int32_array(va_data* vaData, int32_t *data, size_t elementCount)
va_data* va_data_uint32_array (va_data* vaData, uint32_t *data, size_t elementCount)
va_data* va_data_int64_array (va_data* vaData, int64_t *data, size_t elementCount)
va_data* va_data_uint64_array (va_data* vaData, uint64_t *data, size_t elementCount)
va_data* va_data_double_array (va_data* vaData, double *data, size_t elementCount)
va_data* va_data_string(va_data* vaData, char data*, size_t strSize)
va_data* va_data_const_string(va_data* vaData, const char **data)
      

문자열 통신 방식에는 다음 두 가지 옵션이 있습니다.

  1. char 배열 제공 va_data_string(). 그러면 조회된 문자열 데이터가 해당 배열로 복사됩니다.

  2. 포인터 제공 const char*. 그러면 해당 형식의 정보가 조회될 때 내부 문자열 표현에 대한 포인터가 반환됩니다. VA_STRING 이 방식을 사용할 때는 반환된 문자열의 유효 기간을 확인하십시오.

예제 코드: 다음은 이미지 너비를 조회하기 위한 코드 예제입니다.

 
uint32_t imgWidth; 
va_data 
va_imgWidth;
va_data_double(&va_imgWidth,&imgWidth);

vaSi_Image_GetProperty(imageHandle, "Width", &va_imgWidth);  
      

그 후 변수 imgWidth 에 요청된 정보가 포함됩니다.

Detailed Description of Interface Functions

다음은 지정된 시뮬레이션 인터페이스 함수의 매개변수 및 반환값에 대한 상세한 설명입니다.

기능

vaSi_CustomOp_GetParamValue

구문

int vaSi_CustomOp_GetParamValue (va_custom_op_sim_handle simHandle, const char* paramName, va_data *value)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

파라메터 이름입니다.

Parameter 3

조회된 값의 반환 파라메터입니다.

설명

지정된 이름을 가진 파라메터의 값을 반환합니다.

반환 값

0: 조회된 데이터 값

<0: Cannot query parameter

기능

vaSi_CustomOp_GetInputImage

구문

int vaSi_CustomOp_GetInputImage (va_custom_op_sim_handle simHandle, const char* portName, va_image_handle *image)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

오퍼레이터 포트 이름입니다.

Parameter 3

이미지 핸들의 반환 파라메터입니다.

설명

지정된 포트에서 오퍼레이터로 입력되는 이미지를 가져와 해당 이미지를 참조하는 핸들을 반환합니다. 시뮬레이션 함수에서 반환되기 전에 이 이미지는 다음을 호출하여 저장되거나 vaSi_CustomOp_StoreImage() 다음을 호출하여 삭제되어야 합니다. vaSi_CustomOp_DeleteImage().

반환 값

0: OK

<0 : Cannot get image

기능

vaSi_CustomOp_PutOutputImage

구문

int vaSi_CustomOp_PutOutputImage (va_custom_op_sim_handle simHandle, const char* portName, va_image_handle imageHandle)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

오퍼레이터 포트 이름입니다.

Parameter 3

이미지 핸들입니다.

설명

지정된 포트로 이미지를 출력합니다.

반환 값

0: 작업이 성공적으로 완료되었습니다.

<0: Cannot output image

기능

vaSi_CustomOp_InputHasImage

구문

bool vaSi_CustomOp_InputHasImage (va_custom_op_sim_handle simHandle, const char* portName)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

오퍼레이터 입력 포트 이름입니다.

설명

지정된 이름을 가진 포트에 사용 가능한 입력 이미지가 있는지 여부를 반환합니다.

반환 값

true: 이미지 사용 가능

false: 사용 가능한 이미지 없음

기능

vaSi_CustomOp_OutputReady

구문

bool vaSi_CustomOp_OutputReady (va_custom_op_sim_handle simHandle, const char* portName)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

오퍼레이터 출력 포트 이름입니다.

설명

지정된 이름을 가진 출력 포트가 이미지를 받을 수 있는지 여부를 반환합니다.

반환 값

true: 다음 이미지 출력 준비 완료

false: 이미지를 받을 출력 준비가 되지 않음

기능

vaSi_CustomOp_CreateImage

구문

int vaSi_CustomOp_CreateImage (va_custom_op_sim_handle simHandle, va_image_format_handle format, va_image_handle * newImage)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

새 이미지의 이미지 포맷입니다.

Parameter 3

이미지 핸들의 반환 파라메터입니다.

설명

Parameter 2에서 지정한 포맷을 기반으로 빈 이미지를 생성합니다. 시뮬레이션 함수에서 반환되기 전에 이 이미지는 다음을 호출하여 저장되어야 합니다. vaSi_CustomOp_StoreImage() 다음을 호출하여 삭제되어야 합니다. vaSi_CustomOp_DeleteImage().

반환 값

0: OK

<0 : Could not create image

기능

vaSi_CustomOp_DeleteImage

구문

int vaSi_CustomOp_DeleteImage (va_custom_op_sim_handle simHandle, va_image_handle imageHandle)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

삭제할 이미지의 Handle입니다.

설명

지정한 이미지 Handle이 참조하는 이미지를 삭제합니다.

반환 값

0: 작업이 성공적으로 완료되었습니다.

<0: Error during deleting image

기능

vaSi_CustomOp_StoreImage

구문

int vaSi_CustomOp_StoreImage (va_custom_op_sim_handle simHandle, va_image_handle imageHandle, const char* storeName)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

이미지 핸들입니다.

Parameter 3

이미지를 저장할 때 사용할 이름입니다. 나중에 이 이름으로 이미지를 조회할 수 있습니다.

설명

Operator 시뮬레이션 인스턴스의 로컬 스토리지에 이미지를 저장합니다.

반환 값

0: 작업이 성공적으로 완료되었습니다.

VA_SIM_CANNOT_STORE_IMAGE: 이미지 저장을 생성할 수 없습니다.

VA_SIM_STORE_NAME_ALREADY_USED: Name “storeName” 은(는) 현재 저장된 이미지에 이미 사용 중입니다.

기능

vaSi_CustomOp_GetStoredImagesCount

구문

int vaSi_CustomOp_GetStoredImagesCount (va_custom_op_sim_handle simHandle, unsigned int *count)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

이미지 수를 위한 반환 파라미터입니다.

설명

Operator 시뮬레이션 인스턴스 내에 저장된 이미지 수를 반환합니다.

반환 값

0: OK

<0: Can’t query information.

기능

vaSi_CustomOp_GetStoredImage

구문

int vaSi_CustomOp_GetStoredImage (va_custom_op_sim_handle simHandle, unsigned int index, va_image_handle *retImage)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

저장된 이미지 배열 내의 인덱스입니다.

Parameter 3

이미지 핸들의 반환 파라메터입니다.

설명

이전에 저장된 이미지를 가져옵니다. 해당 이미지는 이미지 스토리지에서 제거됩니다. 시뮬레이션 함수에서 반환하기 전에, 이 이미지는 다음을 호출하여 다시 저장하거나 vaSi_CustomOp_StoreImage() 다음을 호출하여 vaSi_CustomOp_DeleteImage().

반환 값

0: OK

<0 : Could not get image

기능

vaSi_CustomOp_GetNameOfStoredImage

구문

const char* vaSi_CustomOp_GetNameOfStoredImage (va_custom_op_sim_handle simHandle, unsigned int index)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

저장된 이미지 배열 내의 인덱스입니다.

설명

이미지 이름의 문자열을 반환합니다.

반환 값

Not NULL : 값은 이미지 이름 문자열입니다.

NULL : 이름을 조회할 수 없습니다.

기능

vaSi_CustomOp_GetStoredImageByName

구문

int vaSi_CustomOp_GetStoredImageByName (va_custom_op_sim_handle simHandle, const char* storeName, va_image_handle *retImage)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

이미지가 저장된 이름입니다.

Parameter 3

이미지 핸들의 반환 파라메터입니다.

설명

지정한 스토리지 이름으로 이전에 저장된 이미지를 가져옵니다. 해당 이미지는 이미지 스토리지에서 제거됩니다. 시뮬레이션 함수에서 반환하기 전에, 이 이미지는 다음을 호출하여 다시 저장해야 합니다. vaSi_CustomOp_StoreImage() 다음을 호출하여 삭제되어야 합니다. vaSi_CustomOp_DeleteImage().

반환 값

0: OK

<0 : Could not get image

기능

vaSi_CustomOp_CreateImageFormat

구문

int vaSi_CustomOp_CreateImageFormat (va_custom_op_sim_handle simHandle, const char* portName, va_image_format_handle* createdFormat)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

오퍼레이터 포트 이름입니다.

Parameter 3

포맷 Handle에 대한 반환 포인터입니다.

설명

새 이미지 포맷 객체를 생성하고 해당 Handle을 반환합니다. 포맷은 지정된 이름을 가진 포트의 포맷으로 초기화됩니다. 시뮬레이션 함수에서 반환하기 전에 다음을 호출하여 포맷을 삭제해야 합니다. vaSi_CustomOp_DeleteImageFormat().

반환 값

0: OK

<0 : Could not create format

기능

vaSi_CustomOp_CopyImageFormat

구문

int vaSi_CustomOp_CopyImageFormat (va_custom_op_sim_handle simHandle, va_image_format_handle formatHandle, va_image_format_handle *createdFormat)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

복사 중인 포맷의 Handle입니다.

Parameter 3

포맷 Handle을 위한 반환 파라미터입니다.

설명

새 이미지 포맷 객체를 생성하고 해당 Handle을 반환합니다. 포맷은 제공된 포맷으로 초기화됩니다. 시뮬레이션 함수에서 반환하기 전에 다음을 호출하여 포맷을 삭제해야 합니다. vaSi_CustomOp_DeleteImageFormat().

반환 값

Not NULL : 값은 포맷 Handle입니다.

NULL : 형식을 생성할 수 없습니다

기능

vaSi_CustomOp_DeleteImageFormat

구문

int vaSi_CustomOp_DeleteImageFormat (va_custom_op_sim_handle simHandle, va_image_format_handle formatHandle)

매개변수 1

연산자 시뮬레이션 함수에 제공되는 시뮬레이션 핸들입니다.

Parameter 2

삭제 중인 형식의 핸들입니다.

설명

지정된 형식 핸들이 참조하는 이미지 형식 객체를 삭제합니다.

반환 값

0: OK

<0 : Could not delete format

기능

vaSi_Image_GetFormat

구문

int vaSi_Image_GetFormat (va_image_handle imageHandle, va_image_format_handle formatHandle)

매개변수 1

이미지 핸들입니다.

Parameter 2

이미지 형식으로 설정될, 이전에 생성된 형식의 핸들입니다.

설명

이미지 핸들이 참조하는 이미지의 형식을 조회합니다.

반환 값

0: 작업이 성공적으로 완료되었습니다.

<0: Cannot query format

기능

vaSi_Image_SetProperty

구문

int vaSi_Image_SetProperty (va_image_handle imageHandle, const char* propType, const va_data* propData)

매개변수 1

이미지 핸들입니다.

Parameter 2

설정할 Property를 식별하는 문자열입니다.

Parameter 3

새로운 Property를 설정하는 데 사용할 데이터 구조체에 대한 포인터입니다.

설명

이미지 핸들이 참조하는 이미지의 Property를 설정합니다. 이 함수를 통해 다음 Property들을 설정할 수 있습니다:

ImgWidth: 이미지 너비 설정(propData 은(는) VA_UINT32 유형을 가짐)

ImgHeight: 이미지 높이 설정(propData 유형 가짐: VA_UINT32)

반환 값

0 : Property가 성공적으로 설정됨

VA_SIM_INVALID_PARAMETER: Property를 식별할 수 없음

VA_SIM_INVALID_TYPE: Property 데이터의 형식이 잘못됨

VA_SIM_INVALID_VALUE: Property 데이터에 유효하지 않은 값이 포함됨

기능

vaSi_Image_GetProperty

구문

int vaSi_Image_GetProperty (va_image_handle imageHandle, const char* propType, va_data* propData)

매개변수 1

이미지 핸들입니다.

Parameter 2

조회할 Property를 식별하는 Enum 값입니다.

Parameter 3

데이터 통신에 사용할 데이터 구조체에 대한 포인터입니다.

설명

이미지 핸들이 참조하는 이미지의 Property들을 조회합니다. 다음 Property들을 사용할 수 있습니다:

ImgWidth: 이미지 너비 가져오기(propData 유형 가짐: VA_UINT32)

ImgHeight: 이미지 높이 가져오기(propData 유형 가짐: VA_UINT32)

반환 값

0 : Property가 성공적으로 조회됨

VA_SIM_INVALID_PARAMETER: Property를 식별할 수 없음

VA_SIM_INVALID_TYPE: Property 데이터의 형식이 잘못됨

VA_SIM_INVALID_VALUE: Property 데이터에 유효하지 않은 값이 포함됨

기능

vaSi_Image_SetLineLength

구문

int vaSi_Image_SetLineLength (va_image_handle imageHandle, unsigned int line, unsigned int length)

매개변수 1

이미지 핸들입니다.

Parameter 2

라인 번호입니다.

Parameter 3

라인 길이입니다.

설명

참조된 라인의 길이를 전체 이미지 너비와 다를 수 있는 개별 값으로 설정합니다(이미지 형식에 의해 정의된 최대 이미지 너비를 초과할 수 없음).

반환 값

0: 작업이 성공적으로 완료되었습니다.

<0: Cannot set line length to the given value

기능

vaSi_Image_GetLineLength

구문

int vaSi_Image_GetLineLength (va_image_handle imageHandle, unsigned int line, unsigned int *length)

매개변수 1

이미지 핸들입니다.

Parameter 2

라인 번호입니다.

Parameter 3

라인 길이에 대한 반환 파라미터입니다.

설명

참조된 라인의 길이를 반환합니다.

반환 값

0: OK

<0: Cannot query line length

기능

vaSi_Image_SetPixelValue

구문

int vaSi_Image_SetPixelValue (va_image_handle imageHandle, uint64_t imagePos, unsigned int compIndex, int64_t value)

매개변수 1

이미지 핸들입니다.

Parameter 2

프레임 내의 위치입니다.

Parameter 3

컴포넌트 인덱스입니다.

Parameter 4

픽셀 컴포넌트 값입니다.

설명

해당 픽셀 컴포넌트를 지정된 값으로 설정합니다.

반환 값

0: 작업이 성공적으로 완료되었습니다.

<0: Error setting the pixel component value

기능

vaSi_Image_GetPixelValue

구문

int vaSi_Image_GetPixelValue (va_image_handle imageHandle, uint64_t imagePos, unsigned int compIndex, int64_t *value)

매개변수 1

이미지 핸들입니다.

Parameter 2

프레임 내의 위치입니다.

Parameter 3

컴포넌트 인덱스입니다.

Parameter 4

픽셀 컴포넌트 값에 대한 반환 파라미터입니다.

설명

해당 픽셀 컴포넌트 값을 반환합니다.

반환 값

0: 작업이 성공적으로 완료되었습니다.

<0: Error getting the pixel component value

기능

vaSi_ImageFormat_SetProperty

구문

int vaSi_ImageFormat_SetProperty (va_image_format_handle formatHandle, const char* propType, const va_data* propData)

매개변수 1

이미지 포맷 핸들입니다.

Parameter 2

설정할 Property를 식별하는 Enum 값입니다.

Parameter 3

새로운 Property를 보유하고 있는 데이터 구조체에 대한 포인터입니다.

설명

핸들로 참조되는 이미지 포맷의 Property를 설정합니다. 이 함수를 통해 다음 Property들을 설정할 수 있습니다:

Protocol: 다음 이미지 프로토콜을 설정합니다. 여기서 *propData 은(는) 다음 타입이며 VA_ENUM 다음 값 중 하나로 설정됩니다:

  • VALT_IMAGE2D

  • VALT_LINE1D

ColorFormat: 다음 이미지 프로토콜을 설정합니다. 여기서 *propData 은(는) 다음 타입이며 VA_ENUM 다음 값 중 하나로 설정됩니다:

  • VAF_GRAY

  • VAF_COLOR

ColorFlavor: 다음 이미지 프로토콜을 설정합니다. 여기서 *propData 은(는) 다음 타입이며 VA_ENUM 다음 값 중 하나로 설정됩니다:

  • FL_NONE

  • FL_HSI

  • FL_YUV

  • FL_LAB

  • FL_RGB

  • FL_XYZ

Parallelism: Parallelism 설정(타입 VA_INT32)

ComponentCount: 픽셀 컴포넌트 수 설정(타입 VA_INT32)

ComponentWidth: 픽셀 컴포넌트 비트 너비 설정(타입 VA_INT32)

Arithmetic: 픽셀 컴포넌트 Arithmetic 설정. 여기서 *propData 은(는) 다음 타입이며 VA_ENUM 다음 값 중 하나로 설정됩니다:

  • UNSIGNED

  • SIGNED

MaxImgHeight: 최대 이미지 높이 설정(타입 VA_INT32)

MaxImgWidth: 최대 이미지 너비 설정(타입 VA_INT32)

반환 값

0 : Property가 성공적으로 설정됨

VA_SIM_INVALID_PARAMETER: Property를 식별할 수 없음

VA_SIM_INVALID_TYPE: Property 데이터의 형식이 잘못됨

VA_SIM_INVALID_VALUE: Property 데이터에 유효하지 않은 값이 포함됨

기능

vaSi_ImageFormat_GetProperty

구문

int vaSi_ImageFormat_GetProperty (va_image_format_handle formatHandle, VAImageFormatProperty propType, va_data* propData)

매개변수 1

이미지 포맷 핸들입니다.

Parameter 2

조회할 Property를 식별하는 Enum 값입니다.

Parameter 3

조회된 Property에 의해 덮어씌워질 데이터 구조체에 대한 포인터입니다.

설명

핸들러가 참조하는 이미지 형식의 속성을 쿼리합니다. 쿼리할 수 있는 속성은 함수를 통해 설정할 수 있는 속성과 동일합니다. vaSi_ImageFormat_SetProperty().

반환 값

0 : Property가 성공적으로 조회됨

VA_SIM_INVALID_PARAMETER: Property를 식별할 수 없음

VA_SIM_INVALID_TYPE: Property 데이터의 형식이 잘못됨

기능

vaSi_CreateStatusMessage

구문

int vaSi_CreateStatusMessage (va_custom_op_sim_handle simHandle, va_status_handle *newMessage)

매개변수 1

시뮬레이션 핸들입니다.

Parameter 2

생성된 오류 메시지에 대한 반환 매개변수입니다.

설명

시뮬레이션 엔진에 제출할 수 있는 상태 메시지를 생성합니다.

반환 값

0: OK

<0: Can’t create message

기능

vaSi_SetStatusMessageProperty

구문

int vaSi_SetStatusMessageProperty (va_custom_op_sim_handle simHandle, va_status_handle message, const char* propName, const va_data* propValue)

매개변수 1

시뮬레이션 핸들입니다.

Parameter 2

상태 메시지 핸들입니다.

Parameter 3

설정할 속성의 이름입니다.

Parameter 4

새로운 속성 값입니다.

설명

상태 메시지 속성을 변경합니다. 이 함수를 통해 다음 속성들을 설정할 수 있습니다:

Code: 오류 코드 설정 (유형: VA_INT32)

Severity: 데이터의 심각도 수준 설정 (유형: VA_ENUM)은(는) 다음 값 중 하나여야 합니다:

  • VA_INFO

  • VA_WARNING

  • VA_ERROR

Description: 상태에 대한 문자열 설명 설정 (유형: VA_STRING)

기능

vaSi_SendStatusMessage

구문

int vaSi_SendStatusMessage (va_custom_op_sim_handle simHandle, va_status_handle message)

매개변수 1

시뮬레이션 핸들입니다.

Parameter 2

제출할 상태 메시지의 핸들입니다.

설명

시뮬레이션 엔진에 상태 메시지가 제출되었습니다.

반환 값

0: OK

<0: Can’t submit message

사용자 지정 연산자 문서 생성

오퍼레이터 문서는 HTML 파일로 제공되어야 합니다. 사용 가능한 경우, 문서를 구성하는 모든 파일은 General → HTML Help Files 탭에 지정해야 합니다:

지정된 첫 번째 파일은 오퍼레이터 문서의 시작점으로 해석됩니다. 이 파일의 명명 규칙은 다음과 같습니다: <NameOfCustomOperator>.htm.

CSS 파일이 제공되었는지 확인하십시오. 또한 관련된 모든 이미지 파일도 함께 제공해야 합니다.

VisualApplets 설치 디렉터리의 하위 디렉터리에 제공된 오퍼레이터 템플릿을 사용할 수 있습니다. Examples/CustomLibrary/OperatorTemplate.

Custom Operator 완성

인터페이스가 생성된 블랙박스와 일치하도록 HDL 코드를 래핑한 후, 커스텀 오퍼레이터를 완료하기 위해 다음의 마지막 단계를 진행해야 합니다:

  1. 구현으로부터 넷리스트를 생성합니다.

    [팁] 설정 Add IO Buffer = NO

    넷리스트를 생성할 때, 합성 도구가 IO 버퍼를 자동으로 추가하지 않도록 해야 합니다. 넷리스트 합성을 위해 XST를 사용하는 경우 다음을 설정합니다.

    Add IO Buffer = NO

    그렇지 않으면, 결과 NGC 파일로 인해 VisualApplets 빌드 흐름 중에 오류가 발생합니다.

    [팁] 넷리스트 생성 중 경고

    넷리스트를 생성할 때 커스텀 오퍼레이터 인터페이스의 미사용 IO 포트에 관한 경고가 출력될 수 있습니다. 미사용 IO 포트는 오퍼레이터 정의에 따라 생성되었으나 IP 코어와 연결되지 않은 모든 포트를 의미합니다. 이러한 경고는 무시하셔도 됩니다.

    이러한 동작의 예로는 다음에서 찾을 수 있는 모든 커스텀 오퍼레이터 예시가 있습니다: Examples VisualApplets 설치 디렉터리입니다.

    \Examples\CustomLibrary

  2. 필요한 경우 제약 조건 파일(*.ucf Xilinx ISE를 사용하는 경우의 형식, *.xdc Xilinx Vivado를 사용하는 경우의 형식)도 정의하십시오.

  3. '커스텀 오퍼레이터의 소프트웨어 인터페이스 정의' 섹션에 설명된 대로 선택적으로 오퍼레이터의 소프트웨어 인터페이스를 설정합니다.

  4. '커스텀 오퍼레이터 문서 만들기' 섹션에 설명된 대로 선택적으로 오퍼레이터 문서를 만듭니다.

이제 VisualApplets에서 오퍼레이터 정의를 완료해야 합니다. 이렇게 하려면 다음과 같이 진행하십시오.

필수 단계:

  1. Cores 탭으로 이동합니다.

  2. 생성한 넷리스트 파일을 지정합니다.

  3. 제약 조건을 정의한 경우 제약 조건 파일을 지정합니다.

  4. 지원되는 디바이스 지정: 디바이스 이름은 타겟 플랫폼의 FPGA 유형 이름입니다. VisualApplets의 프로젝트 정보 상자에 제공된 것과 정확히 동일한 철자를 사용하십시오. 여러 FPGA 유형이 지원되는 경우 공백으로 구분된 이름 목록을 사용하십시오.

    디자인에서 커스텀 오퍼레이터를 사용하지만 타겟 플랫폼의 FPGA가 이 목록에 없는 경우, DRC는 해당 오퍼레이터가 타겟 플랫폼에서 지원되지 않는다는 오류를 보고합니다.

  5. 지원되는 Xilinx Tool을 지정합니다. ISE와 Vivado 모두에 체크 박스를 선택할 수 있습니다. ISE로 생성된 넷리스트는 일반적으로 Vivado 빌드 흐름과도 호환되지만, 오퍼레이터 구현에 해당하는지 확인해야 합니다. 지정된 넷리스트를 지원하는 도구의 최소 버전 번호를 정의해야 합니다. 일반적으로 이는 넷리스트를 생성하는 데 사용한 버전입니다.

    디자인에서 커스텀 오퍼레이터를 사용하지만 디자인 빌드에 지정된 도구를 사용하지 않는 경우, DRC는 해당 오퍼레이터가 타겟 플랫폼에서 지원되지 않는다는 오류를 보고합니다.

    [팁] 다중 코어 정의

    동일한 커스텀 오퍼레이터에 대해 여러 코어를 정의할 수 있습니다. 이를 통해 커스텀 오퍼레이터의 디바이스 및 도구별 구현을 사용할 수 있으므로, 서로 다른 타겟 플랫폼에 대해 앱들 빌드에 적합한 구현이 선택됩니다.

    선택적 단계:

  6. 선택적으로 오퍼레이터의 로직 리소스 소비량을 입력합니다. 넷리스트 생성 중에 Xilinx 툴이 추정한 값을 간단히 입력하면 됩니다.

  7. General 탭에서 시뮬레이션 라이브러리(커스텀 오퍼레이터의 소프트웨어 인터페이스) 경로를 지정합니다.

  8. General 탭에서 아이콘 파일 경로를 지정합니다. 이 파일은 VisualApplets에 커스텀 오퍼레이터가 표시될 때 사용되는 아이콘을 포함하는 파일입니다.

  9. General 탭에서 커스텀 오퍼레이터 문서를 구성하는 모든 파일을 지정합니다. CSS 파일과 모든 관련 이미지 파일도 제공해야 합니다.

  10. 오퍼레이터 디자인을 보호하려면 왼쪽 하단 모서리에서 Protected 옵션을 활성화합니다. 열리는 대화 상자에서:

    1. 보호 모드 Password가 활성화되어 있는지 확인합니다.

    2. 비밀번호를 입력합니다.

    3. OK를 클릭합니다.

    사용자 정의 라이브러리 요소의 컨텍스트 메뉴를 사용하여 나중에도 언제든지 사용자 정의 opérateur 설계를 보호할 수 있습니다.

    [팁] 보호 옵션

    보호 기능이 활성화되면 사용자 정의 opérateur는 “블랙박스”가 됩니다. 사용자 정의 opérateur 설계를 보호하는 방법에는 두 가지가 있습니다.

    • 비밀번호를 통한 보호: 비밀번호를 사용하여 나중에 사용자 정의 opérateur 설계를 열고 편집할 수 있습니다. 비밀번호가 없는 사용자는 사용자 정의 opérateur의 어떠한 세부 정보도 볼 수 없습니다(블랙박스).

    • 되돌릴 수 없는 보호: 보호 모드를 선택하면 단방향를 선택하면 사용자 정의 연산자는 영구적으로 블랙박스로 처리되며, 본인조차도 다시 열 수 없습니다.

    "단방향" 보호는 되돌릴 수 없습니다: 다음 중 하나를 선택하면 보호 모드 단방향 (대신 비밀번호를 선택하는 대신)를 선택하면, 사용자 정의 라이브러리 요소는 본인조차도 다시 열 수 없게 대신)를 선택하면, 사용자 정의 라이브러리 요소는 본인조차도 다시 열 수 없습니다. 추후에 해당 요소를 수정할 계획이 있다면, 반드시 보호 모드 비밀번호를 선택해야 합니다. 또는 이 보호 모드를 활성화하기 전에 요소의 사본을 을 선택해야 합니다. 또는 이 보호 모드를 활성화하기 전에 요소의 복사본(계층적 상자 또는 보호되지 않은 연산자 형태)을 저장해 둘 수도 있습니다.

  11. 클릭 저장를 클릭하세요.

이제 새로 만든 사용자 정의 연산자를 설계에 사용할 준비가 되었습니다.

Using New Custom Operators

Distributing the Custom Library or the Individual Custom Operator

포함된 모든 오퍼레이터가 있는 커스텀 라이브러리는 하나의 단일 파일로 <LibaryName>.val 또는 <LibaryName>.vl 파일.

<LibaryName> 사용자 정의 라이브러리의 이름입니다.

이 파일은 VisualApplets 에서 배포 및 직접 적용할 수 있습니다. 단순히 VisualApplets 설정에서 지정된 Custom Library 디렉터리에 복사하기만 하면 됩니다 ( 설정 → 시스템 설정 → 경로 → 사용자 지정 라이브러리

  1. 새로운 항목을 복사하세요 <LibaryName>.val 또는 <LibaryName>.vl VisualApplets 설치 폴더 내의 ‘Custom Library’ 디렉터리에 파일을 저장하십시오.

  2. VisualApplets GUI에서 사용자 정의 라이브러리를 다시 스캔하세요: 라이브러리 이름을 마우스 오른쪽 버튼으로 클릭한 다음 하위 메뉴에서 사용자 지정 라이브러리 디렉터리 다시 스캔를 선택하십시오.

VisualApplets 의 예제 디렉터리에는 다음과 같은 바로 사용할 수 있는 라이브러리가 있습니다. CustomLibrary.vl

여기에는 모든 예제 연산자가 포함되어 있습니다.

사용자 지정 라이브러리에서 업데이트

사용자 정의 연산자를 변경하더라도, 이러한 변경 사항은 이미 해당 사용자 정의 연산자를 사용하고 있는 설계에는 반영되지 않습니다. 따라서 설계 내의 사용자 정의 연산자 인스턴스를 업데이트해야 합니다.

  1. 연산자를 마우스 오른쪽 버튼으로 클릭합니다.

  2. 하위 메뉴에서 다음을 선택하세요. 사용자 지정 라이브러리에서 업데이트 또는 사용자 지정 라이브러리에서 빠른 업데이트를 선택하십시오.

사용자 정의 라이브러리의 업데이트 방식은 사용자 라이브러리의 업데이트 방식과 완전히 동일합니다.

개별 Custom Operator 가져오기 및 내보내기

연산자의 XML 정의 파일을 가져오거나 내보냄으로써 개별 사용자 정의 연산자를 가져오거나 내보낼 수 있습니다.

사용자 정의 연산자를 가져오려면:

  1. 사용자 정의 연산자를 가져오려는 사용자 정의 라이브러리를 마우스 오른쪽 버튼으로 클릭합니다.

  2. 하위 메뉴에서 다음을 선택하십시오. ‘연산자 가져오기’ → 'From' XML에서

  3. 사용자 정의 연산자의 ` XML ` 정의 경로를 지정하고 열기을 클릭하십시오.

    즉시, '사용자 정의 연산자 편집' 대화 상자가 열립니다:

  4. 클릭 저장를 클릭하세요.

    저장 후, 가져온 오퍼레이터는 사용자 정의 라이브러리에서 바로 사용할 수 있습니다:

Operator Template and Examples

예제

설치 디렉토리에서 참고용으로 사용할 수 있는 완성된 사용자 정의 오퍼레이터 세 개를 확인할 수 있습니다. 예제는 다음 경로에 있습니다:

\Examples\CustomLibrary

사용자 지정 연산자 템플릿

설치 디렉토리에서 사용자 정의 오퍼레이터를 정의하는 데 사용할 수 있는 사용자 정의 오퍼레이터 템플릿을 확인할 수 있습니다.

\Examples\CustomLibrary 사용자 정의 오퍼레이터 템플릿을 사용하려면:

  1. 새 사용자 정의 오퍼레이터를 생성할 사용자 정의 라이브러리를 마우스 우클릭합니다.

  2. 하위 메뉴에서 다음을 선택하십시오. ‘연산자 가져오기’ → 'From' XML에서

  3. 오퍼레이터 템플릿의 경로를 지정합니다.

  4. Open을 클릭합니다.

    즉시, '사용자 정의 연산자 편집' 대화 상자가 열립니다:

  5. 새 사용자 정의 오퍼레이터의 이름을 지정하고 'Defining an Individual Custom Operator via GUI' 섹션에 설명된 대로 진행합니다.

Custom Operator 사양을 위한 XML 형식

사용자 정의 오퍼레이터의 정의는 XML 형식으로 저장됩니다. 관련 XML 파일은 오퍼레이터 라이브러리에서 내보내거나, 이전에 내보낸 XML 파일을 사용하여 오퍼레이터를 가져올 수 있습니다.

다음에서는 매개변수 이름이 동일한 이름의 XML 태그와 연관된 필수 매개변수에 대해 설명합니다. 다음과 같은 매개변수는 ImgInInfo 다음과 같은 XML 항목으로 변환됩니다:

<ImgInInfo> ImgInPortNames </ImgInInfo> 여기서 ImgInPortNames 은(는) 이 경우 포트 이름 시퀀스가 될 수 있는 값입니다. 매개변수는 계층적으로 정렬됩니다. 다음 표에서 회색 배경이 있는 줄은 매개변수가 예상되는 계층 위치를 나타냅니다.

단순 매개변수 값은 다음 유형 중 하나일 수 있습니다:

  • 선택(Choice): 허용되는 값은 다음과 같습니다 YES 또는 NO

  • 문자열(String): 공백이 없는 ASCII 문자열

  • 정수

  • 부동 소수점(Floating-point)

일부 매개변수는 배열이나 레코드를 구조화 요소로 사용할 수 있는 값의 구조로 구성됩니다. 배열은 값 자체에 구조가 있을 수 있으며 공백으로 구분된 값 목록으로 입력됩니다. 레코드는 다음과 같은 방식으로 입력되며 RecordName 은(는) 레코드 식별자이고, attrX 은(는) 레코드 항목의 식별자이며, attrXValue 은(는) 값입니다:

<RecordName attr1=”attr1Value” .. attrN=”attrNValue”/>

예를 들어 이름과 너비 항목이 있는 port 라는 레코드를 제공하는 경우가 있습니다:

<port name=”flag” width=”4”/>

XML 형식의 루트 태그는 Operator 이며, 사용자 정의 오퍼레이터 이름을 지정해야 하는 속성 name 을(를) 포함합니다:

<Operator name=”XYZ”>
…
</Operator>
   
[팁] VHDL 명명 규칙 준수

VA GUI에서 연산자 이름을 정의할 때 VHDL 명명 규칙을 준수해야 합니다.

VHDL에서 유효한 이름은 다음과 같이 정의됩니다:

“포트, 신호, 변수, 엔티티 이름, 아키텍처 본문 또는 유사한 객체의 유효한 이름은 문자로 시작하고 그 뒤에 공백 없이 임의 개수의 문자나 숫자가 오는 형태로 구성됩니다. 유효한 이름은 명명된 식별자라고도 합니다. VHDL은 대소문자를 구분하지 않습니다. 그러나 이름 내에 밑줄을 사용할 수 있지만, 이름의 시작이나 끝에는 사용할 수 없습니다. 연속된 두 개의 밑줄은 허용되지 않습니다.”

파라미터 이름

Type

설명

Vendor

String

벤더 이름입니다.

Version

String

연산자의 버전 번호입니다. 값은 자유롭게 선택할 수 있으며 사용자가 버전을 식별하기 위한 것입니다.

Cores

문자열 배열

연산자의 코어 넷리스트 목록입니다. 첫 번째 문자열은 Core0 이어야 하며 항상 존재해야 합니다. 둘 이상의 코어를 사용할 수 있는 경우 코어의 명명 규칙은 Core<N> 여기서 <N> 은(는) 각 코어마다 증가하는 정수입니다.

LibraryFile

String

연산자의 고수준 시뮬레이션 모델을 포함하는 소프트웨어 라이브러리(동적 링크 라이브러리)가 포함된 파일의 따옴표로 묶인 이름입니다.

IconFile

String

연산자 아이콘이 포함된 파일의 따옴표로 묶인 이름입니다.

HtmlHelpFiles

문자열 배열

도움말 콘텐츠(HTML + 이미지)가 포함된 따옴표로 묶인 파일 이름 목록입니다. 첫 번째 파일은 기본 HTML 파일로 간주됩니다.

표 7. Operator/Info


파라미터 이름

Type

설명

RegInInfo

문자열 배열

쓰기 레지스터 포트를 설명하는 나중에 정의된 정보 구조체의 이름 목록 (Operator/RegIn)입니다.

RegOutInfo

문자열 배열

쓰기 레지스터 포트를 설명하는 나중에 정의된 정보 구조체의 이름 목록 (Operator/RegOut) 읽기 레지스터 포트를 설명합니다.

ImgInSyncMode

String

ImgIn 포트의 입력이 서로 동기식인지 비동기식인지 정의하는 문자열입니다. 이 문자열은 “Sync” 또는 “Async”일 수 있습니다.

ImgInInfo

문자열 배열

쓰기 레지스터 포트를 설명하는 나중에 정의된 정보 구조체의 이름 목록 (Operator/ImgIn) 이미지 입력 포트의 속성을 설명합니다. 여러 목록 항목이 동일한 구조를 참조할 수 있으며, 이는 동일한 종류의 이미지 입력 인터페이스가 여러 개 있음을 의미합니다.

ImgOutInfo

문자열 배열

쓰기 레지스터 포트를 설명하는 나중에 정의된 정보 구조체의 이름 목록 (Operator/ImgOut) 이미지 출력 포트의 속성을 설명합니다. 여러 목록 항목이 동일한 구조를 참조할 수 있으며, 이는 동일한 종류의 이미지 출력 인터페이스가 여러 개 있음을 의미합니다.

GPIn

문자열 배열

범용 신호 입력에 대한 핀 이름 목록입니다.

GPOut

문자열 배열

범용 신호 출력에 대한 핀 이름 목록입니다.

MemInfo

문자열 배열

쓰기 레지스터 포트를 설명하는 나중에 정의된 정보 구조체의 이름 목록 (Operator/Mem) 메모리 인터페이스 포트의 속성을 설명합니다. 여러 목록 항목이 동일한 구조를 참조할 수 있으며, 이는 동일한 종류의 메모리 인터페이스가 여러 개 있음을 의미합니다.

표 8. Operator/IO


파라미터 이름

Type

설명

NrLut

정수

연산자가 소비하는 FPGA LUT 요소 수

NrRegs

정수

연산자가 소비하는 FPGA 레지스터 수

NrBlockRam

정수

연산자가 소비하는 블록 램 요소 수

NrEmbeddedMult

정수

오퍼레이터가 소모하는 임베디드 멀티플라이어(multiplier) 수

표 9. Operator/Properties


이미지 입력 포트 사양은 설정 파일 내에서 다음 구문을 사용하여 지정됩니다.

<ImgIn name=”IMG_IN_IDENTIFIER”> Parameters </ImgIn>;

여기서 IMG_IN_IDENTIFIER 은(는) 위의 파라미터에서 제공된 이미지 입력 포트 이름 중 하나입니다. Operator/IO/ImgInInfo. 내용 Parameters 은(는) 이미지 인터페이스 포트의 속성을 지정합니다.

파라미터 이름

Type

설명

Width

정수

이미지 데이터 포트의 너비

FIFODepth

정수

VA 코어에서 최소한 제공해야 하는 입력 데이터용 버퍼 FIFO의 깊이입니다. 값은 15에서 1023 사이의 2의 거듭제곱에서 1을 뺀 값이어야 합니다.

Formats

레코드 배열

이미지 형식 레코드 목록 ImgFormat 포트에서 지원하는 형식입니다. 이미지 형식 명명 체계는 아래를 참조하십시오.

표 10. Operator/ImgIn


이미지 형식 레코드는 다음과 같은 구조를 가집니다.

<ImgFormat name=”FORMAT” maxWidth=”X1” maxHeight=”Y1” alias=”NAME1”/>

항목 FORMAT 은(는) 아래에서 설명하는 이미지 형식 명명 체계에 따라 코딩된 이미지 형식의 String 값입니다. 속성 maxWidth 및 maxHeight 은(는) 선택 사항이며 이미지 크기의 제한을 설정합니다. 존재하지 않는 경우, 사용자는 나중에 VisualApplets 내에서 이미지 크기 제약 조건을 자유롭게 선택할 수 있습니다. 속성 alias 역시 선택 사항이며, 존재하는 경우 GUI에서 형식이 표시될 이름을 정의합니다.

이미지 출력 포트 사양은 설정 파일 내에서 다음 구문을 사용하여 지정됩니다.

<ImgOut name=”IMG_OUT_IDENTIFIER”> Parameters </ImgOut>;

여기서 IMG_OUT_IDENTIFIER 은(는) 위의 파라미터에서 제공된 이미지 출력 포트 이름 중 하나입니다. Operator/IO/ImgOutInfo. 내용 Parameters 은(는) 이미지 인터페이스 포트의 속성을 지정합니다.

파라미터 이름

Type

설명

Width

정수

이미지 데이터 포트의 너비

FIFODepth

정수

VA 코어에서 최소한 제공해야 하는 출력 데이터용 버퍼 FIFO의 깊이입니다. 값은 15에서 1023 사이의 2의 거듭제곱에서 1을 뺀 값이어야 합니다.

Formats

레코드 배열

이미지 형식 레코드 목록 ImgFormat 포트에서 지원하는 형식입니다. 이미지 형식 명명 체계는 아래를 참조하십시오.

표 11. Operator/ImgOut


이미지 형식은 다음 명명 체계에 따라 코딩됩니다.

{BaseFormat}{BitsPerPixel}x{Parallelism}

선택적으로 이미지 차원 및 부호 있는(signed) 컴포넌트 데이터 알림에 대한 접미사가 있을 수 있습니다.

{BaseFormat}{BitsPerPixel}x{Parallelism}x{Dimension}{Sign}

차원의 의미는 다음과 같습니다.

  • Dimension = 2 – 2차원 이미지는 이미지가 라인 끝(end-of-line) 및 프레임 끝(end-of-frame) 마커 모두로 구조화되어 있음을 의미합니다.

  • Dimension = 1 – 1차원 이미지는 들어오는 라인을 프레임으로 나누는 프레임 끝(end-of-frame) 마커가 없음을 의미합니다.

차원이 지정되지 않은 경우 기본값으로 2가 가정됩니다. 접미사 {Sign} 은(는) 다음과 같을 수 있습니다. s 는 부호 있는 픽셀 구성 요소용이거나 u 는 부호 없는 값용이며, 이러한 접미사가 제공되지 않은 경우 기본값은 u 입니다. 지원되는 Color Format은 다음과 같습니다. rgb, yuv, hsi, lab 및 xyz.

예시는 다음과 같습니다.

  • gray8x4 – 8비트 픽셀 및 Parallelism 4의 그레이 포맷

  • rgb24x2 – 3x8비트 픽셀 및 Parallelism 2의 rgb Color Format

  • gray16x1 – 16비트 픽셀의 그레이 포맷, 데이터 워드에 단일 픽셀만 존재

  • gray8x4x1 – 픽셀당 8비트 및 Parallelism 4의 1차원 그레이 이미지

  • gray16x1s – 부호 있는 16비트 구성 요소의 그레이 이미지, 데이터 워드에 단일 픽셀만 존재

레지스터 입력 포트 사양은 설정 파일 내에서 다음 구문을 사용하여 지정됩니다.

<RegIn name=”REG_IN_IDENTIFIER”> Parameters </RegIn>;

여기서 REG_IN_IDENTIFIER 는 위의 파라미터에서 제공된 레지스터 입력 포트 이름 중 하나입니다. Operator/IO/RegInInfo. 내용 Parameters 은 레지스터 인터페이스 포트의 속성을 지정합니다.

파라미터 이름

Type

설명

Width

정수

레지스터 포트의 너비

표 12. Operator/RegIn


레지스터 출력 포트 사양은 설정 파일 내에서 다음 구문을 사용하여 지정됩니다.

<RegOut name=”REG_OUT_IDENTIFIER”> Parameters </RegOut>;

여기서 REG_OUT_IDENTIFIER 는 위의 파라미터에서 제공된 레지스터 출력 포트 이름 중 하나입니다. Operator/IO/RegOutInfo. 내용 Parameters 은 레지스터 인터페이스 포트의 속성을 지정합니다.

파라미터 이름

Type

설명

Width

정수

레지스터 포트의 너비

표 13. Operator/RegOut


메모리 인터페이스 사양은 설정 파일 내에서 다음과 같은 구문을 사용하는 섹션별로 정의됩니다.

<Mem name=”MEM_IDENTIFIER”> Parameters </MEM>

여기서 MEM_IDENTIFIER 은(는) 위에서 설명한 파라미터에 제공된 메모리 포트 이름 중 하나입니다. Operator/IO/MemInfo. 내용 Parameters 은(는) 메모리 인터페이스의 속성을 지정합니다.

파라미터 이름

Type

설명

DataWidth

정수

데이터 너비

AddrWidth

정수

주소 너비

WrFlagWidth

정수

쓰기 액세스 표시용 플래그의 너비입니다. 이 파라미터는 >= 1이어야 합니다.

RdFlagWidth

정수

읽기 액세스 표시용 플래그의 너비입니다. 이 파라미터는 >= 8이어야 합니다.

WrCntWidth

정수

사용 가능한 쓰기 명령 수를 통신하기 위한 포트의 너비

RdCntWidth

정수

사용 가능한 읽기 명령 수를 통신하기 위한 포트의 너비

SyncMode

String

이 파라미터는 메모리 인터페이스 클록과 디자인 클록 간의 관계를 신호로 전달합니다. 다음과 같은 값을 사용할 수 있습니다.

SyncToDesignClk – 메모리 인터페이스 포트가 다음 항목과 동기화됩니다. iDesignClk.

SyncToDesignClk2x – 메모리 인터페이스 포트가 다음 항목과 동기화됩니다. iDesignClk2x.

표 14. Operator/Mem


IP 코어 넷리스트 사양은 설정 파일 내에서 다음과 같은 구문을 사용하는 섹션별로 정의됩니다.

<Core name=”CORE_IDENTIFIER”> Parameters </Core>

여기서 Core_IDENTIFIER 은(는) 위에서 설명한 파라미터에 제공된 코어 이름 중 하나입니다. Operator/Cores. 내용 Parameters 은(는) IP 코어의 속성을 지정합니다.

파라미터 이름

Type

설명

Devices

문자열 배열

코어에서 지원하는 FPGA 디바이스 이름 목록 (예: XC3S1600E XC3S4000).

NetlistFile

String

넷리스트에 대한 따옴표로 묶인 UTF-8 인코딩 파일 이름입니다.

ConstraintsFile

String

선택적 제약 파일에 대한 따옴표로 묶인 UTF-8 인코딩 파일 이름입니다.

MinVersionISE

String

주어진 넷리스트를 사용할 수 있는 ISE 툴 플로우의 최소 버전 번호 (예: 14.6 ISE 14.6용). ISE가 지원되지 않는 경우 이 문자열은 비어 있습니다.

MinVersion

String

주어진 넷리스트를 사용할 수 있는 Vivado 툴 플로우의 최소 버전 번호 (예: 2014.4 Vivado 2014.4용). Vivado가 지원되지 않는 경우 이 문자열은 비어 있습니다.

표 15. Operator/Core