VisualApplets 기초#
본 문서의 소개 및 목적#
Key Terms
이 튜토리얼 전체에서 Key Terms로 표시된 상자는 독자에게 아직 생소할 수 있는 일반적인 용어를 설명합니다.
VisualApplets은 PC상의 설계 도구입니다. FPGA는 frame grabber에 있는 칩입니다. VisualApplets에서 파이프라인을 그리며, 빌드를 통해 해당 파이프라인이 FPGA 상의 하드웨어로 구성됩니다. 카메라 데이터는 VisualApplets 편집기가 아니라 frame grabber에서 처리됩니다.
기본 설계 개념#
VisualApplets를 사용하면 VHDL이나 Verilog 같은 하드웨어 기술 언어로 코드를 작성하지 않고도 FPGA 기반 프로그래밍 가능 하드웨어에서 이미지 처리 기능을 생성할 수 있습니다. 라이브러리 operator를 사용하여 그래픽 방식으로 디자인을 구축하고, 이미지 데이터가 정의된 경로를 따라 흐르도록 operator들을 서로 연결합니다.

또한 Python 및 Tcl 스크립팅 언어를 사용하여 디자인을 생성하고 편집할 수 있습니다.
프로그래밍 가능한 frame grabber에서 camera 또는 기타 이미지 소스는 연속적인 픽셀 스트림을 취득 경로로 전달하고, 해당 보드의 FPGA는 이 스트림을 처리합니다. 사용자가 구축하는 것은 FPGA가 CPU처럼 가져와서 실행하는 프로그램이 아닙니다. 대신 빌드를 통해 FPGA에 파이프라인 구조와 일치하는 전용 디지털 회로가 구성됩니다.
PC에서 VisualApplets design을 생성하고 편집합니다(*.vad 파일 내의 오퍼레이터, 모듈 및 링크). 이후 build 단계를 통해 해당 파이프라인이 하드웨어 로직으로 변환됩니다.

이러한 VisualApplets 디자인에서는 오퍼레이터 라이브러리에서 오퍼레이터를 인스턴스화하며, 디자인 내 오퍼레이터의 각 인스턴스를 module이라고 부릅니다. 모듈들은 링크로 연결되며, 처리 순서는 모듈을 배치하고 연결하는 방식에 따라 결정됩니다. 모듈과 링크가 함께 모여 픽셀 데이터가 취득, 처리, 출력 단계를 통과하는 방식을 정의하는 이미지 처리 파이프라인을 형성합니다.
이 튜토리얼에서 런타임에 모듈이 데이터를 처리, 버퍼링, 차단 또는 전송한다고 언급할 때는 해당 모듈에서 생성된 FPGA 로직을 가리키는 것입니다. VisualApplets의 그래픽 모듈은 해당 하드웨어 동작을 설명하는 것이며, 그 자체로 런타임 카메라 데이터를 처리하는 것은 아닙니다.
편집 가능한 디자인을 *.vad 파일로 저장합니다. 특정 대상 frame grabber용 디자인을 빌드하면 VisualApplets은 확장자가 *.hap인 바이너리 하드웨어 앱릿 파일을 생성합니다. 이 파일을 frame grabber에 로드합니다. *.hap 파일을 편집 가능한 디자인 소스로 취급해서는 안 됩니다. 항상 *.vad 디자인을 변경하고 다시 빌드해야 합니다. 런타임에는 애플리케이션이나 런타임 툴이 장치에 쓰는 dynamic write parameters를 계속 변경할 수 있습니다.
실질적인 목표는 하드웨어에서의 실시간 이미지 처리입니다. PC에서 파이프라인을 *.vad 프로젝트로 편집하고 검증하는 동안, 빌드된 *.hap만이 해당 처리 로직과 데이터 흐름 구조를 실행 가능한 하드웨어로서 FPGA에 전달합니다.
Key Terms
Build란 VisualApplets의 그래픽 디자인을 frame grabber FPGA가 실행할 수 있는 구성으로 변환하는 것을 의미합니다.
파일 확장자가 *.hap인 hardware applet이 바로 그 실행 가능한 결과물입니다.
frame grabber는 카메라 데이터를 수신하고 FPGA를 탑재하며 빌드한 앱릿을 실행하는 컴퓨터 내의 확장 보드입니다. VisualApplets 자체에는 FPGA가 포함되어 있지 않습니다.
FPGA 기술#
field-programmable gate array(FPGA)는 수많은 programmable logic elements를 포함하는 칩입니다. 이러한 요소들과 온칩 라우팅을 구성하여 하드웨어 상에서 많은 연산을 병렬로 수행하는 complex digital circuits를 구현할 수 있습니다.
대상 frame grabber용 VisualApplets 디자인을 빌드하면 VisualApplets은 automatically maps 오퍼레이터와 링크를 FPGA 로직에 맞게 자동 매핑합니다. 사용자가 직접 이 매핑을 구현할 필요는 없습니다. VisualApplets은 배치, 라우팅 및 비트스트림 생성을 위해 공급업체별 FPGA 툴체인(일반적으로 Xilinx Vivado)을 처리합니다. PC의 *.vad 프로젝트가 FPGA를 구성하는 *.hap과 어떻게 연관되는지는 Basic Design Concepts를 참조하십시오.
조합 회로를 구축하는 데 주로 사용되는 programmable logic elements 외에도 FPGA는 클럭 제어 저장용 flip-flops, 라인 버퍼 및 기타 온칩 메모리용 block RAM, 그리고 빠른 곱셈-누산 및 유사 기능을 위한 DSP or arithmetic slices를 제공합니다. 동일한 자동 빌드 프로세스의 일환으로 VisualApplets은 오퍼레이터와 링크를 이러한 리소스에 매핑합니다. 디자인의 각 오퍼레이터는 로직, 메모리, 산술 연산 또는 이들의 조합과 같은 구체적인 하드웨어에 해당합니다.
디자인에 필요한 FPGA resources는 사용하는 모듈 수, 선택하는 오퍼레이터, 그리고 parallelism, 버퍼 크기 및 기타 파라미터를 설정하는 방법에 따라 달라집니다. 로직, 메모리 또는 병렬 데이터 경로를 더 많이 사용할수록 리소스 소비가 증가합니다. 디자인이 장치가 구현할 수 있는 범위를 초과하면 빌드가 실패하거나 타이밍 클로저를 달성하지 못할 수 있습니다. VisualApplets은 Design Rules Check Level 2(DRC Level 2)를 실행할 때 FPGA 리소스 소비를 추정하고 보고합니다. 사용자 설명서의 FPGA Resource Estimation 및 Design Rules Check를 참조하십시오. 리소스 소비가 늘어나는 방식, 적용되는 규칙, 그리고 디자인 선택 사항 간의 절충 방법에 대한 자세한 설명은 Parallelism 튜토리얼 주제 및 Memory Elements 튜토리얼 주제를 참조하십시오.
하드웨어의 파이프라인 실행#
프레임 그래버에서 빌드된 하드웨어 앱릿은 디자인을 파이프라인 방식의 하드웨어 경로로 구현합니다. 픽셀 데이터는 연속적인 흐름 속에서 연결된 모듈 단계를 거쳐 이동합니다.
VisualApplets에서 그린 파이프라인은 FPGA상의 하드웨어 경로를 모델링한 것입니다. FPGA는 데이터를 단계별로 처리하고 연속적인 흐름으로 하류(downstream)로 전달합니다. 이 디자인은 파이프라인이 경로상의 모든 단계에서 전체 이미지를 저장한다고 가정하지 않습니다. 생성된 FPGA 파이프라인은 Pipeline Concept 튜토리얼 주제에서 더 자세히 설명하는 바와 같이 이 파이프라인 모델에 따라 클럭 사이클마다 단계별로 데이터를 전송합니다.

메모리를 통해 대량의 데이터를 이동시키고 주로 순차적으로 명령을 실행하는 일반적인 CPU 워크플로와 비교할 때, FPGA는 파이프라인을 따라 process and transfer data pixelwise in parallel 수 있습니다. 프로그램 제어 하에 데이터를 대상으로 많은 스레드를 실행하는 GPU와 비교할 때, FPGA 파이프라인은 고정된 컨베이어 벨트에 더 가깝습니다. 데이터는 디자인에서 배선한 처리 단계를 통과하여 이동합니다. 문서에서 pipeline 비유를 자주 사용하는 이유가 바로 여기에 있습니다.
Key Terms
- FPGA는 VisualApplets에서 설계한 경로를 따라 많은 작은 연산이 at the same time 실행되는 frame grabber 상의 칩으로 생각할 수 있습니다. 빌드는 해당 디자인을 FPGA의 전용 하드웨어 로직으로 변환합니다. 그런 다음 픽셀 데이터가 컨베이어 벨트 위의 물품처럼 이러한 하드웨어 단계를 통과하여 흐르게 되는데, 이것이 바로 pipeline 개념입니다.
- CPU는 대개 단계별로 작업을 차례대로 처리하며 전체 데이터 청크를 자주 로드하고 저장합니다.
- GPU는 프로그램에 따라 많은 픽셀이나 스레드에서 동일한 연산을 병렬로 실행합니다.
클럭 사이클 및 타이밍#
FPGA 설계는 각 파이프라인 단계에 데이터 캡처, 전송 및 처리 시점을 알려주는 클럭 신호에 의존합니다. VisualApplets와 본 자습서에서는 이 클럭을 Base Design Clock이라고 부릅니다. 이는 생성된 FPGA 파이프라인의 클럭이며, 카메라 픽셀 클럭과는 다릅니다. 클럭 사이클(clock cycle)은 Base Design Clock의 한 틱(tick)을 의미합니다. 클럭의 상승 에지마다 파이프라인의 플립플롭이 입력 데이터를 저장하고 다음 단계로 전달합니다.
따라서 클럭 사이클은 다음과 같은 역할을 합니다.
- 파이프라인 내 레지스터와 같은 모든 요소의 타이밍을 정의합니다.
- 값이 예측 가능한 클럭 에지에서만 다음 단계로 이동하므로 안정적인 데이터 흐름을 보장합니다.
- 다음 사이클이 시작되기 전에 레지스터 사이의 모든 조합 논리 회로가 올바르게 정착될 수 있도록 Base Design Clock 주파수가 충분히 낮아야 하므로 최대 처리 속도를 결정합니다.
즉, 클럭 리듬은 전체 하드웨어 파이프라인을 정렬된 상태로 유지합니다. 개별 연산자도 파이프라인화되어 있습니다. 빌드는 각 연산자를 내부 레지스터 단계로 구현하므로, 단일 입력에 결과가 출력에 나타나기까지 여러 사이클이 소요되는 경우에도 FPGA 단계는 모든 클럭 사이클에서 새로운 입력을 수락할 수 있습니다. 파이프라인이 채워진 후에도 주어진 입력에서 결과까지의 레이턴시는 한 사이클보다 클 수 있지만, 출력에서의 처리량은 여전히 사이클당 하나의 결과가 될 수 있습니다. 이것이 바로 빌드 중 파이프라인과 리소스 매핑이 달성 가능한 Base Design Clock 주파수와 처리량에 직접적인 영향을 미치는 이유입니다.
정보
프레임 그래버의 Base Design Clock 주파수 및 기타 하드웨어 리소스 정보는 Device Resources에서 확인할 수 있습니다.
관련 항목#
- From Empty Design to Running Applet Tutorial 항목 — 디자인, DRC, 시뮬레이션 및 빌드
- Pipeline Concept 자습서 주제 — 파이프라인을 통한 데이터 이동 방식
- Parallelism 자습서 주제 — 대역폭, 클럭 및 FPGA 리소스
- Memory Elements 자습서 주제 — FPGA 메모리 및 프레임 그래버 DRAM
- Device Resources — Base Design Clock 및 플랫폼 리소스
- 사용 설명서의 Design Rules Check — DRC Level 1 및 Level 2