VisualApplets를 사용하면 VHDL로 설계한 이미지 처리 모듈을 VisualApplets 오퍼레이터로 변환할 수 있습니다.
모듈을 IP 코어로서 VisualApplets에 통합할 수 있습니다. 각 IP 코어는 하나의 오퍼레이터를 구성합니다. 구현 후 이러한 오퍼레이터는 기본 제공되는 VisualApplets 오퍼레이터와 동일하게 작동합니다. 이런 방식으로 구현된 오퍼레이터를 custom operators라고 합니다.

VisualApplets GUI에서 custom operator를 사용할 수 있도록 하려면 하나 이상의 custom operator가 포함된 하나 이상의 커스텀 라이브러리도 정의해야 합니다. 각 custom operator는 특정 커스텀 라이브러리의 일부여야 합니다.
몇 가지 단계만 거치면 VisualApplets에 새로운 custom operator를 추가할 수 있습니다. 전체 작업 흐름을 직접 완료할 수 있습니다.
-
VA GUI에서 직접 custom operator의 주요 Property와 인터페이스(오퍼레이터 이름, 오퍼레이터 버전, 필요한 image in, image out의 개수 및 Property, memory port 등)를 지정합니다.
-
1단계에서 입력한 내용을 바탕으로 VisualApplets가 오퍼레이터 인터페이스(블랙박스)용 VHDL 코드와 구현 테스트용 VHDL 테스트 벤치를 생성하도록 합니다.
-
인터페이스가 생성된 블랙박스와 일치하도록 HDL 코드를 래핑합니다. 구현 테스트 시 자동으로 생성된 테스트 벤치가 도움이 될 수 있습니다.
-
구현에 대한 넷리스트를 생성합니다. 필요한 경우 제약 조건 파일도 생성합니다.
-
선택적으로 (오퍼레이터 도움말 창을 위한) 오퍼레이터 문서와 (나중에 custom operator가 포함된 VA 디자인 시뮬레이션을 가능하게 하는) 시뮬레이션 모델을 생성합니다.
-
VA에서 custom operator를 다시 편집합니다. 생성된 넷리스트와 선택적으로 도움말 파일 및 시뮬레이션 모델을 추가합니다.
이러한 단계를 거치면 이미지 처리 모듈을 VisualApplets 내에서 custom operator로 직접 사용할 수 있으며 다른 오퍼레이터와 동일한 방식으로 사용할 수 있습니다. 커스텀 라이브러리는 다음과 같이 저장됩니다. *.val 또는 *.vl 파일 형식으로 저장됩니다(사용자 라이브러리와 유사). 이 형식으로 배포 및 유포할 수 있습니다.

이 작업 흐름 동안 VisualApplets(즉, VisualApplets Custom Operator Functionality)는 두 번 사용됩니다.
-
관련 IP 코어 인터페이스(블랙박스 및 테스트 벤치)를 정의하기 위해 HDL 코드 내보내기를 허용하는 VisualApplets 내 오퍼레이터 프로토타입 생성용.
-
합성 및 (선택적) 시뮬레이션 그리고 도움말 콘텐츠에 필요한 파일을 추가하여 오퍼레이터를 완성하기 위함.
Generation of Operator Prototype: VA Custom Operator Functionality를 사용하면 Visual Applets에서 오퍼레이터를 인스턴스화하는 데 즉시 사용할 수 있는 오퍼레이터 프로토타입을 생성할 수 있습니다. 이 오퍼레이터 프로토타입의 경우 생성된 오퍼레이터 인터페이스의 통신 포트를 에뮬레이트하기 위한 블랙박스 인터페이스와 RTL 레벨 시뮬레이션 엔티티를 내보낼 수 있습니다. 그런 다음 코딩을 시작하고(즉, 블랙박스 인터페이스를 준수하는 HDL 코드 구현) custom operator 디자인을 시뮬레이션할 수 있습니다. 결과 FPGA 디자인은 EDIF 또는 NGC 넷리스트로 합성됩니다. 선택적으로 제약 조건 파일을 추가하고, VisualApplets 고수준 시뮬레이션을 위한 동적 링크 라이브러리를 만들고, VisualApplets GUI용 HTML 문서를 작성합니다.
Completing the operator definition: VA Custom Operator Functionality를 사용하면 넷리스트, 시뮬레이션 라이브러리 및 문서 파일을 지정할 수 있습니다. 이러한 파일이 추가되면 오퍼레이터를 즉시 사용할 수 있습니다.
VisualApplets는 기본 흐름 제어 메커니즘에 따라 다양한 유형의 오퍼레이터와 포트를 인식합니다. 오퍼레이터는 O 유형 또는 M 유형일 수 있습니다.
![]() |
Custom Operator Type: M |
|---|---|
|
Custom operator는 항상 M 유형입니다. |
오퍼레이터 포트는 동기식 또는 비동기식일 수 있습니다. VisualApplets에서 동기식이라는 것은 기본적으로 여러 포트의 데이터가 동기적으로 전송되는 것을 의미하며, 서로 비동기식인 포트는 정렬되지 않은 통신 패턴을 지원합니다.
포트는 공통 M 소스가 있거나 SYNC 모듈에서 소스를 가져오는 경우에만 동기식이며, 해당 소스와 포트 사이에는 모든 구성의 O 오퍼레이터가 있을 수 있습니다.
오퍼레이터 입력 포트 간의 관계에 따라 다음과 같은 옵션이 구분됩니다.
-
Synchronous inputs: 모든 입력 포트는 서로 동기화됩니다. 하나의 출력 포트가 있습니다.
-
Asynchronous inputs: 일부 입력 포트는 서로 비동기화되고 모든 출력은 서로 동기화됩니다.
비동기 출력을 가진 오퍼레이터는 허용되지 않습니다. 동기식 입력을 가진 오퍼레이터는 단일 출력만 가질 수 있습니다. 두 개 이상의 출력이 필요한 경우, 입력은 비동기로 선언되어야 합니다.
![]() |
다중 출력 정의 |
|---|---|
|
다중 출력을 가진 오퍼레이터를 생성하려면 입력을 비동기로 선언해야 합니다. 다중 출력은 항상 동기식입니다. |
두 클래스(기본 제공 VisualApplets 오퍼레이터)에 대한 예시:
|
![]()
|
RemoveImage |
동기식 입력과 하나의 출력을 가진 M-Operator. |
|
![]()
|
SYNC |
비동기식 입력과 여러 개의 동기식 출력을 가진 M-Operator. |
VisualApplets 커스텀 오퍼레이터 인터페이스는 새로운 오퍼레이터를 원활하게 통합하여 VisualApplets 내에서 기본 제공 오퍼레이터처럼 작동하도록 설계되었습니다. 커스텀 오퍼레이터에 원하는 수의 입력 및 출력 포트를 정의할 수 있습니다.
-
Image In / Image Out: Image In 및 Image Out 포트는 여러 이미지 포맷을 지원할 수 있습니다. 이 포트들은 사용하기 쉬운 FIFO 인터페이스로 구동됩니다. FIFO는 커스텀 오퍼레이터의 VA 부품에 상주하므로, FIFO가 아닌 흐름 제어만 구현하면 됩니다.
-
Memory ports: 원하는 수의 메모리 포트도 정의할 수 있습니다. 이 포트들 역시 커스텀 오퍼레이터의 VA 부품에 상주하는 FIFO를 사용합니다.
-
GPIO ports: 이미지 포트 외에도, 예를 들어 오퍼레이터에 비동기 신호를 통신하기 위한 범용 I/O 포트를 정의할 수 있습니다.
-
Registers: 오퍼레이터의 최종 사용자가 오퍼레이터를 설정하고 상태 정보에 접근할 수 있도록, 원하는 수의 쓰기 및 읽기 레지스터를 정의할 수 있습니다.
-
Clock: 클럭 펄스를 수신하기 위한 포트는 모든 커스텀 오퍼레이터에 대해 자동으로 설정됩니다.
-
Reset/Enable port: 리셋 또는 활성화 명령을 수신하기 위한 포트는 모든 커스텀 오퍼레이터에 대해 자동으로 설정됩니다.

다음 섹션에서는 위의 그림에 표시된 다양한 유형의 인터페이스에 대해 자세히 설명합니다.
VisualApplets은 디자인 클럭과, 디자인 클럭과 동기화되되 주파수가 두 배인 두 번째 클럭 등 두 개의 클럭 입력을 연결합니다. 메모리 인터페이스를 제외한 모든 인터페이스는 디자인 클럭과 동기화되어야 합니다. 메모리 인터페이스는 읽기 및/또는 쓰기 인터페이스를 위해 디자인 클럭 또는 2배 주파수 클럭을 사용하도록 설정할 수 있습니다.
리셋(Reset) 및 활성화(Enable) 입력은 오퍼레이터가 인스턴스화되는 VA 프로세스의 해당 “process enable” 및 “process reset” 신호에 의해 구동됩니다. 이 신호들에 대한 반응으로 오퍼레이터에 다음 동작이 구현되도록 하십시오.
-
Reset이 어서트(Assertion)되면 오퍼레이터가 초기(init) 상태로 전환됩니다.
-
Enable이 어서트되면 처리가 시작됩니다.
-
Enable이 비활성화되면 처리가 중지됩니다.
-
(Enable=0일 때, 오퍼레이터의 출력 FIFO는 읽혀지지 않습니다. 이미지 처리 파이프라인의 상태에 따라 일부 데이터가 입력 포트에 계속 기록될 수 있지만, 흐름 제어를 통해 FIFO 콘텐츠가 손상되는 것을 안전하게 방지합니다.)
-
Reset은 Enable=0일 때만 어서트됩니다.
이러한 신호에 대한 다음 동작은 커스텀 오퍼레이터의 VA 부품에 구현됩니다.
-
Reset은 모든 포트 인터페이스 FIFO를 비웁니다.
-
Reset과 Enable은 오퍼레이터의 파라미터에 영향을 미치지 않습니다.
-
Reset과 Enable은 오퍼레이터의 GPIO 인터페이스에 영향을 미치지 않습니다.
커스텀 오퍼레이터의 파라미터와 상태를 통신하기 위해, 커스텀 오퍼레이터에는 임의 개수의 VisualApplets 파라미터가 제공될 수 있습니다. 각 파라미터는 커스텀 오퍼레이터의 별도 레지스터 포트로 변환됩니다. VisualApplets는 오퍼레이터 레지스터와의 접근 디스패칭을 처리합니다.
커스텀 오퍼레이터의 영상 입력 및 영상 출력 포트가 지원할 영상 프로토콜을 정의할 수 있습니다. 이후 오퍼레이터 사용자는 제공된 영상 프로토콜 목록에서 선택할 수 있습니다.
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를 갖는 컬러 영상
또한, 영상 치수와 픽셀 구성 요소가 부호화되어 있는지 여부는 선택적 접미사로 코딩할 수 있습니다.
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에서 모든 링크는 최대 영상 너비 및 최대 영상 높이 Property를 전달합니다. VisualApplets를 사용하면 커스텀 오퍼레이터가 지원하는 영상 프로토콜 중 하나에 대해 최대 너비 및 높이의 선택적 제약 조건을 각각 정의할 수 있습니다.
영상 인터페이스 포트의 경우 허용되는 영상 프로토콜 목록을 정의합니다. 이 목록은 가능한 VisualApplets 영상 형식(위 참조)의 하위 집합을 구성합니다. 형식은 다음과 같은 Property로 설명할 수 있습니다.
-
데이터 형식 uint 또는 int
-
Pixel data Bit Width N = [1..64]
-
Gray 또는 Color Format(집계된 너비 N을 갖는 단일 또는 3개의 데이터 구성 요소)
-
Color Format의 Flavor(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 내의 해당 format 파라미터로 선택된 단일 포트를 통해 여러 가지 서로 다른 프로토콜을 구동할 수 있습니다. 인터페이스는 기본적으로 실제로 사용되는 데이터 포맷의 ID를 제공하는 FIFO와 파라미터 레지스터로 구성됩니다. 커스텀 오퍼레이터는 선택된 이미지 포맷의 프로토콜에 따라 FIFO를 읽고 이미지 데이터를 해석하는 작업을 처리해야 합니다. 오퍼레이터는 FIFO의 채워진 상태에 대한 정보를 제공하는 상태 핀에 따라 올바른 흐름 제어를 보장해야 합니다. 즉, FIFO가 비어 있을 때는 데이터를 읽을 수 없습니다.
이미지 인터페이스 포트의 경우, 허용되는 이미지 포맷 목록을 정의해야 합니다. 이 목록은 가능한 VisualApplets 이미지 포맷(섹션 'Image Protocols' 참조)의 하위 집합을 구성하며, 포맷은 다음 속성으로 설명할 수 있습니다.
-
데이터 형식 uint 또는 int
-
Pixel data Bit Width N = [1..64]
-
Gray 또는 Color Format(집계된 너비 N을 갖는 단일 또는 3개의 데이터 구성 요소)
-
Color Format의 Flavor(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가 관련 Custom Operator 포트로 출력됩니다. 이를 통해 커스텀 오퍼레이터는 선택된 포맷에 맞게 동작을 조정할 수 있습니다.
이미지 출력 포트를 통해 커스텀 오퍼레이터에서 VisualApplets 프로세스로 이미지 데이터를 전달할 수 있습니다. 이 포트의 이름은 ImgOut입니다. 출력 채널의 적절한 구성을 지원하도록 커스텀 오퍼레이터를 설계한 경우(섹션 'Image Protocols' 참조), VisualApplets 내의 해당 format 파라미터로 선택된 단일 포트를 통해 여러 가지 서로 다른 프로토콜을 구동할 수 있습니다. 인터페이스는 기본적으로 실제로 사용되는 데이터 포맷의 ID를 제공하는 FIFO와 파라미터 레지스터로 구성됩니다. 커스텀 오퍼레이터는 선택된 이미지 포맷의 프로토콜에 따라 이미지 데이터로 FIFO를 채우는 작업을 처리해야 합니다. 오퍼레이터는 FIFO의 채워진 상태에 대한 정보를 제공하는 상태 핀에 따라 올바른 흐름 제어를 보장해야 합니다. 즉, FIFO가 가득 찼을 때는 데이터를 쓸 수 없습니다.
이미지 인터페이스 포트의 경우, 허용되는 이미지 포맷 목록을 정의해야 합니다. 이 목록은 가능한 VisualApplets 이미지 포맷(섹션 'Image Protocols' 참조)의 하위 집합을 구성하며, 포맷은 다음 속성으로 설명할 수 있습니다.
-
데이터 형식 uint 또는 int
-
Pixel data Bit Width N = [1..64]
-
Gray 또는 Color Format(집계된 너비 N을 갖는 단일 또는 3개의 데이터 구성 요소)
-
Color Format의 Flavor(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가 관련 커스텀 오퍼레이터 포트로 출력됩니다. 이를 통해 커스텀 오퍼레이터는 선택된 포맷에 맞게 동작을 조정할 수 있습니다.
General Purpose I/O 인터페이스를 사용하면 커스텀 오퍼레이터의 전용 신호 핀을 연결할 수 있습니다. 모든 GPIO 포트는 입력 또는 출력인 커스텀 오퍼레이터의 핀에 매핑됩니다.
양방향 핀은 지원되지 않습니다. VisualApplets에서 해당 오퍼레이터 포트는 SIGNAL 타입입니다.
![]() |
지원되지 않는 양방향 핀 |
|---|---|
|
GPIO 핀은 입력 또는 출력이어야 합니다. 양방향 핀은 지원되지 않습니다. |
우선 새로운 커스텀 오퍼레이터를 설명하는 몇 가지 세부 정보를 입력해야 합니다.
VisualApplets은 커스텀 오퍼레이터를 위한 VHDL 블랙박스와 시뮬레이션을 위한 해당 테스트 벤치를 생성하는 데 이러한 세부 정보를 사용합니다.
VisualApplets GUI를 통해 개별 커스텀 오퍼레이터의 구성을 입력합니다. VisualApplets은 넷리스트, 시뮬레이션 모델 및 문서와 관련하여 오퍼레이터 사양이 불완전하더라도 지정된 오퍼레이터를 디자인에서 즉시 사용할 수 있도록 만듭니다.
![]() |
Custom Library File |
|---|---|
|
포함된 모든 오퍼레이터가 있는 커스텀 라이브러리는 하나의 단일 항목으로 저장됩니다. 이 파일은 배포하여 VisualApplets에서 직접 적용할 수 있습니다. VisualApplets 설정에 지정된 Custom Library 디렉터리에 복사하기만 하면 됩니다. |
![]() |
XML 형식의 오퍼레이터 구성 |
|---|---|
|
VisualApplets은 커스텀 오퍼레이터 사양을 XML 형식으로 저장합니다. 예를 들어 버전 제어 시스템에서 처리하기 위해 커스텀 라이브러리에서 XML 콘텐츠를 파일로 내보낼 수 있습니다. 반대로 커스텀 오퍼레이터를 추가하기 위해 XML을 가져올 수도 있습니다(섹션 'Importing and Exporting Individual Custom Operators' 참조). 이 XML 파일이 어떻게 생겼는지 알 필요는 없습니다. 하지만 확인하고 싶다면 섹션 'XML Format for Custom Operator Specification'을 참조하세요. |
새로운 커스텀 operator 정의를 시작하기 전에, 해당 operator가 속할 커스텀 library를 먼저 생성해야 합니다.
새로운 커스텀 operator가 속할 커스텀 library가 이미 있는 경우, 이 섹션을 건너뛰고 'Creating a New Custom Operator' 섹션으로 진행하십시오.
새로운 커스텀 library를 생성하려면:
-
메뉴에서 메뉴 항목을 선택합니다.

-
새로운 커스텀 library의 이름을 입력합니다.
-
기본적으로 새로운 커스텀 operator library는 다음 형식으로 저장됩니다.
*.val이 library를 VisualApplets 버전 3.3.2 이하에서 열려면 다음을 선택하십시오. . -
를 클릭하십시오.

![]() |
유효한 C 식별자 규칙 준수 |
|---|---|
|
library 이름을 정의할 때 유효한 C 식별자 규칙을 준수해야 합니다. |
이제 새로운 커스텀 library가 생성되었습니다. operator 패널의 탭에서 확인할 수 있습니다.
커스텀 library 이름 위에 마우스를 올리면 library가 저장된 형식을 보여주는 툴팁이 표시됩니다. *.vl 이전 파일 형식:

새로운 커스텀 library를 생성하려면 커스텀 library 관련 파일이 모두 저장되는 디렉터리를 지정해야 할 수 있습니다. → → 에서 이 작업을 수행할 수 있습니다.

새로운 커스텀 operator를 정의하려면:
-
메뉴에서 메뉴 항목을 선택합니다.
-
열리는 하위 메뉴에서 를 선택합니다.

-
열리는 창에서 library 이름을 더블 클릭하여 커스텀 library를 선택합니다.

-
커스텀 operator의 이름을 입력합니다.

![[팁]](../common/images/admon/tip.png)
VHDL 명명 규칙 준수 VA GUI에서 operator 이름을 정의할 때 VHDL 명명 규칙을 준수해야 합니다.
VHDL 유효한 이름은 다음과 같이 정의됩니다.
"포트, 신호, 변수, 엔티티 이름, 아키텍처 본문 또는 유사한 객체의 유효한 이름은 문자로 시작하고 그 뒤에 공백 없이 임의 개수의 문자나 숫자가 오는 형태입니다. 유효한 이름은 명명된 식별자라고도 합니다. VHDL은 대소문자를 구분하지 않습니다. 단, 이름 내에 언더스코어(_)를 사용할 수 있으나 이름의 시작이나 끝에는 올 수 없습니다. 연속된 두 개의 언더스코어는 허용되지 않습니다."
-
저장하기 전에 새 operator의 Property를 정의해야 합니다.

새로운 커스텀 operator의 Property 정의에 대한 자세한 내용은 'Defining Basic Information about Custom Operator'를 참조하십시오.
-
버튼을 클릭합니다.
대화 상자가 열립니다. 여기서 커스텀 operator를 정의할 수 있습니다.
-
버튼을 클릭합니다.
이제 속해 있는 커스텀 라이브러리에서 새로 만든 커스텀 오퍼레이터를 확인할 수 있습니다.

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

![]() |
대신 오퍼레이터 템플릿 사용 |
|---|---|
|
또는 VisualApplets 설치 시 제공되는 커스텀 오퍼레이터 템플릿을 사용하여 새로운 커스텀 오퍼레이터를 정의할 수 있습니다. 템플릿 사용 방법에 대한 자세한 내용은 'Custom Operator Template' 섹션을 참조하십시오. |
첫 번째 단계로 커스텀 오퍼레이터의 인터페이스를 정의합니다.
-
공급업체 이름을 입력합니다. 임의의 문자열을 입력할 수 있으며, 이 정보는 사용자가 오퍼레이터를 식별하는 데 사용됩니다.
-
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.

-
탭으로 이동합니다.
탭에서 이미지 입력 포트의 Property를 설명합니다.
-
먼저 커스텀 오퍼레이터의 ImgIn 포트 입력 모드를 정의합니다.

![]() |
동기 및 비동기 오퍼레이터 포트 | |||||
|---|---|---|---|---|---|---|
|
오퍼레이터 포트는 동기식 또는 비동기식일 수 있습니다. VisualApplets에서 동기식이란 기본적으로 여러 포트의 데이터가 동기화되어 전송되는 것을 의미하며, 비동기식 포트는 정렬되지 않은 통신 패턴을 지원합니다. 포트는 공통 M-source가 있거나 SYNC 모듈에서 소스를 가져오는 경우에만 동기식이며, 해당 소스와 포트 사이에 임의의 구성으로 O-오퍼레이터가 존재할 수 있습니다. 오퍼레이터 입력 포트 간의 관계에 따라 다음과 같은 옵션으로 구분됩니다.
비동기식 출력을 가진 오퍼레이터는 허용되지 않습니다. 동기식 입력을 가진 오퍼레이터는 단일 출력만 가질 수 있습니다. 둘 이상의 출력이 필요한 경우 입력은 비동기식으로 선언해야 합니다. 여러 개의 출력이 있는 오퍼레이터를 생성하려면 입력을 비동기식으로 선언해야 합니다. 여러 개의 출력은 항상 동기식입니다. 두 클래스의 예시(VisualApplets 내장 오퍼레이터):
|
하나 이상의 이미지 입력 포트(ImgIn)를 정의할 수 있습니다. 각 ImgIn 포트는 지정한 횟수만큼 사용할 수 있습니다.
-
선택한 applet ( 버튼
를 클릭하여 첫 번째 이미지 입력 생성 (ImgIn) 포트입니다.
-
ImgIn 포트에 이름을 지정하고 필드에 입력 포트 수를 정의합니다. 1보다 큰 값을 설정하면 기본 이름과 인덱스로 구성된 이름의 포트 배열이 정의됩니다.

프로그램 창의 연산자 묘사 영역에 입력된 ImgIn 포트 배열이 즉시 표시됩니다.

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

-
에서 ImgIn 포트의 너비를 지정합니다.
-
에서 입력 데이터용 버퍼 FIFO의 깊이를 지정하십시오. 이 값은 VA 코어에서 최소한 제공해야 하며, 15에서 1023 사이의 2의 거듭제곱에서 1을 뺀 값이어야 합니다.
이미지 인터페이스 포트의 경우 허용되는 프로토콜 목록을 정의합니다. 프로토콜은 다음과 같은 속성으로 설명할 수 있습니다.
-
그레이 또는 컬러 형식 (총 너비 N의 단일 또는 3개 데이터 컴포넌트)
-
Color Format의 Flavor(RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)
-
Pixel data Bit Width N = [1..64]
-
Parallelism P = {1,2,4,8,16,32,64}
-
2D (배열), 1D (라인) 또는 0D (Raw)
-
데이터 형식 uint 또는 int
-
최대 이미지 크기
커널 크기는 암시적으로 1x1로 가정됩니다.
나열된 프로토콜에는 0부터 시작하는 번호가 매겨지며, 이를 통해 ID가 정의됩니다(아래 이미지의 패널 내 테이블의 왼쪽 열에서 확인 가능).
둘 이상의 프로토콜을 지정하는 경우, 커스텀 연산자가 입력 채널의 구성을 지원하도록 설계합니다. 이 경우 단일 포트를 통해 여러 가지 서로 다른 프로토콜을 구동할 수 있습니다.
커스텀 연산자 사용자는 특정 ImgIn 포트에서 사용할 프로토콜을 선택할 수 있습니다. VA 사용자가 선택한 내용에 따라 해당 ID가 관련 커스텀 연산자 포트로 출력됩니다. 이를 통해 커스텀 연산자는 선택한 프로토콜에 맞게 동작을 조정할 수 있습니다.
-
-
에서 프로토콜의 Color Format을 지정합니다.

허용되는 Color 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: 컬러 컴포넌트(YUV 색상 모델)당 Y/3 비트 및 Parallelism P를 사용하는 컬러 이미지
-
ycrcbYxP: 컬러 컴포넌트(YCrCb 색상 모델)당 Y/3 비트 및 Parallelism P를 사용하는 컬러 이미지
-
labYxP: 컬러 컴포넌트(LAB 색상 모델)당 Y/3 비트 및 Parallelism P를 사용하는 컬러 이미지
-
xyzYxP: 컬러 컴포넌트(XYZ 색상 모델)당 Y/3 비트 및 Parallelism P를 사용하는 컬러 이미지
-
-
열의 필드를 더블 클릭하고 특정 형식의 픽셀 데이터 너비를 지정합니다:

Pix.Width의 값 범위는 에서 선택한 항목에 따라 달라집니다:
Gray: 픽셀 데이터 너비(이하 X로 지칭)는 64비트로 제한됩니다.
All color formats: 픽셀 데이터 너비(이하 Y로 지칭)는 3의 배수여야 하며 63비트로 제한됩니다.
-
열의 필드를 더블 클릭하고 특정 형식의 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 ) 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 이미지의 경우 세 가지 색상 성분이 LSB에 맞춰 서브 워드 [0..Y-1]에 다음 순서로 패킹됩니다. 빨간색은 비트 [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와 동일한 규칙이 적용됩니다.
-
-
에서 프로토콜이 2D(Area), 1D(Line) 또는 0D(Raw) 이미지를 지원하는지 지정합니다.

-
: 이러한 선택적 필드를 사용하여 이미지 너비와 이미지 높이에 대한 제약 조건을 정의할 수 있습니다.
-
단계 6~10을 반복하여 ImgIn 포트가 지원할 프로토콜을 원하는 만큼 정의합니다.
-
단계 1~11을 반복하여 커스텀 오퍼레이터가 제공할 ImgIn 포트를 원하는 만큼 정의합니다.

탭에서 이미지 출력 포트의 Property를 설명합니다.
하나 이상의 이미지 출력 포트(ImgOut)를 정의할 수 있습니다. 각 ImgOut 포트는 지정한 만큼 자주 사용할 수 있습니다.
-
선택한 applet ( 버튼
첫 번째 이미지 출력을 생성하려면(ImgOut) 포트입니다.
-
ImgOut 포트에 이름을 지정합니다.
-
열의 필드를 더블 클릭하여 포트 배열을 만듭니다. Multiplicity가 1보다 크면 기본 이름과 인덱스로 구성된 이름의 포트 배열이 정의됩니다.

즉시 프로그램 창의 오퍼레이터 묘정에 입력된 ImgOut 포트 배열이 표시됩니다:

-
패널에서 이 ImgOut 포트가 지원하는 프로토콜의 속성을 지정합니다.
에서 ImgOut 포트의 너비를 지정합니다.
-
에서 VA 코드가 최소한 제공해야 하는 출력 데이터용 버퍼 FIFO의 깊이를 지정합니다. 값은 15에서 1023 사이의 2의 거듭제곱 빼기 1이어야 합니다.
이미지 인터페이스 포트의 경우 허용되는 프로토콜 목록을 정의합니다. 프로토콜은 다음과 같은 속성으로 설명할 수 있습니다.
-
Gray 또는 Color Format(집계된 너비 N을 갖는 단일 또는 3개의 데이터 구성 요소)
-
Color Format의 Flavor(RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)
-
Pixel data Bit Width N = [1..64]
-
Parallelism P = {1,2,4,8,16,32,64}
-
2D (배열), 1D (라인) 또는 0D (Raw)
-
데이터 형식 uint 또는 int
-
최대 이미지 크기
커널 크기는 암시적으로 1x1로 가정됩니다.
나열된 프로토콜에는 0부터 시작하는 번호가 매겨지며, 이를 통해 ID가 정의됩니다(아래 이미지의 패널 내 테이블의 왼쪽 열에서 확인 가능).
둘 이상의 프로토콜을 지정하는 경우, 커스텀 연산자가 입력 채널의 구성을 지원하도록 설계합니다. 이 경우 단일 포트를 통해 여러 가지 서로 다른 프로토콜을 구동할 수 있습니다.
커스텀 오퍼레이터 사용자는 특정 ImgOut 포트에서 사용하려는 프로토콜을 선택할 수 있습니다. VA 사용자가 선택한 내용에 따라 해당 ID가 관련 커스텀 오퍼레이터 포트로 출력됩니다. 이를 통해 커스텀 오퍼레이터는 선택한 프로토콜에 맞게 동작을 조정할 수 있습니다.
-
-
에서 프로토콜의 Color Format을 지정합니다.

허용되는 Color 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: 컬러 컴포넌트(YUV 색상 모델)당 Y/3 비트 및 Parallelism P를 사용하는 컬러 이미지
-
ycrcbYxP: 컬러 컴포넌트(YCrCb 색상 모델)당 Y/3 비트 및 Parallelism P를 사용하는 컬러 이미지
-
labYxP: 컬러 컴포넌트(LAB 색상 모델)당 Y/3 비트 및 Parallelism P를 사용하는 컬러 이미지
-
xyzYxP: 컬러 컴포넌트(XYZ 색상 모델)당 Y/3 비트 및 Parallelism P를 사용하는 컬러 이미지
-
-
Pix.Width 열의 필드를 더블 클릭하고 특정 형식의 픽셀 데이터 너비를 지정합니다:

Pix.Width의 값 범위는 에서 선택한 항목에 따라 달라집니다.
Gray: 픽셀 데이터 너비(이하 X로 지칭)는 64비트로 제한됩니다.
All color formats: 픽셀 데이터 너비(이하 Y로 지칭)는 3의 배수여야 하며 63비트로 제한됩니다.
-
열의 필드를 더블 클릭하고 특정 형식의 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 ) 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 이미지의 경우 세 가지 색상 성분이 LSB에 맞춰 서브 워드 [0..Y-1]에 다음 순서로 패킹됩니다. 빨간색은 비트 [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와 동일한 규칙이 적용됩니다.
-
-
에서 프로토콜이 2D(Area), 1D(Line) 또는 0D(Raw) 이미지를 지원하는지 지정합니다.

-
: 이러한 선택적 필드를 사용하여 이미지 너비와 이미지 높이에 대한 제약 조건을 정의할 수 있습니다.
-
ImgOut 포트가 지원할 프로토콜 개수만큼 6단계부터 10단계까지 반복합니다.
-
커스텀 오퍼레이터가 지원할 ImgOut 포트 개수만큼 1단계부터 11단계까지 반복합니다.
General Purpose I/O 인터페이스를 사용하면 커스텀 오퍼레이터의 전용 신호 핀을 연결할 수 있습니다. 모든 GPIO 포트는 입력 또는 출력인 커스텀 오퍼레이터의 핀에 매핑됩니다.
양방향 핀은 지원되지 않습니다. VisualApplets에서 해당 오퍼레이터 포트는 SIGNAL 유형입니다.
-
탭으로 이동합니다.
-
다음 항목을 사용하여 필요한 만큼 GPI와 GPO를 추가합니다. 버튼
.
-
필드를 더블 클릭하여 특정 GPI 또는 GPO의 이름을 지정합니다.
정의된 GPI와 GPO는 프로그램 창의 좌측 상단 패널에 있는 커스텀 오퍼레이터 묘사 영역에 즉시 표시됩니다.

![]() |
양방향 핀 지원 안 함 |
|---|---|
|
핀은 입력 또는 출력 중 하나여야 합니다. 양방향 핀은 지원되지 않습니다. |
커스텀 오퍼레이터는 하나 이상의 메모리 뱅크(DRAM, SRAM 등)에 액세스하도록 설정할 수 있습니다.
모든 메모리 포트에는 쓰기 및 읽기 명령을 위한 FIFO 방식의 인터페이스가 있습니다. FIFO는 커스텀 오퍼레이터의 VA 부분에 상주하므로, FIFO가 아닌 흐름 제어만 구현하면 됩니다. 커스텀 오퍼레이터에 연결된 메모리 컨트롤러로 FIFO 콘텐츠를 전달하는 타이밍은 VisualApplets에 의해 완전히 제어됩니다.
탭에서 오퍼레이터가 외부 메모리에 액세스하도록 정의할 수 있습니다. 최대 4개의 포트를 지정할 수 있습니다. 오퍼레이터에 필요한 메모리 인터페이스 속성을 지정할 수 있습니다.
![]() |
대상 플랫폼의 Memory Layout 준수 |
|---|---|
|
(커스텀 오퍼레이터가 포함된 앱렛이 실행될) 잠재적 대상 플랫폼의 메모리 레이아웃을 염두에 두세요. |

|
파라미터 이름 |
Type |
설명 |
|---|---|---|
|
|
Integer |
Data width |
|
|
Integer |
Address width |
|
|
Integer |
쓰기 액세스를 표시하기 위한 플래그의 Width입니다. 이 파라미터는 >= 1이어야 합니다. |
|
|
Integer |
읽기 액세스를 표시하기 위한 플래그의 Width입니다. 이 파라미터는 >= 8이어야 합니다. |
|
|
String |
이 파라미터는 메모리 인터페이스 클록과 디자인 클록의 관계를 나타냅니다. 다음과 같은 값을 사용할 수 있습니다.
|
탭에서 커스텀 오퍼레이터가 제공할 쓰기 및 읽기 레지스터를 정의할 수 있습니다. 이러한 각 레지스터에는 전용 오퍼레이터 파라미터를 통해 VisualApplets에서 액세스합니다. (파라미터 이름은 레지스터 이름과 동일합니다.)
-
탭으로 이동합니다.
-
에서 커스텀 오퍼레이터에 지정할 쓰기 레지스터를 정의합니다.
-
각 쓰기 레지스터의 특정 너비를 정의합니다.
-
에서 커스텀 오퍼레이터에 지정할 읽기 레지스터를 정의합니다.
-
각 읽기 레지스터의 특정 너비를 정의합니다.
관련 오퍼레이터 파라미터가 대화 상자의 왼쪽 하단 패널에 즉시 표시됩니다.

-
를 클릭합니다.
'Defining an Individual Custom Operator via GUI' 섹션에 설명된 대로 모든 세부 정보를 입력하면 실제 VHDL 코딩을 진행할 준비가 완료됩니다. 무엇보다도 VisualApplets에서 VHDL 블랙박스와 테스트 벤치를 생성해야 합니다.
VHDL 블랙박스 및 테스트 벤치 생성을 트리거하려면:
-
VisualApplets 프로그램 창의 패널에서 탭으로 이동합니다.
-
커스텀 라이브러리를 열고 구현하려는 커스텀 오퍼레이터를 선택합니다.
-
오퍼레이터 이름을 마우스 우클릭하고 하위 메뉴에서 → 을 선택합니다.

-
생성된 VHDL 파일을 저장할 폴더를 지정합니다.
이제 생성이 시작됩니다. 생성이 완료되면 확인 대화 상자가 나타납니다. 를 클릭하여 확인합니다.
지정한 폴더에서 생성된 모든 파일을 확인할 수 있습니다.
생성된 블랙박스는 GUI를 통해 지정한 모든 포트를 제공합니다('Defining an Individual Custom Operator via GUI' 참조).
이 장에서는 생성된 VHDL 블랙박스에서 이러한 포트가 어떻게 구성되는지 자세히 설명합니다.
VisualApplets은 두 개의 클럭 도메인을 지원합니다. 기본 디자인 클럭과, 해당 클럭과 위상이 같고 주파수가 두 배인 파생 클럭이 하나씩 존재합니다. 따라서 커스텀 오퍼레이터에는 두 개의 클럭 입력이 있습니다. 추가로 다음이 존재합니다. Reset 및
Enable 위에서 설명한 입력.
|
포트 |
방향 |
너비 |
설명 |
|---|---|---|---|
|
|
In |
1 |
Base design clock |
|
|
In |
1 |
Clock sync. to |
|
|
In |
1 |
Reset of operator |
|
|
In |
1 |
Enable processing |
다음 섹션에 설명된 쓰기 레지스터 포트 정의 'Defining an Individual Custom Operator via GUI' 다음과 같은 인터페이스로 이어집니다. PORTID 는 레지스터 이름이며,
PORTIDWidth 은 정의된 레지스터 너비입니다.
|
포트 |
방향 |
너비 |
설명 |
|---|---|---|---|
|
|
In |
PORTID |
레지스터 데이터 |
|
|
In |
1 |
신호 쓰기 액세스 |
'Defining the Registers of the Custom Operator'에 설명된 대로 읽기 레지스터 포트를 정의하면 그에 따라 다음과 같은 인터페이스가 생성됩니다.
|
포트 |
방향 |
너비 |
설명 |
|---|---|---|---|
|
|
출력 |
PORTID |
레지스터 데이터 |
|
|
In |
1 |
신호 읽기 액세스 |
VisualApplets 코어와 커스텀 오퍼레이터 간의 데이터 통신을 위해 'Defining the Image Input Ports'에 설명된 이미지 통신 포트를 구성할 수 있습니다. 통신은 단순 FIFO 인터페이스와 추가 형식 식별자 포트를 통해 이루어집니다.
VisualApplets 코어에서 커스텀 오퍼레이터로 데이터를 전송하기 위한 ImgIn 채널은 다음과 같은 인터페이스로 이어지며, 여기서 PORTID는 해당 포트 타입 이름이고 X는 동일한 종류의 여러 포트를 구분하기 위한 포트 번호입니다.
|
포트 |
방향 |
너비 |
설명 |
|---|---|---|---|
|
|
In |
PORTID |
커스텀 오퍼레이터로 유입되는 데이터 |
|
|
출력 |
1 |
입력 데이터 수락 |
|
|
In |
1 |
라인 끝 신호. 이 플래그가 활성화되면 데이터에 픽셀 값이 포함되지 않습니다. |
|
|
In |
1 |
프레임 끝 신호. 이 플래그가 활성화되면 데이터에 픽셀 값이 포함되지 않습니다. 이 플래그는 라인 끝 신호도 함께 신호로 전달될 때만 어설션됩니다. |
|
|
In |
1 |
버퍼 FIFO가 비어 있음 |
|
|
In |
|
버퍼 FIFO의 단어 수. 이 신호는 다음과 같은 FIFO 플래그를 생성하는 데 사용할 수 있습니다. |
|
|
In |
|
현재 이미지 데이터 형식을 알리는 미리 정의된 파라미터. N은 이 포트에 지정된 이미지 형식의 수입니다. |
아래 그림은 ImgIn 포트에서의 데이터 흐름을 보여줍니다. 포트 이름 구성 요소 PORTIDX가 ImgIn으로 대체되었습니다. 파형은 3x2 크기의 2차원 프레임 입력을 보여줍니다.
ImgIn 포트가 여러 O-동기식 입력 포트의 일부인 경우, 모든 포트가 동시에 FIFO 데이터를 소비해야 합니다. 이 경우 모든 포트의 FIFO Fill 수준이 정확히 일치하므로 오퍼레이터는 여러 O-동기식 입력 중 하나의 Fill 수준에 따라 흐름 제어만 구현하면 됩니다.

커스텀 오퍼레이터에서 VisualApplets 코어로 데이터를 전송하기 위한 ImgOut 채널은 다음과 같은 인터페이스로 이어지며, 여기서 PORTID는 해당 포트 타입 이름이고 X는 동일한 종류의 여러 포트를 구분하기 위한 포트 번호입니다.
|
포트 |
방향 |
너비 |
설명 |
|---|---|---|---|
|
|
출력 |
PORTID |
출력 데이터 |
|
|
출력 |
1 |
Output data valid |
|
|
출력 |
1 |
라인 종료 알림으로 현재 쓰기 액세스 신호를 보냅니다. 이때 쓰기 데이터는 픽셀 데이터로 해석되지 않습니다. |
|
|
출력 |
1 |
프레임 종료 알림으로 현재 쓰기 액세스 신호를 보냅니다. 이때 쓰기 데이터는 픽셀 데이터로 해석되지 않습니다. 이 플래그는 동시에 라인 종료 스트로브와 상관관계가 있어야 합니다. |
|
|
In |
1 |
버퍼 FIFO가 가득 차서 더 이상 데이터가 수락되지 않습니다. |
|
|
In |
|
버퍼 FIFO의 단어 수. 이 신호는 다음과 같은 FIFO 플래그를 생성하는 데 사용할 수 있습니다. |
|
|
In |
|
현재 이미지 데이터 형식을 알리는 미리 정의된 파라미터. N은 이 포트에 지정된 이미지 형식의 수입니다. |
아래 그림은 ImgOut 포트에서의 데이터 흐름을 보여줍니다. 파형은 3x2 크기의 2차원 프레임 출력을 보여줍니다. ImgOut 포트가 여러 O-synchronous 출력 포트의 일부인 경우, 모든 포트가 동시에 데이터를 출력해야 합니다.

커스텀 오퍼레이터는 최대 4개의 메모리 포트를 갖도록 설정할 수 있습니다. 생성된 인터페이스의 I/O 포트에는 접미사 X가 붙으며, 여기서 X는 메모리 포트의 인덱스입니다.
|
이름 |
방향 |
너비 |
설명 |
|---|---|---|---|
|
|
출력 |
|
VisualApplets 코어를 통해 메모리로 쓰기 데이터 출력 |
|
|
출력 |
|
쓰기 플래그 출력 |
|
|
출력 |
|
쓰기 주소 |
|
|
출력 |
1 |
쓰기 명령 발행 |
|
|
출력 |
1 |
이 쓰기 포트에 대한 우선순위 요청 |
|
|
In |
1 |
단일 추가 쓰기 명령만 수락될 수 있음 |
|
|
In |
1 |
관련 FIFO가 가득 차서 쓰기 명령이 수락되지 않음 |
|
|
In |
1 |
쓰기 명령용 FIFO가 비어 있음 |
|
|
In |
4 |
버퍼링된 쓰기 명령 수 |
|
|
In |
|
VisualApplets 코어에서 쓰기 플래그 출력 |
|
|
In |
1 |
쓰기 플래그 입력 유효 – 다음을 신호함 |
|
|
출력 |
|
읽기 플래그 |
|
|
출력 |
|
읽기 주소 |
|
|
출력 |
1 |
읽기 명령 발행 |
|
|
출력 |
1 |
이 읽기 포트에 대한 우선순위 요청 |
|
|
In |
1 |
단일 추가 읽기 명령만 수락될 수 있음 |
|
|
In |
1 |
관련 FIFO가 가득 차서 읽기 명령이 수락되지 않음 |
|
|
In |
1 |
읽기 명령용 FIFO가 비어 있음 |
|
|
In |
4 |
버퍼링된 읽기 명령 수 |
|
|
In |
|
Read flag input – 해당 조건일 때만 유효함 |
|
|
In |
|
읽기 데이터 입력 |
|
|
In |
1 |
읽기 데이터 유효함 |

위 그림은 메모리 인터페이스 프로토콜의 파형을 보여줍니다.
커스텀 오퍼레이터의 인터페이스 설명('Defining an Individual Custom Operator via GUI' 섹션)에 정의된 모든 GPIO 입력 또는 출력 신호는 결과 오퍼레이터 인터페이스에 해당하는 입력 또는 출력 포트를 갖습니다. 범용 핀이 선언되면 다음 포트가 생성됩니다.
-
iSig_이름 다음 이름의 GPIO 입력 신호용: 이름. -
oSig_이름 다음 이름의 GPIO 출력 신호용: 이름.
커스텀 오퍼레이터 모듈이 포함된 VisualApplets 디자인을 에뮬레이션하기 위해, VisualApplets는 커스텀 오퍼레이터에 연결되는 인터페이스를 위한 시뮬레이션 테스트 벤치를 생성합니다.
각 인터페이스 포트는 File I/O에 의해 독립적으로 구동되며 에뮬레이션됩니다. 시뮬레이션 엔티티는 다음 요소로 구성됩니다.
-
레지스터 액세스 에뮬레이션. 스티뮬러스 파일에 따라 일련의 레지스터를 쓰고 읽을 수 있습니다.
-
ImgIn 유형의 포트에 연결된 프레임 소스용 에뮬레이터. 파일에 의해 자극을 받아 이러한 종류의 모듈은 프레임 데이터를 ImgIn으로 출력합니다.
-
ImgOut 유형의 포트에 연결된 프레임 싱크용 에뮬레이터. 이 종류의 모듈은 ImgOut에 연결된 오퍼레이터를 에뮬레이션합니다. 모듈은 수신된 데이터를 파일에 기록합니다.
-
메모리 포트 에뮬레이터.
-
GPIO 에뮬레이터. 입력용 각 GPIO 신호는 파일로 구성된 신호 생성기에 의해 구동됩니다. 각 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;
테스트 벤치는 커스텀 오퍼레이터의 인스턴스를 생성하고 프로토콜 에뮬레이션 모듈을 각 인터페이스 포트에 연결합니다. 다음 섹션에서는 다양한 종류의 에뮬레이터, 스티뮬러스 파일을 통해 이를 제어하는 방법, 그리고 출력 파일이 생성되는 방법을 설명합니다.
생성된 테스트 벤치는 레지스터 액세스 인터페이스용 에뮬레이터를 구현합니다. 에뮬레이터는 단일 프로세스로 디자인을 주소 지정하도록 구성됩니다. 쓰기 및 읽기 레지스터의 주소는 0x4에서 시작하며, 레지스터 주소는 지정된 커스텀 오퍼레이터 컴포넌트의 레지스터 인터페이스 포트 시퀀스에 따라 1씩 증가합니다(위의 예시 컴포넌트와 같이 RegExample). 읽기 및 쓰기를 위한 레지스터 주소는 독립적으로 카운트됩니다. 에뮬레이터는 엔티티 파라미터에 의해 설정된 텍스트 파일에 의해 구동됩니다.
Register_StimuliFileName 위의 VHDL 코드에 제공된 바와 같습니다.
stimuli 파일에는 다음 명령어가 포함될 수 있습니다.
|
명령 |
설명 |
|---|---|
|
|
나머지 줄은 주석입니다. |
|
|
global reset 에뮬레이트 |
|
|
process reset을 에뮬레이트합니다. 이 명령어의 구문은 다음과 같습니다. |
|
|
process를 활성화합니다. 구문은 다음과 같습니다. |
|
|
지정된 클럭 사이클 수만큼 대기합니다. 구문은 다음과 같습니다. |
|
|
레지스터 쓰기: |
|
|
레지스터 읽기: |
모든 명령어의 마지막 파라미터 뒤에는 “#” 기호로 시작하는 주석을 추가할 수 있습니다.
다음 코드는 위에서 설명한 테스트 벤치에 따라 레지스터에 액세스하는 예시 stimuli 파일입니다. 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 커스텀 operator로 유입되는 데이터 시퀀스에 대한 정보를 제공하는 stimuli 파일에 의해 구동됩니다. 존재하는 모든 ImgIn 포트에 대해 테스트 벤치에는 <PORTIDX>_StimuliFileName where <PORTIDX제네릭이 있습니다. >는 해당 이미지 입력 포트 유형 이름 뒤에 포트 번호가 붙은 형식입니다. 파일 내의 각 행은 다음 구문을 따라야 합니다.
<Command> <Data> <EndOfLine> <EndOfFrame> <DataValid>
여기서 <Command> 은(는) 세 글자 명령어이며, <Data> 은(는) 16진수 데이터 워드를 제공하고, 나머지 세 개의 파라미터는 이미지 프로토콜 플래그에 해당합니다.
다음 표는 사용 가능한 명령어를 설명합니다.
|
명령 |
설명 |
|---|---|
|
|
Data 명령어. 이 명령어는 포트의 입력이 될 데이터를 제공하며
|
|
|
대기 명령어입니다. 파라미터 |
|
|
FID 입력을 설정합니다. 파라미터 |
모든 명령줄에는 "#"로 시작하는 주석을 추가할 수 있습니다.
다음 코드는 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 FID 상태 시퀀스에 대한 정보가 제공되는 자극 파일에 의해 구동됩니다. 존재하는 모든 ImgOut 포트에 대해 VA_Design_Emulator 엔티티에는 제네릭이 있습니다.
<PORTIDX>_StimuliFileName 여기서
<PORTIDX> 은(는) 해당 이미지 출력 포트 유형의 이름 뒤에 포트 번호가 붙은 형식입니다. 구문은 다음의 자극과 정확히 동일합니다. ImgIn 인터페이스를 제외하고는 DAT 명령을 사용할 수 없습니다. 간단한 자극 파일은 다음과 같을 수 있습니다:
WCK 00000010 0 0 0 #Format: Command Data(hex)
FID 00000001 0 0 0
WCK 0000FFFF 0 0 0
파라미터
<EndOfLine>,<EndOfFrame> 및
<DataValid> 은(는) 실제로 의미가 없습니다.
이 ImgOut 생성된 테스트 벤치에 존재하는 인터페이스 에뮬레이터는 수신된 데이터를 파일에 씁니다. 이를 위해 테스트 벤치 엔티티에는 제네릭이 있습니다.
<PORTIDX>_DumpFileName. 시뮬레이션 중에 지정된 이름의 파일이 생성되고 데이터가 다음을 사용하여 기록됩니다. DAT 및
WCK 명령은 다음과 정확히 일치하는 형식의 자극 파일 형식으로 ImgIn 인터페이스 에뮬레이터.
커스텀 오퍼레이터가 메모리 인터페이스를 구현할 때 테스트 벤치는 메모리 에뮬레이션 모듈을 해당 인터페이스 포트에 연결합니다. 커스텀 오퍼레이터는 VisualApplets에 의해 완전히 제어되며 플랫폼이나 디자인에 따라 달라질 수 있으므로 메모리 인터페이스의 특정 타이밍(읽기 데이터가 반환될 때까지의 시간 등)에 의존하지 않을 수 있습니다.
전용 입력 신호의 에뮬레이션은 자극 파일에 의해 구동되는 각 신호에 대해 개별적으로 수행됩니다. 여기서는 신호 상태 시퀀스에 대한 정보가 제공됩니다. 자극 파일은 아래에 설명된 여러 명령어로 구성될 수 있습니다. 존재하는 모든 출력 신호 포트에 대해 테스트 벤치 엔티티에는 제네릭이 있습니다.
iSig_<NAME>_StimuliFileName 여기서
<NAME> 은(는) 관련 포트 이름입니다.
다음 표는 사용 가능한 명령어를 설명합니다.
|
명령 |
설명 |
|---|---|
|
|
신호 설정. 이 명령어는 포트의 출력이 설정될 |
|
|
Wait 명령어. 구문은 다음과 같습니다: |
|
|
처음부터 다시 시작합니다. 명령어 해석기는 자극 파일의 첫 번째 줄부터 다시 시작합니다. 이 명령어에는 매개변수가 없습니다. 이 명령어는 파일의 첫 번째 명령어를 동일한 클럭 틱에서 실행하므로 간격 없이 루프를 구성할 수 있습니다. |
|
|
현재 상태에서 중지합니다. 명령어 해석기가 중지되고, 시뮬레이션이 끝날 때까지 현재 신호 상태가 그대로 유지됩니다. 이 명령어에는 매개변수가 없습니다. |
모든 명령줄에는 "#"로 시작하는 주석을 추가할 수 있습니다.
다음 코드는 커스텀 오퍼레이터 입력 신호가 5클록 동안 low 상태를 유지하고 7클록 동안 high 상태가 되도록 하는(동기화 방식) 예시 자극 파일입니다.
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 명령은 지정된 입력 신호에 대한 자극 파일의 명령과 정확히 일치합니다.
커스텀 오퍼레이터를 VisualApplets에 완전히 통합하려면 하이 레벨 시뮬레이션 컴포넌트를 제공해야 합니다. 하이 레벨 시뮬레이션 컴포넌트는 미리 정의된 내보낸 C-함수 세트와 함께 동적 링크 라이브러리로 컴파일되어야 합니다. → 탭 아래의 오퍼레이터 사양에 이 파일을 추가합니다.

VisualApplets 내에서 하이 레벨 시뮬레이션을 수행하려면 다음 함수를 내보내야 합니다.
int SimulateOPNAME (va_custom_op_sim_handle simHandle)
여기서 OPNAME은(는) 커스텀 오퍼레이터의 이름입니다.
하이 레벨 시뮬레이션은 다음 요구 사항에 따라 수행되어야 합니다.
-
Frame based simulation - 각 이미지 입력 포트에서 하나 이상의 프레임 사용 가능 여부를 쿼리할 수 있습니다. 시뮬레이션 시작에 필요한 모든 포트가 프레임을 제공할 수 있는 경우, 해당되는 출력 프레임을 계산하여 적절한 함수 호출을 통해 내보내야 합니다. 1차원 이미지 데이터의 경우 데이터 스트림이 자동으로 프레임으로 분할되며 2D 데이터와 마찬가지로 시뮬레이션됩니다.
-
Bit accurate simulation – 결과 프레임의 계산은 비트 단위로 정확해야 합니다. 즉, 출력 데이터는 하드웨어 구현에 의해 생성된 데이터와 정확히 일치해야 합니다.
-
Keeping consistency of flow – 오퍼레이터 입력 포트가 서로 동기화된 경우 입력 이미지도 그에 맞춰 가져와야 합니다. 여러 출력이 정의된 경우 이미지가 동시에 출력되어야 합니다. 시뮬레이션 함수의 관점에서 이는 하나의 출력 링크로 프레임이 출력될 때, 시뮬레이션 함수가 반환되기 전에 다른 모든 출력 링크로도 프레임이 출력되어야 함을 의미합니다.
오퍼레이터의 동작은 일반적으로 오퍼레이터 파라미터 세트에 따라 달라지므로, 이러한 파라미터는 다음 인터페이스를 통해 쿼리할 수 있습니다.
|
번호 |
기능 |
설명 |
|---|---|---|
|
1 |
|
오퍼레이터 파라미터의 값을 가져옵니다. |
커스텀 오퍼레이터를 위한 이미지 데이터를 가져오고, 생성하고, 저장하기 위해 VisualApplets에서 여러 함수가 제공됩니다.
|
번호 |
기능 |
설명 |
|---|---|---|
|
1 |
|
ImgIn 포트에서 사용 가능한 이미지를 가져옵니다. |
|
2 |
|
ImgOut 포트로 이미지를 출력합니다. |
|
3 |
|
ImgIn 포트가 이미지를 전달할 수 있는지 여부를 쿼리합니다. |
|
4 |
|
ImgOut 포트가 이미지를 받을 수 있는지 여부를 쿼리합니다. |
|
5 |
|
새 이미지를 생성합니다. |
|
6 |
|
이미지를 삭제합니다. |
|
7 |
|
나중에 이미지에 참조할 수 있는 이름을 제공하여 오퍼레이터 인스턴스의 로컬 스토리지에 이미지를 저장합니다. |
|
8 |
|
오퍼레이터 인스턴스 내에 저장된 이미지 수를 쿼리합니다. |
|
9 |
|
인덱스로 저장된 이미지를 가져옵니다. |
|
10 |
|
인덱스로 저장된 이미지의 이름을 가져옵니다. |
|
11 |
|
이름으로 저장된 이미지를 가져옵니다. |
|
12 |
|
지정된 포트와 연결된 포맷으로 초기화되는 새로운 이미지 포맷 핸들을 생성합니다. |
|
13 |
|
주어진 포맷의 복사본인 새로운 이미지 포맷을 생성합니다. |
|
14 |
|
이전에 생성된 이미지 포맷 핸들을 삭제합니다. |
이미지 핸들을 통해 이미지를 조작하기 위해 다음 함수들을 사용할 수 있습니다:
|
번호 |
기능 |
설명 |
|---|---|---|
|
1 |
|
이미지 포맷을 가져옵니다. |
|
2 |
|
프레임의 Property를 설정합니다(예: 높이). |
|
3 |
|
프레임의 Property를 가져옵니다. |
|
4 |
|
픽셀 컴포넌트 값을 설정합니다. |
|
5 |
|
픽셀 컴포넌트 값을 가져옵니다. |
|
6 |
|
라인의 개별 길이를 설정합니다. |
|
7 |
|
개별 라인의 길이를 가져옵니다. |
이미지 포맷은 다음 함수들을 통해 조작할 수 있습니다:
|
번호 |
기능 |
설명 |
|---|---|---|
|
1 |
|
이미지 포맷 Property를 설정합니다(예: 최대 너비). |
|
2 |
|
이미지 포맷 Property를 가져옵니다. |
시뮬레이션 함수는 다음 함수들을 사용하여 VisualApplets 시뮬레이션 시스템에 상태 메시지(예: 오류 메시지)를 주입할 수 있습니다:
|
번호 |
기능 |
설명 |
|---|---|---|
|
1 |
|
상태 메시지를 생성합니다. |
|
2 |
|
상태 메시지의 Property를 설정합니다(심각도 등). |
|
3 |
|
시뮬레이션 엔진에 상태 메시지를 제출합니다. |
정보를 조회하고 파라미터를 구성하려면 소프트웨어 인터페이스를 통해 데이터를 교환해야 합니다. 인터페이스 함수를 단순하게 유지하면서도 타입 안정성을 제공하기 위해 데이터 추상화 메커니즘이 구현되어 있습니다. 타입이 다른 데이터를 통신해야 할 때마다 va_data 라는 데이터 구조가 사용되며, 이는 데이터에 대한 참조와 기본 데이터 타입에 대한 정보를 포함합니다. 이 데이터 구조는 사용자가 생성하지만 아래에 나열된 전용 함수들로 구성됩니다. 다음 표는 이 메서드에서 처리하는 데이터 타입을 보여줍니다:
|
Data Type |
설명 |
|---|---|
|
|
32비트 정수로 제공되는 enum 항목 |
|
|
32비트 부호 있는 정수 |
|
|
32비트 부호 없는 정수 |
|
|
64비트 부호 있는 정수 |
|
|
64비트 부호 없는 정수 |
|
|
부동 소수점 숫자, 더블 정밀도 |
|
|
32비트 부호 있는 정수 배열 |
|
|
32비트 부호 없는 정수 배열 |
|
|
64비트 부호 있는 정수 배열 |
|
|
64비트 부호 없는 정수 배열 |
|
|
더블 숫자 배열 |
|
|
다음 형식으로 제공되는 문자열: |
이전에 생성된 구성: 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)
문자열 통신에는 두 가지 옵션이 있습니다:
-
다음을 통해 char 배열 제공:
va_data_string(). 그런 다음 조회된 문자열 데이터가 해당 배열로 복사됩니다. -
다음에 대한 포인터 제공:
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 정보가 포함됩니다.
다음은 지정된 시뮬레이션 인터페이스 함수의 매개변수 및 반환 값에 대한 자세한 설명입니다.
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
파라미터 이름입니다. |
|
Parameter 3 |
조회된 값에 대한 반환 파라미터입니다. |
|
설명 |
지정된 이름을 가진 파라미터의 값을 반환합니다. |
|
반환 값 |
0 : 값이 조회된 데이터입니다. <0: Cannot query parameter |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
오퍼레이터 포트의 이름입니다. |
|
Parameter 3 |
이미지 핸들에 대한 반환 파라미터입니다. |
|
설명 |
지정된 포트에서 오퍼레이터로 진입하는 이미지를 가져와 해당 이미지를 참조하는 핸들을 반환합니다. 시뮬레이션 함수에서 반환하기 전에 이 이미지는 다음을 호출하여 저장되거나 |
|
반환 값 |
0: OK <0 : Cannot get image |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
오퍼레이터 포트의 이름입니다. |
|
Parameter 3 |
이미지 핸들입니다. |
|
설명 |
지정된 포트로 이미지를 출력합니다. |
|
반환 값 |
0 : 작업이 성공적으로 완료되었습니다. <0: Cannot output image |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
오퍼레이터 입력 포트의 이름입니다. |
|
설명 |
지정된 이름을 가진 포트에 사용 가능한 입력 이미지가 있는지 여부를 반환합니다. |
|
반환 값 |
true : 이미지를 사용할 수 있습니다. false : 사용할 수 있는 이미지가 없습니다. |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
오퍼레이터 출력 포트의 이름입니다. |
|
설명 |
지정된 이름을 가진 출력 포트가 이미지를 받을 수 있는지 여부를 반환합니다. |
|
반환 값 |
true : 다음 이미지를 처리할 준비가 완료된 출력입니다. false : 이미지를 받을 준비가 되지 않은 출력입니다. |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
새 이미지의 이미지 형식입니다. |
|
Parameter 3 |
이미지 핸들에 대한 반환 파라미터입니다. |
|
설명 |
파라미터 2에서 지정한 형식을 기반으로 빈 이미지를 생성합니다. 시뮬레이션 함수에서 반환하기 전에 이 이미지는 다음을 호출하여 저장되거나
|
|
반환 값 |
0: OK <0 : Could not create image |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
삭제할 이미지의 핸들입니다. |
|
설명 |
지정된 이미지 핸들이 참조하는 이미지를 삭제합니다. |
|
반환 값 |
0 : 작업이 성공적으로 완료되었습니다. <0: Error during deleting image |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
이미지 핸들입니다. |
|
Parameter 3 |
이미지가 저장될 이름입니다. 나중에 이 이름으로 이미지를 조회할 수 있습니다. |
|
설명 |
오퍼레이터 시뮬레이션 인스턴스의 로컬 스토리지에 이미지를 저장합니다. |
|
반환 값 |
0 : 작업이 성공적으로 완료되었습니다. |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
이미지 개수에 대한 반환 파라미터입니다. |
|
설명 |
오퍼레이터 시뮬레이션 인스턴스 내에 저장된 이미지의 개수를 반환합니다. |
|
반환 값 |
0: OK <0: Can’t query information. |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
저장된 이미지 배열 내의 인덱스입니다. |
|
Parameter 3 |
이미지 핸들에 대한 반환 파라미터입니다. |
|
설명 |
이전에 저장된 이미지를 가져옵니다. 이미지는 이미지 스토리지에서 제거됩니다. 시뮬레이션 함수에서 반환하기 전에 이 이미지는 다음을 호출하여 다시 저장하거나 |
|
반환 값 |
0: OK <0 : Could not get image |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
저장된 이미지 배열 내의 인덱스입니다. |
|
설명 |
이미지 이름의 문자열을 반환합니다. |
|
반환 값 |
Not |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
이미지가 저장된 이름입니다. |
|
Parameter 3 |
이미지 핸들에 대한 반환 파라미터입니다. |
|
설명 |
지정한 스토리지 이름으로 이전에 저장된 이미지를 가져옵니다. 이미지는 이미지 스토리지에서 제거됩니다. 시뮬레이션 함수에서 반환하기 전에 이 이미지는 다음을 호출하여 다시 저장해야 합니다.
|
|
반환 값 |
0: OK <0 : Could not get image |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
오퍼레이터 포트의 이름입니다. |
|
Parameter 3 |
포맷 핸들에 대한 반환 포인터입니다. |
|
설명 |
새 이미지 포맷 객체를 생성하고 해당 핸들을 반환합니다. 포맷은 지정한 이름을 가진 포트의 포맷으로 초기화됩니다. 시뮬레이션 함수에서 반환하기 전에 다음을 호출하여 포맷을 삭제해야 합니다.
|
|
반환 값 |
0: OK <0 : Could not create format |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
복사되는 포맷의 핸들입니다. |
|
Parameter 3 |
포맷 핸들에 대한 반환 파라미터입니다. |
|
설명 |
새 이미지 포맷 객체를 생성하고 해당 핸들을 반환합니다. 포맷은 제공된 포맷으로 초기화됩니다. 시뮬레이션 함수에서 반환하기 전에 다음을 호출하여 포맷을 삭제해야 합니다.
|
|
반환 값 |
Not |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
오퍼레이터 시뮬레이션 함수에 제공되는 시뮬레이션 핸들. |
|
매개변수 2 |
삭제되는 포맷의 핸들입니다. |
|
설명 |
지정한 포맷 핸들이 참조하는 이미지 포맷 객체를 삭제합니다. |
|
반환 값 |
0: OK <0 : Could not delete format |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
이미지 핸들입니다. |
|
매개변수 2 |
이미지 포맷으로 설정될, 이전에 생성된 포맷의 핸들입니다. |
|
설명 |
이미지 핸들이 참조하는 이미지의 포맷을 쿼리합니다. |
|
반환 값 |
0 : 작업이 성공적으로 완료되었습니다. <0: Cannot query format |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
이미지 핸들입니다. |
|
매개변수 2 |
설정할 Property를 식별하는 문자열입니다. |
|
Parameter 3 |
새로운 Property 설정을 위해 사용될 데이터 구조체에 대한 포인터입니다. |
|
설명 |
이미지 핸들이 참조하는 이미지의 Property를 설정합니다. 이 함수를 통해 다음 Property들을 설정할 수 있습니다.
|
|
반환 값 |
0 : Property가 성공적으로 설정되었습니다. |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
이미지 핸들입니다. |
|
매개변수 2 |
조회할 Property를 식별하는 열거형(Enum) 값입니다. |
|
Parameter 3 |
데이터 통신에 사용될 데이터 구조체에 대한 포인터입니다. |
|
설명 |
이미지 핸들이 참조하는 이미지의 Property를 조회합니다. 다음 Property들을 사용할 수 있습니다.
|
|
반환 값 |
0 : Property가 성공적으로 조회되었습니다. |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
이미지 핸들입니다. |
|
매개변수 2 |
라인 번호입니다. |
|
Parameter 3 |
라인 길이입니다. |
|
설명 |
참조된 라인의 길이를 전체 이미지 너비와 다를 수 있는 개별 값으로 설정합니다(이미지 형식에 의해 정의된 최대 이미지 너비를 초과할 수 없음). |
|
반환 값 |
0 : 작업이 성공적으로 완료되었습니다. <0: Cannot set line length to the given value |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
이미지 핸들입니다. |
|
매개변수 2 |
라인 번호입니다. |
|
Parameter 3 |
라인 길이에 대한 반환 파라미터입니다. |
|
설명 |
참조된 라인의 길이를 반환합니다. |
|
반환 값 |
0: OK <0: Cannot query line length |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
이미지 핸들입니다. |
|
매개변수 2 |
프레임 내의 위치입니다. |
|
Parameter 3 |
컴포넌트 인덱스입니다. |
|
Parameter 4 |
픽셀 컴포넌트 값입니다. |
|
설명 |
해당 픽셀 컴포넌트를 지정된 값으로 설정합니다. |
|
반환 값 |
0 : 작업이 성공적으로 완료되었습니다. <0: Error setting the pixel component value |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
이미지 핸들입니다. |
|
매개변수 2 |
프레임 내의 위치입니다. |
|
Parameter 3 |
컴포넌트 인덱스입니다. |
|
Parameter 4 |
픽셀 성분 값에 대한 반환 파라미터입니다. |
|
설명 |
해당 픽셀 성분 값을 반환합니다. |
|
반환 값 |
0 : 작업이 성공적으로 완료되었습니다. <0: Error getting the pixel component value |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
Image format 핸들입니다. |
|
매개변수 2 |
설정할 Property를 식별하는 Enum 값입니다. |
|
Parameter 3 |
새로운 Property를 보유하고 있는 데이터 구조체에 대한 포인터입니다. |
|
설명 |
핸들이 참조하는 image format의 Property를 설정합니다. 이 함수를 통해 다음 Property들을 설정할 수 있습니다:
|
|
반환 값 |
0 : Property가 성공적으로 설정되었습니다.
|
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
Image format 핸들입니다. |
|
매개변수 2 |
조회할 Property를 식별하는 열거형(Enum) 값입니다. |
|
Parameter 3 |
조회된 Property로 덮어쓰여질 데이터 구조체에 대한 포인터입니다. |
|
설명 |
핸들이 참조하는 image format의 Property를 조회합니다. 조회할 수 있는 Property는 다음 함수를 통해 설정할 수 있는 Property와 동일합니다.
|
|
반환 값 |
0 : Property가 성공적으로 조회되었습니다.
|
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
시뮬레이션 핸들입니다. |
|
매개변수 2 |
생성된 에러 메시지에 대한 반환 파라미터입니다. |
|
설명 |
시뮬레이션 엔진에 제출할 수 있는 상태 메시지를 생성합니다. |
|
반환 값 |
0: OK <0: Can’t create message |
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
시뮬레이션 핸들입니다. |
|
매개변수 2 |
상태 메시지 핸들입니다. |
|
Parameter 3 |
설정할 Property의 이름입니다. |
|
Parameter 4 |
새로운 Property 값입니다. |
|
설명 |
status message Property를 수정합니다. 이 함수를 통해 다음 Property를 설정할 수 있습니다.
|
|
기능 |
|
|---|---|
|
구문 |
|
|
매개변수 1 |
시뮬레이션 핸들입니다. |
|
매개변수 2 |
전송할 status message의 Handle입니다. |
|
설명 |
시뮬레이션 엔진에 status message를 전송했습니다. |
|
반환 값 |
0: OK <0: Can’t submit message |
오퍼레이터 문서는 HTML 파일로 제공되어야 합니다. 사용 가능한 경우, 문서를 구성하는 모든 파일을 → 탭 아래에 지정해야 합니다.

지정된 첫 번째 파일은 오퍼레이터 문서의 시작점으로 해석됩니다. 이 파일의 명명 규칙은 다음과 같습니다:
<NameOfCustomOperator>.htm.
CSS 파일이 제공되었는지 확인하십시오. 또한 관련된 모든 이미지 파일도 함께 제공해야 합니다.
VisualApplets 설치 디렉토리의 하위 디렉토리에 있는 오퍼레이터 템플릿을 사용할 수 있습니다. Examples/CustomLibrary/OperatorTemplate.
인터페이스가 생성된 블랙박스와 일치하도록 HDL 코드를 래핑한 후, 커스텀 오퍼레이터를 완성하기 위해 몇 가지 마지막 단계를 진행해야 합니다.
-
구현으로부터 넷리스트를 생성합니다.
![[팁]](../common/images/admon/tip.png)
설정 Add IO Buffer = NO넷리스트를 생성할 때, 합성 도구가 자동으로 IO 버퍼를 추가하지 않도록 확인하십시오. 넷리스트 합성을 위해 XST를 사용하는 경우
Add IO Buffer = NO그렇지 않으면 생성된 NGC 파일로 인해 VisualApplets 빌드 흐름 중에 오류가 발생합니다.
![[팁]](../common/images/admon/tip.png)
넷리스트 생성 중 경고 넷리스트를 생성할 때 커스텀 오퍼레이터 인터페이스의 사용되지 않는 IO Port와 관련된 경고가 출력될 수 있습니다. 사용되지 않는 IO Port는 오퍼레이터 정의에 따라 생성되었으나 IP 코어와 연결되지 않은 모든 포트를 의미합니다. 이러한 경고는 무시해도 됩니다.
이러한 동작의 예시는 다음에서 찾을 수 있는 모든 커스텀 오퍼레이터 예시입니다.
ExamplesVisualApplets 설치 디렉토리:\Examples\CustomLibrary -
필요한 경우 제약 조건 파일(Constraints file)도 정의하십시오(
*.ucfXilinx ISE를 사용하는 경우의 형식,*.xdcXilinx Vivado를 사용하는 경우 형식). -
선택 사항으로, 'Defining the Custom Operator’s Software Interface' 섹션에 설명된 대로 오퍼레이터의 소프트웨어 인터페이스를 설정합니다.
-
선택 사항으로, 'Creating Custom Operator Documentation' 섹션에 설명된 대로 오퍼레이터 문서를 생성합니다.
이제 VisualApplets에서 오퍼레이터 정의를 완료해야 합니다. 이를 위해 다음과 같이 진행하십시오.
필수 단계:
-
탭으로 이동합니다.

-
생성한 넷리스트(netlist) 파일을 지정합니다.
-
제약 사항을 정의한 경우 제약 사항(constraints) 파일을 지정합니다.
-
지원되는 디바이스를 지정합니다. 디바이스 이름은 타깃 플랫폼의 FPGA 유형 이름입니다. VisualApplets의 프로젝트 정보 상자에 제공된 것과 정확히 동일한 철자를 사용하십시오. 여러 FPGA 유형이 지원되는 경우 공백으로 구분된 이름 목록을 사용하십시오.

디자인에서 커스텀 오퍼레이터를 사용하지만 타깃 플랫폼의 FPGA가 이 목록에 없는 경우, DRC는 해당 오퍼레이터가 타깃 플랫폼에서 지원되지 않는다는 오류를 보고합니다.
-
지원되는 Xilinx Tool(s)을 지정합니다. ISE와 Vivado 모두에 체크박스를 선택할 수 있습니다. ISE로 생성된 넷리스트는 대개 Vivado 빌드 플로우와도 호환되지만, 오퍼레이터 구현에 이와 같은지 확인해야 합니다. 주어진 넷리스트를 지원하는 툴의 최소 버전 번호를 정의해야 합니다. 일반적으로 이는 넷리스트를 생성하는 데 사용한 버전입니다.
디자인에서 커스텀 오퍼레이터를 사용하지만 디자인 빌드 시 지정된 툴을 사용하지 않는 경우, DRC는 해당 오퍼레이터가 타깃 플랫폼에서 지원되지 않는다는 오류를 보고합니다.
![[팁]](../common/images/admon/tip.png)
여러 코어 정의하기 동일한 커스텀 오퍼레이터에 대해 여러 코어를 정의할 수 있습니다. 이를 통해 커스텀 오퍼레이터의 디바이스 및 툴별 구현을 사용할 수 있으므로, 서로 다른 타깃 플랫폼에 대해 앱릿 빌드 시 적절한 구현이 선택됩니다.
선택 단계:
-
선택 사항으로, 오퍼레이터의 로직 리소스 소비량을 입력합니다. 넷리스트 생성 중 Xilinx 툴이 추정산 값을 간단히 입력하십시오.
-
탭에서 시뮬레이션 라이브러리(커스텀 오퍼레이터의 소프트웨어 인터페이스) 경로를 지정합니다.
-
탭에서 아이콘 파일의 경로를 지정합니다. 이 파일은 VisualApplets에 커스텀 오퍼레이터가 표시될 때 사용될 아이콘을 포함하는 파일입니다.
-
탭에서 커스텀 오퍼레이터 문서를 구성하는 모든 파일을 지정합니다. CSS 파일과 관련 이미지 파일도 함께 제공해야 합니다.
-
오퍼레이터 디자인을 보호하려면: 왼쪽 하단 모서리에서 옵션을 활성화합니다. 열리는 대화 상자에서 다음을 수행합니다.
-
보호 모드가 로 활성화되어 있는지 확인합니다.
-
비밀번호를 입력합니다.
-
를 클릭합니다.

커스텀 라이브러리 요소의 컨텍스트 메뉴를 사용하여 나중에도 언제든지 커스텀 오퍼레이터 디자인을 보호할 수 있습니다.
![[팁]](../common/images/admon/tip.png)
보호 옵션 보호가 활성화된 후 커스텀 오퍼레이터는 “블랙 박스”가 됩니다. 커스텀 오퍼레이터 디자인을 보호하는 방법에는 두 가지가 있습니다.
-
비밀번호를 통한 보호: 이후 비밀번호를 통해 커스텀 오퍼레이터 디자인을 열고 편집할 수 있습니다. 비밀번호가 없는 사용자는 커스텀 오퍼레이터의 세부 정보를 볼 수 없습니다(블랙 박스).
-
영구 보호: 보호 모드 One-Way를 선택하면 커스텀 오퍼레이터가 영구적으로 블랙 박스가 되며 본인조차 다시 열 수 없습니다.
"One-Way" 보호는 영구적입니다. 보호 모드로 (Password 대신) One Way를 선택하면 본인조차 커스텀 라이브러리 요소를 다시 열 수 없습니다. 나중에 요소를 개선할 계획이라면 반드시 보호 모드를 선택하십시오. 또는 이 보호 모드를 활성화하기 전에 (계층형 박스 또는 비보호 오퍼레이터로) 요소의 사본을 저장해 둘 수 있습니다.
-
-
를 클릭합니다.
이제 새로운 커스텀 오퍼레이터를 디자인에서 사용할 준비가 되었습니다.
포함된 모든 오퍼레이터가 있는 커스텀 라이브러리는 하나의 단일 항목으로 저장됩니다.
<LibaryName>.val 또는
<LibaryName>.vl 파일
<LibaryName> 은(는) 커스텀 라이브러리의 이름입니다.
이 파일은 배포되어 VisualApplets에 직접 적용할 수 있습니다. VisualApplets 설정에서 지정된 커스텀 라이브러리 디렉터리로 복사하기만 하면 됩니다( → → → ).

-
새로운
<LibaryName>.val또는<LibaryName>.vlVisualApplets 설치 폴더의 Custom Library 디렉터리에 파일을 복사합니다. -
VisualApplets GUI에서 커스텀 라이브러리를 다시 스캔합니다. 라이브러리 이름을 마우스 우클릭하고 하위 메뉴에서 를 선택합니다.

VisualApplets 예제 디렉터리에서 다음과 같은 즉시 사용 가능한 라이브러리를 확인할 수 있습니다.
CustomLibrary.vl
이 라이브러리에는 모든 예제 operator가 포함되어 있습니다.
커스텀 operator를 변경하더라도 이미 해당 커스텀 operator를 사용 중인 디자인에는 이러한 변경 사항이 자동으로 반영되지 않습니다. 따라서 디자인 내의 커스텀 operator 인스턴스를 업데이트해야 합니다.
-
operator를 마우스 우클릭합니다.
-
하위 메뉴에서 또는 를 선택합니다.

Custom Library의 업데이트 메커니즘은 User Library와 정확히 동일합니다.
설치 디렉터리에서 참고용으로 사용할 수 있는 완성된 커스텀 operator 3개를 확인할 수 있습니다. 예제는 다음 경로에서 찾을 수 있습니다.
\Examples\CustomLibrary
설치 디렉터리에서 커스텀 operator 정의에 사용할 수 있는 커스텀 operator 템플릿을 확인할 수 있습니다.
\Examples\CustomLibrary 커스텀 operator 템플릿을 사용하려면:
-
새 커스텀 operator를 생성할 Custom Library를 마우스 우클릭합니다.
-
하위 메뉴에서 → 을 선택합니다.

-
operator 템플릿의 경로를 지정합니다.
-
을 클릭합니다.
즉시 대화상자가 열립니다.

-
새 커스텀 operator의 이름을 지정하고 'Defining an Individual Custom Operator via GUI' 섹션에 설명된 대로 진행합니다.
커스텀 operator의 정의는 XML 형식으로 저장됩니다. 관련 XML 파일은 operator 라이브러리에서 내보낼 수 있으며, 이전에 내보낸 XML 파일을 사용하여 operator를 가져올 수 있습니다.
다음에서는 파라미터 이름이 동일한 이름의 XML 태그와 연결되는 필수 파라미터에 대해 설명합니다. 다음과 같은 파라미터는 ImgInInfo 다음과 같은 XML 항목으로 변환됩니다.
<ImgInInfo> ImgInPortNames </ImgInInfo> 여기서
ImgInPortNames 이 경우 값은 포트 이름 시퀀스가 됩니다. 파라미터는 계층 구조로 정렬되어 있습니다. 다음 표에서 회색 배경이 있는 행은 파라미터가 위치할 계층 구조를 나타냅니다.
간단한 파라미터 값은 다음 유형 중 하나일 수 있습니다:
-
Choice: 허용되는 값은 다음과 같습니다.
YES또는NO -
String: 공백이 없는 ASCII 문자열
-
Integer
-
부동 소수점
일부 파라미터는 배열이나 레코드를 구조화 요소로 사용할 수 있는 값의 구조로 구성됩니다. 배열은 값 자체에 구조가 포함될 수 있는 경우 공백으로 구분된 값 목록으로 입력됩니다. 레코드는 다음과 같은 방식으로 입력됩니다. RecordName 는 레코드 식별자이고,
attrX 은(는) 레코드 항목의 식별자이며,
attrXValue 은(는) 값입니다:
<RecordName attr1=”attr1Value” .. attrN=”attrNValue”/>
예를 들어 port (이)라는 이름과 너비 항목이 포함된 레코드를 제공할 수 있습니다:
<port name=”flag” width=”4”/>
XML 형식의 루트 태그는 오퍼레이터 이며, 사용자 지정 연산자 이름을 제공해야 하는
name 속성을 가집니다:
<Operator name=”XYZ”> … </Operator>
![]() |
VHDL 명명 규칙 준수 |
|---|---|
|
VA GUI에서 연산자 이름을 정의할 때는 VHDL 명명 규칙을 준수해야 합니다. VHDL 유효한 이름은 다음과 같이 정의됩니다. “포트, 신호, 변수, 엔티티 이름, 아키텍처 본문 또는 유사한 객체의 유효한 이름은 공백 없이 문자 하나와 그 뒤에 오는 임의 개수의 문자로 구성됩니다. 유효한 이름은 명명된 식별자라고도 합니다. VHDL은 대소문자를 구분하지 않습니다. 그러나 이름 내에 언더스코어(_)를 사용할 수 있지만 이름의 시작이나 끝에 올 수는 없습니다. 연속된 두 개의 언더스코어는 허용되지 않습니다.” |
|
파라미터 이름 |
Type |
설명 |
|---|---|---|
|
|
String |
제조사 이름. |
|
|
String |
연산자의 버전 번호. 이 값은 자유롭게 선택할 수 있으며 사용자가 버전을 식별하기 위한 용도입니다. |
|
|
Array of String |
연산자용 코어 넷리스트 목록. 첫 번째 문자열은
|
|
|
String |
연산자용 상위 수준 시뮬레이션 모델을 포함하는 소프트웨어 라이브러리(동적 링크 라이브러리)가 포함된 파일의 따옴표로 묶인 이름입니다. |
|
|
String |
연산자 아이콘이 포함된 파일의 이름을 인용했습니다. |
|
|
Array of String |
도움말 콘텐츠(HTML + 이미지)가 포함된 따옴표로 묶인 파일 이름 목록입니다. 첫 번째 파일은 메인 HTML 파일로 간주됩니다. |
표 7. Operator/Info
|
파라미터 이름 |
Type |
설명 |
|---|---|---|
|
|
Array of String |
이후에 정의되는 info 구조체 이름 목록
( |
|
|
Array of String |
이후에 정의되는 info 구조체 이름 목록
( |
|
|
String |
ImgIn 포트의 입력이 서로 동기식인지 비동기식인지 정의하는 문자열입니다. 이 문자열은 “Sync” 또는 “Async”일 수 있습니다. |
|
|
Array of String |
이후에 정의되는 info 구조체 이름 목록
( |
|
|
Array of String |
이후에 정의되는 info 구조체 이름 목록
( |
|
|
Array of String |
범용 신호 입력을 위한 핀 이름 목록입니다. |
|
|
Array of String |
범용 신호 출력을 위한 핀 이름 목록입니다. |
|
|
Array of String |
이후에 정의되는 info 구조체 이름 목록
( |
표 8. Operator/IO
|
파라미터 이름 |
Type |
설명 |
|---|---|---|
|
|
Integer |
operator가 소비하는 FPGA LUT 요소 수 |
|
|
Integer |
operator가 소비하는 FPGA register 수 |
|
|
Integer |
operator가 소비하는 block RAM 요소 수 |
|
|
Integer |
operator가 소비하는 임베디드 멀티플라이어 수 |
표 9. Operator/Properties
이미지 입력 포트 사양은 설정 파일 내에서 다음 구문으로 지정됩니다.
<ImgIn name=”IMG_IN_IDENTIFIER”> Parameters </ImgIn>;
여기서 IMG_IN_IDENTIFIER 은(는) 위의 파라미터에서 제공된 이미지 입력 포트 이름 중 하나입니다. Operator/IO/ImgInInfo. 콘텐츠 Parameters 은(는) 이미지 인터페이스 포트의 Property를 지정합니다.
|
파라미터 이름 |
Type |
설명 |
|---|---|---|
|
|
Integer |
이미지 데이터 포트의 너비 |
|
|
Integer |
VA 코어에서 최소한으로 제공해야 하는 입력 데이터를 위한 버퍼 FIFO의 깊이입니다. 값은 15에서 1023 사이의 2의 거듭제곱에서 1을 뺀 값이어야 합니다. |
|
|
Array of Record |
이미지 포맷 레코드 목록 |
표 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 은(는) 이미지 인터페이스 포트의 Property을(를) 지정합니다:
|
파라미터 이름 |
Type |
설명 |
|---|---|---|
|
|
Integer |
이미지 데이터 포트의 너비 |
|
|
Integer |
출력 데이터를 위해 VA 코어에서 최소한 제공해야 하는 버퍼 FIFO의 깊이입니다. 값은 15에서 1023 사이의 2의 거듭제곱 빼기 1이어야 합니다. |
|
|
Array of Record |
이미지 포맷 레코드 목록 |
표 11. Operator/ImgOut
이미지 형식은 다음 명명 체계에 따라 코딩됩니다:
{BaseFormat}{BitsPerPixel}x{Parallelism}
선택적으로 이미지 크기를 나타내는 접미사와 서명된 구성 요소 데이터에 대한 알림이 포함될 수 있습니다:
{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 컬러 포맷
-
gray16x1 – 16비트 픽셀의 그레이 포맷, 데이터 워드당 단일 픽셀만 포함
-
gray8x4x1 – 픽셀당 8비트 및 Parallelism 4의 1차원 그레이 이미지
-
gray16x1s – 부호 있는 16비트 컴포넌트의 그레이 이미지, 데이터 워드당 단일 픽셀만 포함
레지스터 입력 포트 사양은 설정 파일 내에서 다음 구문으로 지정됩니다.
<RegIn name=”REG_IN_IDENTIFIER”> Parameters </RegIn>;
여기서 REG_IN_IDENTIFIER 위 파라미터에서 제공된 레지스터 입력 포트 이름 중 하나입니다. Operator/IO/RegInInfo. 내용 Parameters 레지스터 인터페이스 포트의 Property를 지정합니다.
레지스터 출력 포트 사양은 설정 파일 내에서 다음 구문으로 지정됩니다.
<RegOut name=”REG_OUT_IDENTIFIER”> Parameters </RegOut>;
여기서 REG_OUT_IDENTIFIER 위 파라미터에서 제공된 레지스터 출력 포트 이름 중 하나입니다. Operator/IO/RegOutInfo. 내용 Parameters 레지스터 인터페이스 포트의 Property를 지정합니다.
메모리 인터페이스 사양은 설정 파일 내의 다음 구문을 가진 섹션으로 지정됩니다.
<Mem name=”MEM_IDENTIFIER”> Parameters </MEM>
여기서 MEM_IDENTIFIER 위에서 설명한 파라미터에 제공된 메모리 포트 이름 중 하나입니다. Operator/IO/MemInfo. 콘텐츠 Parameters 메모리 인터페이스의 Property를 지정합니다.
|
파라미터 이름 |
Type |
설명 |
|---|---|---|
|
|
Integer |
Data width |
|
|
Integer |
Address width |
|
|
Integer |
쓰기 액세스를 표시하기 위한 플래그의 Width입니다. 이 파라미터는 >= 1이어야 합니다. |
|
|
Integer |
읽기 액세스를 표시하기 위한 플래그의 Width입니다. 이 파라미터는 >= 8이어야 합니다. |
|
|
Integer |
사용 가능한 쓰기 명령 수를 통신하기 위한 포트의 Width |
|
|
Integer |
사용 가능한 읽기 명령 수를 통신하기 위한 포트의 Width |
|
|
String |
이 파라미터는 메모리 인터페이스 클록과 디자인 클록의 관계를 나타냅니다. 다음 값을 사용할 수 있습니다.
|
표 14. Operator/Mem
IP 코어 넷리스트 사양은 설정 파일 내에서 다음과 같은 구문을 사용하는 섹션별로 지정됩니다.
<Core name=”CORE_IDENTIFIER”> Parameters </Core>
여기서 Core_IDENTIFIER 은(는) 위에서 설명한 파라미터에서 제공된 코어 이름 중 하나입니다. Operator/Cores. 콘텐츠
Parameters 은(는) IP 코어의 Property를 지정합니다.
|
파라미터 이름 |
Type |
설명 |
|---|---|---|
|
|
Array of String |
코어에서 지원하는 FPGA 디바이스 이름 목록 (예:
|
|
|
String |
넷리스트에 대한 따옴표로 묶인 UTF-8 인코딩 파일 이름. |
|
|
String |
선택적 제약(constraints) 파일에 대한 따옴표로 묶인 UTF-8 인코딩 파일 이름. |
|
|
String |
지정된 넷리스트를 사용할 수 있는 ISE 툴 플로우의 최소 버전 번호 (예: |
|
|
String |
지정된 넷리스트를 사용할 수 있는 Vivado 툴 플로우의 최소 버전 번호 (예: |
표 15. Operator/Core







이전

