하드웨어 Applet: 아이디어에서 애플리케이션까지

이 애플리케이션 노트에서는 VisualApplets 에서 이미지 처리 애플리케이션(=애플릿)을 설계하고 제작하는 방법과 프레임 그래버에서 이를 사용하는 방법을 알아봅니다. 또한 microDisplay 및 Framegrabber API 을 사용하여 런타임 중에 이 애플릿을 활용하는 방법과 해당 소프트웨어에서 애플릿의 매개변수를 구성하는 방법도 배웁니다. microDisplay에서 애플릿을 설계, 빌드하고 런타임 중에 사용하는 방법에 대한 소개는 다음에서 확인하실 수 있습니다. '시작하기'에서 확인할 수 있습니다. 이 애플리케이션 노트에서는 소벨 에지 필터 애플리케이션을 예로 들어 앞서 언급한 애플릿 개발 및 사용 단계를 학습하게 됩니다.

워크플로 설명

작업 흐름은 다음과 같습니다.

  1. VisualApplets에서 applet 설계하기.

  2. VisualApplets에서 applet 시뮬레이션 및 디자인 규칙 검사(DRC) 수행하기.

  3. applet 빌드하기.

  4. mE5 플랫폼의 경우: applet 플래싱하기.

  5. microDisplay 또는 Framegrabber API를 통해 하드웨어에서 applet 사용하기.

Designing an Applet in VisualApplets

Starting a New Project

applet의 설계 단계는 VisualApplets에서 진행됩니다. VisualApplets를 열려면 다음 파일을 클릭하세요. VisualApplets.exe (으)로 설정합니다. bin VisualApplets 설치 디렉터리의 폴더, Windows 시작 메뉴의 VisualApplets 프로그램 아이콘, 또는 바탕 화면의 아이콘을 클릭하십시오.

  1. 처음에는 프로젝트가 로드되지 않은 상태로 VisualApplets 메인 창이 열립니다.

    VisualApplets 메인 창

    그림 186. VisualApplets 메인 창


  2. File+New ( Ctrl+N )을 클릭하거나 File 아이콘 바의 New 아이콘을 사용하세요. 프로젝트 이름, 타겟 하드웨어 플랫폼, 타겟 런타임을 지정할 수 있는 New Project 창이 열립니다. 이 설정은 나중에 언제든지 변경할 수 있습니다.

  3. 여기서 예제를 따라 하려면 다음 설정을 사용하십시오.

    Project Name: Sobel_Filter

    Hardware Platform: microEnable 5 marathon VCL

    Target Runtime: Win 64 (Windows/AMD64)

  4. OK를 클릭하여 설정을 확인합니다.

    New Project 창

    그림 187. New Project 창


이제 VisualApplets가 새 프로젝트를 시작하며 프로그램 창 중앙에 빈 디자인 창이 나타납니다. 오른쪽에 있는 Project Info 탭에는 프로젝트 이름, 타겟 하드웨어, 타겟 플랫폼 등 현재 프로젝트와 관련된 정보가 표시됩니다.

Operators 및 Links

VisualApplets에서 화상 처리 작업은 오퍼레이터로 표현됩니다. 이러한 모든 오퍼레이터는 VisualApplets 디자인 창 오른쪽에 있는 Operator Library에서 찾을 수 있습니다. 드래그앤드롭을 사용하여 디자인 창에 오퍼레이터를 매우 쉽게 배치할 수 있습니다.

디자인 내 오퍼레이터의 인스턴스를 module이라고 합니다. 오퍼레이터는 입력 및 출력 포트를 가질 수 있습니다. 디자인 내의 오퍼레이터(즉, 모듈)는 이러한 포트를 사용하여 서로 연결할 수 있습니다. 모듈 간의 연결을 링크라고 하며, 디자인 창에서는 화살표로 표시됩니다. 이러한 모듈과 링크는 화상(또는 신호) 처리 파이프라인을 나타냅니다. 따라서 작업 순서는 모듈의 순서에 의해 결정됩니다.

오퍼레이터와 링크에는 이미지 치수와 같이 현재 화상 처리 파이프라인과 관련된 설정을 설명하는 속성이 있습니다. 이러한 속성을 확인하고 편집하려면 오퍼레이터를 더블 클릭하십시오. 오퍼레이터의 속성은 Help 아래의 오퍼레이터 문서에 자세히 설명되어 있습니다.

VisualApplets의 오퍼레이터 문서

그림 188. VisualApplets의 오퍼레이터 문서


디자인 구현

이 예제는 Sobel 에지 필터 알고리즘을 구현합니다.

VisualApplets 디자인 샘플 라이브러리에는 에지 필터링 및 기타 이미지 처리 응용 프로그램을 위한 "즉시 사용 가능한(ready-to-use)" 샘플이 포함되어 있습니다. 이러한 디자인 예제는 다음 경로에서 찾을 수 있습니다. Examples\Processing VisualApplets 설치 디렉토리에서 해당 문서와 함께 확인할 수 있습니다. 다음을 참조하세요. 프로세싱 예제. 이러한 예제 디자인을 자신의 응용 프로그램을 위한 기반으로 사용할 수 있습니다.

이 샘플 Sobel 필터 디자인을 구현하려면 Operator Library에서 연산자를 찾아 디자인 영역으로 드래그한 다음, Getting Started 섹션에 설명된 대로 링크로 연결합니다.

디자인을 더 쉽게 파악하고 런타임 시 더 효율적으로 활용할 수 있도록 나중에 모듈의 이름을 변경할 수 있습니다.

디자인 가독성을 높이기 위해 필요에 따라 HierarchicalBoxes를 사용하여 디자인을 구조화하세요.

그리고 수시로 디자인을 저장하는 것을 잊지 마세요.

Design Components

이 어플리케이션 노트의 샘플 디자인은 다음 그림과 같이 다음과 같은 구성 요소로 이루어져 있습니다.

예제 디자인 구현 Sobel_Filter.va

그림 189. 예제 디자인 구현 Sobel_Filter.va


  • Camera Link 흑백 카메라 인터페이스

  • 이미지 버퍼

  • x 및 y 방향의 에지 필터링을 수행하는 Sobel 에지 필터 모듈 (예제 기반 SobelMultiGradient.vad 참조: Examples\Processing\Filter\EdgeDetection\Sobel_Multi_Gradient VisualApplets 설치 디렉토리 내)

  • 런타임 시 디스플레이에서 이진화된 이미지의 시각화를 개선하기 위한 조정 가능한 이진화 임계값 및 scale 연산자

  • PC로 향하는 DMA.

디자인 내에서 카메라로 취득한 이미지 대신 CoefficientBuffer를 이미지 시뮬레이션 소스로 사용할 수 있습니다. 연산자 SourceSelector를 통해 VisualApplets 내 및 런타임 시 처리 파이프라인의 이미지 입력 소스를 선택할 수 있습니다.

파라미터 설정

연산자와 링크를 매개변수화하려면 해당 요소를 더블 클릭하여 각 요소의 매개변수를 편집할 수 있습니다.

Link Parameters

링크에는 최대 이미지 크기, 이미지 프로토콜, Bit Width, 그리고 최대 대역폭과 관련된 매개변수인 Parallelism(즉, 하나의 디자인 클럭 주기에 전송되는 픽셀 수) 등 처리된 이미지의 속성을 정의하는 속성이 있습니다. 이러한 링크가 카메라 인터페이스 연산자와 같은 특정 연산자에 연결된 경우(해당 연산자 문서 참조), 목적에 맞게 이러한 속성을 편집하고 조정할 수 있습니다.

설정한 최대 이미지 크기와 Parallelism이 높을수록 FPGA 리소스 소비가 증가합니다. 따라서 Basler는 FPGA 리소스를 절약하기 위해 필요한 만큼만 이러한 값을 설정할 것을 권장합니다. 링크 속성은 VisualApplets의 디자인 단계에서만 변경할 수 있습니다.

Link Properties

그림 190. 링크 속성


Operator Properties

연산자 속성에는 static과 dynamic의 두 가지 유형이 있습니다. 정적 매개변수는 VisualApplets의 디자인 단계에서만 변경할 수 있는 반면, 동적 매개변수는 디자인 단계와 런타임 시 모두 변경할 수 있습니다. 연산자 IS_GreaterThan의 정적 및 동적 매개변수 예시는 아래 스크린샷을 참조하세요.

정적 및 동적 연산자 매개변수

그림 191. 정적 및 동적 연산자 파라미터


이 예제 디자인에서는 다음 파라미터를 설정합니다.

연산자 IS_GreaterThan:

파라미터 Number를 600(으)로 설정합니다.

이는 에지의 회조도를 식별합니다. 에지의 회조도를 확인하려면 IS_GreaterThan 연산자 앞에 시뮬레이션 프로브를 설정하고, 시뮬레이션을 실행한 다음, 에지가 포함된 픽셀을 확대하여 해당 회조도를 확인합니다. 이는 런타임 중에 변경할 수 있는 동적 파라미터입니다.

연산자 SCALE:

파라미터 ScaleFactor를 255(으)로 설정합니다.

이는 에지의 시인성을 향상시킵니다. 이는 동적 파라미터입니다. 하지만 FPGA 리소스를 절약하기 위해 이 파라미터를 Static(으)로 설정할 수도 있습니다.

Preparation for Parameter Access during Runtime

런타임 중에 동적 파라미터를 변경할 수 있습니다. 일반적인 사용 사례는 디자인에 많은 연산자가 있고 디자인 내의 여러 서로 다른 연산자에 대해 동일한 파라미터(예: 이미지 크기)를 변경해야 하는 경우입니다.

라이브러리 Parameters 단 하나의 파라미터만 제어하여 디자인 내의 다양한 모듈 파라미터에 액세스할 수 있는 연산자를 제공합니다. 또한 이러한 연산자를 사용하면 특정 계층 수준에 액세스 파라미터가 표시되도록 할 수 있습니다. 이러한 옵션을 통해 런타임 중에 파라미터 구성을 더 쉽게 수행할 수 있습니다. 예제 디자인 Sobel_Filter.va (참조: 그림 189, '예제 디자인 구현 Sobel_Filter.va')은(는) 변환 및 참조 파라미터를 사용하여 계층 수준에서 이미지 너비와 높이, 이미지 소스 선택기, 임계값 및 스케일 팩터에 쉽게 액세스합니다. Parameters. 이를 위해 빈 HierarchicalBox를 만들고 이름을 Parameters 그리고 이에 따라 DisplayHierarchy 해당 변환 및 참조 파라미터의 파라미터를 Parameters(으)로 지정합니다. 에 대한 자세한 설명은 Parameters 라이브러리는 해당 설명서를 참조하세요. Library Parameters.

설계 완료

Simulation Sources and Probes

디자인 단계에서는 시뮬레이션 소스와 프로브가 매우 유용합니다. 시뮬레이션 소스를 사용하면 테스트 이미지를 로드하고 처리 파이프라인의 모든 링크에서 몇 순간 안에 처리된 이미지를 확인할 수 있습니다. 예외: 신호는 시뮬레이션할 수 없습니다. 또한 시뮬레이션은 구현의 형식적 정확성을 위해 디자인 규칙 검사 레벨 1을 수행합니다. 시뮬레이션 결과는 런타임 중의 결과와 동일합니다. 시뮬레이션 소스 및 프로브는 VisualApplets의 아이콘 메뉴 또는 텍스트 메뉴의 분석(Analysis) 아래에서 찾을 수 있습니다. 시뮬레이션 소스 및 프로브 사용에 대한 자세한 설명은 '시뮬레이션'의 상세 설명서를 참조하세요.

에서 그림 189, '예제 디자인 구현 Sobel_Filter.va' 예제 디자인의 시뮬레이션 소스에 로드된 테스트 이미지를 볼 수 있습니다. Sobel_Filter.va. 임계값 처리 후와 DMA 전에 현재 처리 단계의 결과를 볼 수 있습니다.

Design Rule Check (DRC)

구현을 완료한 후 디자인 규칙 검사 레벨 1 및 2를 수행하는 것이 좋습니다. 디자인 규칙 검사 레벨 1 및 2를 수행하려면 Analysis+Design Rules Check Level 1 and 2를 선택하거나 아이콘 바에서 Design Rules Check Level 1 and 2 아이콘을 사용하세요.

디자인 규칙 검사 레벨 1은 구현의 형식적 오류와 디자인 내에서의 정확한 위치를 보고합니다. 디자인을 하드웨어 애플릿으로 변환하기 전에 이러한 오류를 수정해야 합니다.

디자인 규칙 검사 레벨 2는 디자인에서 사용되는 예상 FPGA 리소스에 대한 정보도 제공합니다. 이 정보를 통해 이미지 처리 구현에 충분한 FPGA 리소스를 사용할 수 있는지 확인할 수 있습니다. 리소스가 FPGA 리소스 중 하나의 100%를 초과하는 경우 리소스를 절약하기 위해 구현을 다시 설계해야 합니다.

에서 그림 192, '예제 디자인에 대한 디자인 규칙 검사 1 및 2 Sobel_Filter.va' 디자인 규칙 검사 1 및 2의 결과가 다음과 같이 표시됩니다. 모든 항목이 올바르게 설계되었으며 사용 가능한 룩업 테이블(Lookup Table)의 약 36%, 플립플롭(Flip-Flop)의 22%, 블록 RAM의 15%, 사용 가능한 임베디드 ALU의 2%가 사용되었습니다. 디자인의 각 요소가 소비하는 FPGA 리소스의 상세한 개요는 다음에서 확인할 수 있습니다 (참조: 그림 193, 'FPGA 리소스 예상치') 항목 Analysis+FPGA Resource Estimation

예제 디자인 Sobel_Filter.va에 대한 디자인 규칙 검사 1 및 2

그림 192. 예제 디자인에 대한 디자인 규칙 검사 1 및 2 Sobel_Filter.va


FPGA Resource Estimation

그림 193. FPGA 리소스 예상치


VisualApplets에서 Applet 빌드

전제 조건

하드웨어 앱릿 빌드 프로세스는 XILINX 도구가 올바르게 설치된 경우에만 수행할 수 있습니다. 다음 항목 https://docs.baslerweb.com/visualapplets/installing-visualapplets#which-xilinx-toolchain-and-version-for-which-frame-grabber-platform 에서 프레임 그래버 플랫폼에 적합한 Xilinx 버전에 대한 상세한 개요를 확인할 수 있습니다. 본 샘플 디자인에서는 Sobel_Filter.va microEnable 5 marathon VCL 플랫폼이 선택되었습니다. 따라서 Xilinx ISE 버전 14.7 또는 2016.1과 2020.1 사이의 Vivado 버전이 적합합니다.

Editing the Build Settings

이제 예제 디자인을 완료했으며 Sobel_Filter.va 이 디자인을 하드웨어 앱릿으로 변환하려고 합니다. 이러한 변환 프로세스는 빌드 (build)라고 부르며, 올바른 Xilinx 빌드 설정(build settings)을 선택해야 합니다. Settings+빌드 설정을(를) 열고 settings64.bat 파일 시스템에서 해당하는 Xilinx 버전(권장 사항: Xilinx Vivado 2018.2)의 배치 파일을 선택한 후 확인(OK)을 눌러 승인합니다. 빌드 설정 편집에 대한 자세한 설명은 다음 항목 '빌드 설정(Build Settings)'.

하드웨어 앱릿 빌드 대화 상자

그림 194. 하드웨어 앱릿 빌드 대화 상자


이제 VisualApplets가 Xilinx 도구를 사용하여 응용 프로그램을 FPGA 비트스트림, 즉 프로그램 또는 앱릿으로 변환합니다. 이 프로세스의 소요 시간은 디자인의 복잡성에 따라 다릅니다. 복잡성이 매우 높은 디자인의 경우 빌드에 몇 시간이 걸릴 수 있습니다. 이 예제 구현의 경우 Sobel_Filter.va빌드 시간은 약 15분입니다. 빌드가 성공적으로 완료되면 앱릿이 완전히 생성됩니다. 앱릿의 이름(*.hap 파일)은 디자인 파일의 이름과 동일합니다(*.va): Sobel_Filter.hap

하드웨어에서 Applet 실행

전제 조건

프레임 그래버에서 하드웨어로 앱를 실행하려면 시스템에 프로그래밍 가능한(V 시리즈) 프레임 그래버(하드웨어)가 설치되어 있어야 합니다. 또한 PC에 Framegrabber SDK 소프트웨어가 설치되어 있어야 합니다. microEnable 5 marathon VCL용 이 예제 앱렛의 경우, 최신 지원 Framegrabber SDK 버전은 5.7입니다.

플래싱

이 예제와 같이 microEnable 5 marathon 프레임 그래버를 사용하는 경우, microDiagnostics를 사용하여 새 앱렛으로 프레임 그래버를 플래싱해야 합니다.

microEnable IV 프레임 그래버 또는 최신 CXP 12 시리즈 프레임 그래버에서 새 앱렛을 사용하는 경우 이 섹션을 건너뛰면 됩니다.

프레임 그래버를 플래싱하려면 다음 단계를 수행하십시오.

  1. 다음 위치에서 microDiagnostics 도구를 실행합니다. bin Framegrabber SDK 설치 디렉토리.

  2. 프레임 그래버를 선택합니다.

  3. 대화 상자의 왼쪽에 있는 Firmware를 선택합니다.

  4. 표시된 파티션(0~7) 중 하나에 하드웨어 앱렛을 할당합니다. 생성된 하드웨어 앱렛이 있는 디렉토리로 이동하여 파일을 선택합니다.

    microDiagnostics에 표시되는 Firmware Partitions

    그림 195. microDiagnostics에 표시되는 Firmware Partitions


  5. 클릭 Flash Now

  6. 새 펌웨어가 완전히 설치될 때까지 기다립니다. 플래싱이 완료되면 microDiagnostics에 메시지가 표시됩니다.

  7. 메시지의 지침을 따릅니다.

Testing and Loading the Applet in microDisplay

앱렛을 테스트하고 Sobel_Filter.hap 일부 초기 파라미터를 설정하려면 microDisplay 프로그램을 사용하십시오. 앱렛을 로드하려면 다음 단계가 필요합니다.

  1. 앱렛을 저장합니다(여기서: Sobel_Filter.hap) 항목 Hardware Applets\<your frame grabber> mE5-MA-VCL, 여기서:) Framegrabber SDK 설치 디렉토리.

  2. Framegrabber SDK 설치 디렉토리의 bin 폴더에서 microDisplay를 시작합니다.

  3. microDisplay의 Acquisition Devices에서 사용할 프레임 그래버를 선택합니다. 선택한 프레임 그래버에서 사용할 수 있는 모든 앱렛이 즉시 표시됩니다.

  4. 사용할 *.hap 사용하려는 파일(여기서: Sobel_Filter.hap)을 더블 클릭합니다.

파라미터 설정 및 취득

앱렛을 로드한 후 microDisplay에서 파라미터 트리와 이미지 취득 창을 확인할 수 있습니다. 아래에는 microDisplay에 로드된 Sobel_Filter.hap 앱렛의 스크린샷이 나와 있습니다.

microDisplay의 파라미터 트리 및 이미지 획득 창

그림 196. microDisplay의 파라미터 트리 및 이미지 획득 창


왼쪽에는 파라미터 트리가 표시됩니다. 이러한 파라미터는 VisualApplets의 설계 단계에서의 연산자 이름과 동일합니다. 획득 시 조정하려는 올바른 파라미터를 쉽게 찾을 수 있도록 연산자 이름을 알기 쉽게 지정하는 것이 중요합니다. 동적 파라미터는 런타임 중에 조정할 수 있습니다. 동적 파라미터에는 획득 시작 전에만 조정할 수 있는 파라미터(예: DMA dimensions)와 이미지 획득 중에도 조정할 수 있는 파라미터(예: 연산자 IS_GreaterThan의 임계값)의 두 가지 종류가 있습니다.

이 예제에서는 시뮬레이터 소스의 이미지를 사용하여 이미지 획득을 수행하고 이진화 임계값을 150으로 설정합니다. VisualApplets의 설계 단계에서 Parameters 라이브러리의 파라미터를 통합한 경우, 파라미터 트리의 Parameters 계층 수준에서 모든 관련 동적 파라미터를 설정할 수 있습니다. 그렇지 않은 경우, 설정하려는 올바른 파라미터를 찾기 위해 여러 계층 수준을 차례로 거쳐야 합니다.

이 예제에서는 계층 수준 Parameters로 이동하여 확장합니다:

  1. Parameter Simulation Image를 마우스 우클릭합니다. 그 결과, 이미지 획득에 사용할 예제 이미지를 선택할 수 있습니다.

  2. Load Simulation Image를 클릭하여 이 이미지를 로드합니다.

  3. ImageSource selector 파라미터를 Simulator로 설정하고, Binarization Threshold를 값 150으로 설정합니다.

  4. 이미지 크기를 1024x1024 픽셀로 설정합니다.

이러한 파라미터(또는 앱렛과 관련된 모든 파라미터)를 설정한 후 획득을 시작할 수 있습니다. 여기서는 연속 그랩(grabbing), 시퀀스 그랩 또는 단일 프레임 그랩 중에서 선택할 수 있습니다. 연속 그랩을 중지하려면 중지 버튼을 클릭합니다. 다중 프로세스 설계의 경우, 단일 프로세스의 획득을 각각 개별적으로 시작하고 중지할 수 있습니다.

microDisplay를 사용한 앱렛 구성 및 획득에 대한 자세한 내용은 https://docs.baslerweb.com/frame-grabbers/what-is-micro-display-x를 참조하십시오.

Starting the Applet in Your Own SDK

microDisplay X에서 앱렛 구성 및 획득을 수행하는 대신, 자체 SDK 환경에 통합할 수도 있습니다. 이 섹션에서는 이미지 획득 및 구성을 위한 관련 SDK 구성 요소의 기본 기능에 대해 소개합니다.

C++ SDK의 기반으로 VisualApplets 내부 SDK 코드 생성기를 사용할 수 있습니다. 이 생성기는 아이콘 메뉴 또는 VisualApplets의 Build+Generate SDK Example에서 찾을 수 있습니다. 이 기능은 SDK 코드의 기반으로 사용할 수 있는 해당 CMake 파일과 VisualStudio 프로젝트 파일을 자동으로 생성합니다.

생성된 SDK 프로젝트 파일

그림 197. 생성된 SDK 프로젝트 파일


프로젝트 파일에 생성된 C++ 코드는 vasFgProject.cpp 다음과 같은 코드 구성 요소를 포함합니다:

  1. 프레임 그래버: 초기화

    획득 주기 수 정의, 보드 인덱스 정의, Fg_Init("Sobel_Filter.hap", boardIndex) applet을 시작합니다.

  2. 획득을 위한 버퍼 메모리 할당.

    함수: Fg_AllocMemEx(fg, ..., ...)

  3. 프레임 그래버: Process0에 대한 Get* 및 Set* 파라미터

    함수: Fg_setParameterWithType(fg, ..., ..., ...) 및 Fg_getParameterWithType(fg, ..., ..., ...)

    여기에는 설계에 포함된 모든 파라미터가 나열됩니다. 가독성을 높이기 위해 Basler에서는 런타임 중에 조정할 필요가 없는 모든 파라미터를 삭제할 것을 권장합니다.

  4. 디스플레이 생성

    함수 CreateDisplay()

  5. 존재하는 각 포트에 대해 앱렛 및 카메라에서 취득을 시작합니다:

    함수: Fg_AcquireEx(fg, 0, nrOfCycles, ...,...);

  6. 이미지 그랩:

    함수: Fg_getLastPicNumberBlockingEx(fg, ..., ..., ..., ...);

  7. 취득 중지

    기능 Fg_stopAcquireEx(fg, .., .., ...)

  8. 디스플레이 닫기

    함수 CloseDisplay(...);

  9. 버퍼 메모리 해제

    함수 Fg_FreeMemEx(fg, ..);

  10. Frame Grabber 초기화 해제

    함수 Fg_FreeGrabber(fg);

SDK 함수에 대한 자세한 설명과 설명은 https://docs.baslerweb.com/frame-grabbers/sdk/basler__fg_8h.html에서 확인할 수 있습니다.

Framegrabber API에 대한 소개는 https://docs.baslerweb.com/frame-grabbers/framegrabber-api.html에서 확인할 수 있습니다.

생성된 샘플 SDK 코드를 더 큰 SDK 환경에 통합하여 프레임 그래버가 (사전) 처리한 이미지의 추가 소프트웨어 처리를 수행할 수 있습니다.