VisualApplets 기본 사항#
본 문서의 서론 및 목적#
핵심 용어
이 튜토리얼 전반에 걸쳐 ‘핵심 용어’라고 표시된 상자에는 해당 용어를 아직 잘 모르는 독자들을 위해 자주 사용되는 용어들이 설명되어 있습니다.
VisualApplets PC에 설치된 설계 도구입니다. FPGA는 프레임 그래버에 탑재된 칩입니다. 파이프라인은 ‘ VisualApplets ’에서 설계합니다. 빌드 과정에서 해당 파이프라인이 FPGA 상의 하드웨어로 구성됩니다. 카메라 데이터는 ‘ VisualApplets ’ 편집기가 아닌 프레임 그래버에서 처리됩니다.
기본 디자인 개념#
VisualApplets VHDL이나 Verilog와 같은 하드웨어 기술 언어로 코드를 작성하지 않고도 FPGA 기반 프로그래머블 하드웨어에서 이미지 처리 기능을 구현할 수 있게 해줍니다. 라이브러리 연산자를 활용해 그래픽 방식으로 설계를 구축하고, 이를 연결하여 이미지 데이터가 정의된 경로를 따라 흐르도록 합니다.
![[]에서의 그래픽 프로그래밍 VisualApplets []에서의 그래픽 프로그래밍 VisualApplets](images/screen-va-basic-design-structure.png)
또한, Python 및 Tcl 스크립트 언어를 사용하여 디자인을 생성하고 편집할 수 있습니다.
프로그래머블 프레임 그래버에서는 카메라나 다른 이미지 소스가 획득 경로로 연속적인 픽셀 스트림을 전송하고, 해당 보드에 탑재된 FPGA가 그 스트림을 처리합니다. 여기서 구축하는 것은 CPU처럼 FPGA가 불러와 실행하는 프로그램이 아닙니다. 대신, 이 구축 과정은 사용자의 파이프라인 구조와 일치하는 전용 디지털 회로를 FPGA 상에 구성하는 것입니다.
PC에서 ‘VisualApplets ’ 설계를 생성하고 편집합니다( *.vad 파일 내의 연산자, 모듈 및 연결). 그런 다음 빌드 단계에서 해당 파이프라인을 하드웨어 로직으로 변환합니다.

이러한 VisualApplets 설계에서는 연산자 라이브러리에서 연산자를 인스턴스화하며, 설계 내의 각 연산자 인스턴스를 ‘모듈’이라고 부릅니다. 모듈은 링크로 연결되며, 처리 순서는 이러한 모듈을 어떻게 배열하고 연결하느냐에 따라 결정됩니다. 모듈과 링크가 결합되어 이미지 처리 파이프라인을 형성하며, 이 파이프라인은 픽셀 데이터가 획득, 처리, 출력 단계를 거치며 이동하는 방식을 정의합니다.
이 튜토리얼에서 모듈이 런타임에 데이터를 처리, 버퍼링, 차단 또는 전송한다고 언급할 때, 이는 해당 모듈에서 생성된 FPGA 로직을 의미합니다. VisualApplets 에 있는 그래픽 모듈은 이러한 하드웨어 동작을 설명할 뿐, 그 자체로는 런타임 카메라 데이터를 처리하지 않습니다.
편집 가능한 설계를 *.vad 파일로 저장합니다. 특정 대상 프레임 그래버용으로 설계를 빌드하면, VisualApplets 에서 확장자가 *.hap인 바이너리 하드웨어 애플릿 파일을 생성합니다. 이 파일을 프레임 그래버에 로드합니다. *.hap 파일을 편집 가능한 설계 소스로 취급하지 마십시오. 항상 *.vad 설계를 변경한 후 다시 빌드해야 합니다. 실행 시에는 애플리케이션이나 런타임 도구가 장치에 기록하는 동적 쓰기 매개변수를 여전히 변경할 수 있습니다.
실질적인 목표는 하드웨어에서 실시간 이미지 처리를 수행하는 것입니다. PC에서 *.vad 프로젝트 형태로 파이프라인을 편집하고 검증하는 동안, 빌드된 *.hap 파일만이 해당 처리 로직과 데이터 흐름 구조를 FPGA로 전달하여 실행 가능한 하드웨어로 구현합니다.
핵심 용어
‘빌드(Build )’란 VisualApplets 에서 만든 그래픽 설계를 프레임 그래버 FPGA에서 실행할 수 있는 구성으로 변환하는 것을 의미합니다.
파일 확장자가 *.hap인 하드웨어 애플릿이 바로 그 실행 가능한 결과물입니다.
프레임 그래버는 컴퓨터에 장착되는 확장 보드로, 카메라 데이터를 수신하고 FPGA를 탑재하며 사용자가 빌드한 애플릿을 실행합니다. VisualApplets 에는 FPGA가 포함되어 있지 않습니다.
FPGA 기술#
FPGA( Field-Programmable Gate Array )는 수많은 프로그래머블 논리 소자를 포함하는 칩입니다. 이러한 소자와 칩 내부의 배선 구조는 구성 설정을 통해, 여러 연산을 병렬로 수행하는 복잡한 디지털 회로를 하드웨어로 구현할 수 있습니다.
대상 프레임 그래버용 VisualApplets 설계를 구축할 때, VisualApplets 는 사용자의 연산자 및 링크를 FPGA 로직에자동으로 매핑합니다. 사용자는 이 매핑을 직접 구현할 필요가 없습니다. VisualApplets 는 배치, 라우팅 및 비트스트림 생성을 위해 벤더별 FPGA 툴체인(일반적으로 Xilinx Vivado)을 처리합니다. PC상의 *.vad 프로젝트가 FPGA를 구성하는 *.hap 파일과 어떻게 연관되는지에 대해서는 ‘기본 설계 개념’을 참조하십시오.
일반적으로 조합 논리 회로를 구축하는 데 사용되는 프로그래머블 논리 소자 외에도, FPGA는 클럭 동기식 저장을 위한 플립플롭, 라인 버퍼 및 기타 온칩 메모리를 위한 블록 RAM, 그리고 빠른 곱셈-가산 연산 및 이와 유사한 기능을 수행하는 DSP 또는 산술 슬라이스를 제공합니다. 동일한 자동화된 빌드 흐름의 일환으로, VisualApplets 는 연산자와 링크를 이러한 리소스에 매핑합니다. 설계 내의 각 연산자는 논리, 메모리, 산술 또는 이들의 조합과 같은 구체적인 하드웨어에 대응합니다.
설계에서 필요한 FPGA 리소스는 사용하는 모듈 수, 선택한 연산자, 병렬 처리 방식, 버퍼 크기 및 기타 매개변수의 설정 방식에 따라 달라집니다. 로직, 메모리 또는 병렬 데이터 경로를 많이 사용할수록 리소스 소모량이 증가합니다. 설계가 디바이스가 구현할 수 있는 한도를 초과하면 빌드가 실패하거나 타이밍 클로저를 달성하지 못할 수 있습니다. VisualApplets 는 Design Rules Check Level 2 (DRC Level 2)를 실행할 때 FPGA 리소스 소모량을 추정하여 보고합니다. 사용자 설명서의 “FPGA 리소스 추정” 및 “설계 규칙 검사” 항목을 참조하십시오. 리소스 소비가 어떻게 누적되는지, 어떤 규칙이 적용되는지, 그리고 설계 선택 시 어떤 절충점을 고려해야 하는지에 대한 자세한 설명은 Parallelism 튜토리얼 항목과 메모리 요소 튜토리얼 항목도 참조하십시오.
하드웨어에서의 파이프라인 실행#
프레임 그래버에서 내장된 하드웨어 애플릿은 사용자의 설계를 파이프라인 방식의 하드웨어 경로로 구현합니다. 즉, 픽셀 데이터는 서로 연결된 연산 단계들을 통해 연속적인 흐름으로 이동합니다.
VisualApplets 에서 그리는 파이프라인은 FPGA상의 하드웨어 경로를 모델링한 것입니다. FPGA는 데이터를 단계별로 처리하여 연속적인 흐름으로 다음 단계로 전달합니다. 이 설계는 파이프라인이 경로상의 모든 단계에서 이미지 전체를 저장한다고 가정하지 않습니다. 생성된 FPGA 파이프라인은 ‘파이프라인 개념 자습서’ 항목에 더 자세히 설명된 바와 같이, 이 파이프라인 모델에 따라 클럭 사이클 단위로 데이터를 단계별로 전송합니다.

대개 대용량 데이터 블록을 메모리를 통해 이동시키고 명령어를 대체로 순차적으로 실행하는 일반적인 CPU 워크플로우와 달리, FPGA는 파이프라인을 따라 데이터를 픽셀 단위로 병렬 처리하고 전송할 수 있습니다. 프로그램의 제어에 따라 데이터에 대해 다수의 스레드를 실행하는 GPU프로그램 제어 하에 데이터에 대해 다수의 스레드를 실행하는 방식과 비교할 때, FPGA 파이프라인은 고정된 컨베이어에 더 가깝습니다. 데이터는 설계 시 배선한 처리 단계를 거쳐 이동합니다. 이것이 바로 문헌에서 파이프라인이라는 비유를 자주 사용하는 이유입니다.
핵심 용어
- FPGA를 프레임 그래버에 탑재된 칩으로 생각하면 됩니다. 이 칩에서는 사용자가 ‘ VisualApplets ’에서 설계한 경로를 따라 수많은 작은 연산들이 동시에 실행됩니다. 빌드 과정을 통해 해당 설계는 FPGA상의 전용 하드웨어 로직으로 구현됩니다. 그런 다음 픽셀 데이터는 컨베이어 위의 물품처럼 이러한 하드웨어 단계를 거쳐 흐르는데, 이것이 바로 파이프라인의 개념입니다.
- CPU는 대개 단계를 차례로 처리하며, 종종 데이터 전체 블록을 불러오고 저장합니다.
- A GPU 프로그램 내에서 많은 픽셀이나 스레드에 대해 동일한 종류의 연산을 병렬로 수행합니다.
클럭 사이클과 타이밍#
FPGA 설계는 각 파이프라인 단계에 데이터의 캡처, 전송 및 처리 시점을 알려주는 클럭 신호에 의존합니다. 《 VisualApplets 》와 이 튜토리얼에서는 이 클럭을 ‘기본 설계 클럭( Base Design Clock)’이라고 부릅니다. 이는 생성된 FPGA 파이프라인의 클럭이며, 카메라 픽셀 클럭과는 다릅니다. 클럭 사이클은 기본 설계 클럭의 한 틱을 의미합니다. 클럭의 상승 에지마다 파이프라인 내의 플립플롭은 입력 데이터를 저장하고 이를 다음 단계로 전달합니다.
따라서 클럭 사이클은 다음과 같습니다:
- 파이프라인 내 레지스터 등 모든 요소의 타이밍을 정의하십시오.
- 값은 예측 가능한 클럭 에지에서만 다음 단계로 이동하므로, 안정적인 데이터 흐름을 보장해야 합니다.
- 레지스터 간의 모든 조합 논리가 다음 사이클이 시작되기 전에 올바르게 안정화될 수 있도록 기본 설계 클럭 주파수를 충분히 낮게 설정해야 하므로, 최대 처리 속도를 결정하십시오.
다시 말해, 클럭 리듬이 전체 하드웨어 파이프라인을 동기화시켜 줍니다. 개별 연산자들도 파이프라인 방식으로 처리됩니다. 이 빌드는 각 연산자를 내부 레지스터 스테이지로 구현하므로, 특정 입력의 결과가 출력에 나타나기까지 여러 클럭 사이클이 소요되더라도 FPGA 스테이지는 매 클럭 사이클마다 새로운 입력을 받아들일 수 있습니다. 파이프라인이 가득 찬 후에도 출력의 처리량은 여전히 사이클당 하나의 결과일 수 있지만, 특정 입력에서 결과가 나오기까지의 지연 시간은 한 사이클보다 길 수 있습니다. 그렇기 때문에 빌드 과정에서의 파이프라이닝 및 리소스 매핑은 달성 가능한 기본 설계 클럭 주파수와 처리량에 직접적인 영향을 미칩니다.
정보
‘장치 리소스’에서 프레임 그래버의 기본 설계 클럭 주파수 및 기타 하드웨어 리소스 정보를 확인할 수 있습니다.
관련 항목#
- ‘빈 디자인에서 실행 가능한 애플릿까지’ 튜토리얼 주제 — 설계, DRC, 시뮬레이션 및 빌드
- 파이프라인 개념 튜토리얼 주제 — 데이터가 파이프라인을 통해 이동하는 방식
- Parallelism 튜토리얼 주제 — 대역폭, 클럭 및 FPGA 리소스
- 메모리 소자 튜토리얼 주제 — FPGA 메모리 및 프레임 그래버 DRAM
- 장치 리소스 — 기본 설계 클럭 및 플랫폼 리소스
- 사용자 설명서의 설계 규칙 검사 (DRC) — DRC 레벨 1 및 레벨 2