ePicasso 2D / 2.5D 그래픽 엔진¶
소개¶
ePicasso는 SF32 마이크로컨트롤러 제품군을 위한 SiFli의 2D/2.5D 그래픽 가속 엔진입니다. 반복적으로 수행되는 지원 가능 픽셀 연산을 애플리케이션 CPU 대신 처리하여, 임베디드 UI가 MCU급 전력 예산 안에서 부드러운 효과와 빠른 상호작용을 제공하고 디스플레이를 효율적으로 업데이트하도록 돕습니다.
SF32 그래픽 흐름에서 ePicasso는 리소스를 렌더러가 사용할 수 있게 된 이후, 최종 비트맵이 디스플레이 컨트롤러에 도달하기 전에 동작합니다. 이미지 복사, 블렌딩, 스케일링, 회전, 레이어 합성 같은 픽셀 처리 작업을 가속합니다. eZip은 에셋 압축 해제를 수행하여 디코딩된 이미지 데이터를 ePicasso에 전달할 수 있으며, 디스플레이 컨트롤러는 준비된 픽셀을 패널로 전송합니다. 리소스에서 패널까지의 전체 경로는 그래픽 개요를 참고하십시오.
애플리케이션은 보통 개별 ePicasso 작업을 직접 프로그래밍하지 않습니다. 대신 LVGL 같은 그래픽 프레임워크나 벤더 그래픽 라이브러리가 일반적인 UI 작업에 대한 명령을 구성합니다. SF32 그래픽 드라이버는 지원되는 작업을 ePicasso로 전달하고, 지원되지 않는 작업은 CPU 렌더링으로 대체합니다.
UI 프로파일링에서 복사, 채우기, 알파 블렌드, 스케일링, 회전, 합성이 반응성을 제한하거나 소비 전력을 높이는 것으로 나타나면 이 페이지를 읽으십시오. 펌웨어 엔지니어가 무엇을 가속할 수 있고 무엇을 올바른 CPU 폴백 경로에 남겨야 하는지 판단하는 데 도움이 됩니다.
하드웨어 그래픽 가속이 중요한 이유¶
임베디드 UI 성능은 CPU 명령 처리량보다 메모리 이동에 의해 제한되는 경우가 많습니다. 반투명 아이콘 하나만 해도 영향을 받는 모든 픽셀에 대해 소스 읽기, 프레임버퍼 읽기, 픽셀 블렌딩, 프레임버퍼 쓰기가 필요할 수 있습니다.
ePicasso는 사용자 인터페이스 전반에 나타나는 반복적인 픽셀 작업을 가속하여 이 상황을 개선합니다.
- 이미지 블록과 프레임버퍼 영역 복사
- 사각형과 UI 배경 채우기
- 아이콘, 텍스트 마스크, 그림자, 오버레이의 알파 블렌딩
- 반응형 레이아웃과 애니메이션을 위한 비트맵 스케일링
- 이미지 영역의 회전 또는 변환
- 여러 레이어를 최종 디스플레이 버퍼로 합성
- 디바이스와 드라이버가 지원하는 경우 일반적인 픽셀 포맷 간 변환
이점은 프레임 레이트에 그치지 않습니다. 하드웨어 가속은 CPU 사용률을 낮추고, 터치 반응성을 개선하며, 디스플레이 업데이트 사이에 더 낮은 전력 상태로 전환할 기회를 늘려 줄 수 있습니다.
CPU 오프로드가 시스템 전체의 에너지 감소를 보장하지는 않습니다. 가속기 클럭, 메모리 트래픽, 동기화 및 드라이버 오버헤드가 CPU 절감분을 상쇄할 수 있습니다. 전력 효율을 CPU 사용률만으로 판단하지 말고, 디스플레이와 유휴 구간을 포함하여 대상 하드웨어에서 화면 업데이트 한 번을 완료하는 데 드는 에너지를 비교하십시오.
핵심 렌더링 개념¶
서피스와 프레임버퍼¶
서피스는 픽셀 메모리의 사각형 영역입니다. 전체 화면 프레임버퍼, 부분 드로우 버퍼, 이미지 에셋, 캔버스, 중간 레이어를 나타낼 수 있습니다. ePicasso 작업은 일반적으로 하나 이상의 소스 서피스에서 픽셀을 읽어 대상 서피스에 씁니다.
서피스는 접근 패턴에 맞는 메모리에 배치하십시오.
- 자주 업데이트되는 드로우 버퍼는 공간이 충분하다면 빠른 내부 SRAM에서 이점을 얻는 경우가 많습니다.
- 큰 이미지, 폰트, UI 에셋은 플래시 또는 PSRAM에 둘 수 있습니다.
- 고해상도 디스플레이의 전체 화면 프레임버퍼에는 PSRAM이 필요할 수 있습니다.
- DMA가 접근할 수 있는 버퍼는 SDK의 메모리 및 캐시 일관성 규칙을 따라야 합니다.
블렌딩¶
블렌딩은 소스 픽셀과 대상 픽셀을 결합합니다. 반투명 카드, 부드러운 그림자, 안티앨리어싱된 글리프, 오버레이, 페이드 애니메이션 같은 최신 UI 요소에 필수적입니다.
일반적인 블렌딩 사례는 다음과 같습니다.
- 레이어 전체를 페이드시키는 상수 알파 블렌딩
- PNG 계열 이미지와 안티앨리어싱된 아이콘을 위한 픽셀별 알파 블렌딩
- 텍스트, 도형, 단색 에셋을 위한 마스크 기반 블렌딩
ePicasso가 하드웨어로 블렌딩을 처리하면, CPU는 영향을 받는 영역의 모든 픽셀에 대해 같은 연산을 실행하지 않아도 됩니다.
스케일링과 회전¶
스케일링과 회전은 애니메이션 인터페이스와 반응형 레이아웃에서 흔히 쓰입니다. 하드웨어 스케일링은 확대/축소 효과, 미리보기 썸네일, 크기를 조정한 아이콘, 서로 다른 화면 밀도에 맞춘 에셋 적응에 사용할 수 있습니다. 회전은 화면 방향 전환, 회전하는 게이지, 워치페이스 요소, 일부 전환 효과에 유용합니다.
이러한 작업은 대역폭에 민감합니다. 이점은 소스와 대상 포맷, 메모리 배치, 그래픽 드라이버가 해당 작업을 지원되는 하드웨어 방식으로 표현할 수 있는지에 따라 달라집니다.
레이어 합성¶
많은 화면은 배경, 이미지 에셋, 텍스트, 상태 표시기, 팝업, 애니메이션 오버레이 등 여러 시각 레이어로 구성됩니다. 레이어 합성은 이러한 요소를 최종적으로 보이는 결과로 결합합니다.
ePicasso는 이러한 방식의 2D 합성을 가속하도록 설계되었습니다. 소프트웨어로 화면 전체를 다시 그리는 대신, UI 프레임워크가 무효화된 영역만 업데이트하고 가속기를 사용하여 변경된 픽셀을 효율적으로 합성할 수 있습니다.
2D 및 2.5D 그래픽¶
2D 그래픽은 보통 평면 사각형 이미지에 대해 수행하는 복사, 채우기, 블렌딩, 스케일링, 회전, 합성 작업을 가리킵니다.
2.5D 그래픽은 2D 프레임버퍼에 렌더링하면서도 변환이나 원근감 같은 동작을 더하는 효과에 쓰이는 용어입니다. 임베디드 UI 설계에서는 변환된 이미지 영역, 더 풍부한 전환 효과, 또는 완전한 3D 렌더링 파이프라인 없이 시각적인 깊이감을 주는 효과가 여기에 해당할 수 있습니다.
SF32 문서에서 ePicasso는 데스크톱급 프로그래머블 3D GPU가 아니라 주로 2D/2.5D UI 가속기로 이해해야 합니다. 목적은 임베디드 인터페이스를, 특히 웨어러블, 스마트 컨트롤, 휴대용 기기, 소형 대시보드에 쓰이는 디스플레이에서 더 부드럽고 전력 효율적으로 만드는 것입니다.
ePicasso 구현 비교¶
엔진 이름만 비교하지 말고 각 디바이스 제품군의 구현을 비교하십시오. 디스플레이 해상도, 레이어 수, 지원 포맷, eZip 기능, 외부 메모리 대역폭, 드라이버 지원도 선택한 SF32 디바이스, 패키지, SDK, 보드 설계에 따라 달라집니다. SiFli의 SF32LB52x 제품 브리프는 해당 엔진을 ePicasso 2.0이라고 명명합니다. SF32LB56x 데이터시트는 전경 레이어 네 개, 전용 마스크 레이어 하나, 단색 배경 레이어 하나를 명시하며, TurboPixel은 LCD 컨트롤러의 프레임버퍼 압축 기능으로 별도 문서화합니다. SF32LB58x 데이터시트는 ePicasso 2.0과 별도의 Vivante GCNanoUltraV 벡터 엔진을 문서화합니다.
| 문서화된 엔진 | 대표 SF32 제품군 | 그래픽 범위 | 문서화된 차별점 | 실용적인 적합성 |
|---|---|---|---|---|
| ePicasso | SF32LB55x | 2.5D UI 가속 | 하드웨어 회전, 스케일링, 수평 미러링, 알파 블렌딩. 수직 미러링은 지원되지 않습니다. eZip 무손실 에셋 워크플로. | 보급형 설계보다 풍부한 UI가 필요한 BLE 웨어러블과 소형 HMI |
| ePicasso 2.0 | SF32LB52x | 2D/2.5D UI 가속 | 원가 최적화형 그래픽 구성에서 eZip 2.0 에셋 압축 해제 | 보급형 웨어러블, Bluetooth 제품, e-paper, 소형 HMI |
| ePicasso 2.0 | SF32LB56x | 2D/2.5D UI 가속 | 알파 블렌딩되는 전경 레이어 네 개, 전용 마스크 레이어 하나, 단색 배경 레이어 하나. 하드웨어 회전/스케일링과 수평 미러링(수직 미러링은 지원되지 않음). 포맷 변환. eZip 2.0. 별도의 TurboPixel 프레임버퍼 압축 | 고해상도 디스플레이와 더 풍부한 LVGL 인터페이스. 선택한 디바이스와 SDK의 작업 지원 여부를 확인하십시오. |
| ePicasso 2.0 | SF32LB58x | 2D/2.5D UI 가속 | ePicasso 2.0과 별도의 Vivante GCNanoUltraV 벡터 그래픽 엔진을 포함합니다. 각 엔진이 지원하는 기능은 독립적으로 확인하십시오. | 고해상도, 그래픽 중심 제품. 대상 SDK가 각 엔진에서 지원하는 기능을 확인하십시오. |
| ePicasso (EPIC) | SF32LB57x | 2D/2.5D UI 가속 | 회전, 스케일링, 행렬 변환, 수평 및 수직 미러링, 알파 블렌딩, 다중 레이어 합성. EZIP는 디코딩된 eZip/eZip-A 에셋을 EPIC에 전달합니다. EPIC 포맷 표에는 SF32LB57x의 JPEG 입력이 별도로 나열되어 있으며, SDK는 독립형 JPEGD HAL 디코더도 제공하는데 이는 별개의 경로입니다. | 그래픽 중심, 카메라 지원, 멀티미디어 지향 연결형 제품 |
이것은 벤치마크 순위가 아닙니다. 제품 설계에서는 정확한 칩이 지원하는 픽셀 포맷, 레이어 및 해상도 제한, eZip 기능, 사용 가능한 프레임버퍼 메모리, 디스플레이 인터페이스 대역폭, SDK 드라이버 지원 범위를 확인하십시오.
SDK의 EPIC 기능 표는 나열된 제품군 전반에서 수평 미러링을 문서화하지만, 수직 미러링은 SF32LB52x와 SF32LB57x에서만 문서화합니다. 한정어 없는 "미러링"이라는 표현을 양방향 지원으로 해석하지 마십시오. 같은 표는 EZIP, JPEG, YUV 입력을 회전과 행렬 변환에서 제외합니다.
EZIP-EPIC 경로는 압축 해제된 소스 이미지 전체를 중간 프레임버퍼에 저장하지 않아도 되지만, 디코더 작업 메모리와 최종 렌더 버퍼는 여전히 필요합니다. JPEG 디코딩은 EZIP 기능이 아닙니다. SDK는 SF32LB57x에서 JPEG를 EPIC 입력 포맷으로 나열하며, 이와 별도로 HAL_JPEGD로 JPEG 이미지를 디코딩하는 JPEGD HAL 예제를 제공합니다. 이 둘은 문서화된 별개의 경로이므로 애플리케이션이 사용하는 정확한 파이프라인을 확인하십시오.
이 정지 이미지 예제가 JPEGD를 통한 MJPEG 스트림 디코딩을 입증하지는 않습니다. SDK는 MJPEG를 FFmpeg 비디오 미들웨어 가이드에서 별도로 문서화하며, 그 가이드의 MJPEG 구성 참고 사항에 따르면 하드웨어 디코딩은 SF32LB58x에서만 사용할 수 있습니다.
또한 가속 경로를 선택하기 전에 포맷별 제약과 제품군별 차이를 확인하십시오. 업스트림 EPIC 기능 표와 JPEGD 인터페이스를 사용하십시오.
SF32 제품군별 ePicasso¶
SF32 디바이스마다 서로 다른 ePicasso 구성을 통합합니다. 최종 기능 집합은 선택한 칩의 데이터시트와 레퍼런스 매뉴얼을 기준으로 하십시오.
| 디바이스 제품군 | 그래픽 가속기 | 일반적인 포지셔닝 |
|---|---|---|
| SF32LB52x | ePicasso 2.0 2D/2.5D 가속기 | 원가 최적화형 웨어러블, Bluetooth 제품, 소형 HMI |
| SF32LB55x | ePicasso 2.5D 가속기 | 디스플레이가 필요한 BLE 웨어러블 및 센서 비중이 높은 디바이스 |
| SF32LB56x | ePicasso 2.0 2D/2.5D 가속기 | 고해상도 디스플레이 제품과 더 풍부한 LVGL 방식의 인터페이스 |
| SF32LB57x | ePicasso(EPIC) 2D/2.5D 가속기 | 그래픽 중심, 카메라 지원, 멀티미디어 지향 연결형 제품 |
| SF32LB58x | ePicasso 2.0과 별도의 Vivante GCNanoUltraV 벡터 엔진 | 플래그십 그래픽, 고해상도 UI, 고급 비주얼 애플리케이션 |
이러한 발전 구조 덕분에 개발자는 SF32 전반에서 비슷한 그래픽 소프트웨어 모델을 유지하면서, 필요한 디스플레이 해상도, 메모리, 그래픽 복잡도, GPIO 수, 전력 예산에 맞는 디바이스를 선택할 수 있습니다.
LVGL 및 UI 프레임워크와의 통합¶
LVGL은 SF32 디바이스의 임베디드 그래픽 인터페이스에 널리 쓰이는 선택지입니다. 애플리케이션은 위젯, 스타일, 이미지, 폰트, 애니메이션으로 화면을 구성합니다. LVGL은 다시 그려야 할 영역을 식별하고, 소프트웨어 렌더러 또는 하드웨어 드로우 백엔드가 해당 영역의 픽셀을 생성합니다. 디스플레이 드라이버의 플러시 경로는 렌더링된 픽셀을 패널로 전송하고 완료를 알립니다. 렌더링 완료와 디스플레이 전송 완료를 구분하여 유지하십시오.
SF32 포트가 지원되는 드로우 작업을 하드웨어로 전달하면 ePicasso가 LVGL 성능을 향상시킬 수 있습니다. 가속 효과가 가장 큰 지점은 보통 다음과 같습니다.
- 이미지 복사(blit)
- 색상 채우기
- 알파 블렌딩
- 이미지 스케일링
- 지원되는 이미지 영역의 회전 또는 변환
- 드로우 버퍼 또는 프레임버퍼로의 합성
견고한 LVGL 통합은 CPU 폴백 경로를 유지합니다. 모든 LVGL 기능, 픽셀 포맷, 스타일 효과, 이미지 레이아웃이 하드웨어 작업에 깔끔하게 대응되는 것은 아닙니다. 흔하고 처리량이 큰 작업을 가속하고, 드물거나 복잡한 경우는 소프트웨어에 맡기십시오.
메모리와 대역폭 고려 사항¶
그래픽 가속이 세심한 메모리 설계의 필요성을 없애 주지는 않습니다. 많은 임베디드 디스플레이 시스템에서 메모리 버스가 제한 요소입니다. ePicasso, CPU, 디스플레이 컨트롤러, DMA 엔진, 플래시, PSRAM, 오디오, 무선 서브시스템이 모두 접근을 두고 경합할 수 있습니다.
좋은 그래픽 성능은 여러 설계 선택에 달려 있습니다.
- 제품 요구 사항에 맞는 디스플레이 해상도와 색 깊이를 사용합니다.
- 자주 쓰는 UI 에셋은 접근 지연 시간이 허용 가능한 메모리 위치에 둡니다.
- 전체 화면 리프레시가 불필요하다면 부분 렌더링이나 더티 영역 업데이트를 사용합니다.
- 핫 패스에서 불필요한 포맷 변환을 피합니다.
- SDK 권장 사항에 따라 드로우 버퍼와 프레임버퍼를 정렬합니다.
- CPU, ePicasso, 디스플레이 컨트롤러가 버퍼를 공유할 때 DMA와 캐시 일관성 규칙을 명확히 유지합니다.
CPU와 ePicasso가 공유하는 캐시 가능한 버퍼는 SDK의 캐시 관리 및 소유권 규칙을 따르십시오. 하드웨어가 읽기 전에 CPU가 쓴 소스 데이터를 clean하십시오. 하드웨어가 대상 버퍼에 쓰기 전에는 SDK의 캐시 규칙을 따라 더티 CPU 캐시 라인이 나중에 결과를 덮어쓰지 못하게 하고, 하드웨어 작업이 완료된 후 CPU가 읽기 전에 오래된 라인을 invalidate하십시오. 캐시 라인 정렬과 인접 데이터를 지키고, 하드웨어가 소유하고 있는 동안에는 버퍼를 수정하지 마십시오. 공유 버퍼 워크플로는 그래픽 개요를 참고하십시오.
그래픽 개요의 역할 구분은 UI 성능 디버깅의 핵심입니다. 느린 업데이트는 렌더링 시간, 메모리 대역폭, 패널 전송 속도, 디스플레이 인터페이스 구성, 동기화 전략에서 비롯될 수 있습니다. ePicasso는 렌더링이 병목일 때 가장 큰 도움이 됩니다. 패널 전송이 제한 요소라면 부분 리프레시, 낮은 색 깊이, 다른 버퍼링 전략, 더 빠른 인터페이스가 더 중요할 수 있습니다.
대표적인 사용 사례¶
ePicasso는 인터페이스에 시각 요소가 많으면서도 시스템이 마이크로컨트롤러 수준의 전력 예산 안에 머물러야 하는 제품에서 가장 유용합니다.
대표적인 사용 사례는 다음과 같습니다.
- 스마트워치 워치페이스와 앱 화면
- 피트니스 트래커와 웨어러블 헬스 디스플레이
- Bluetooth 오디오 사용자 인터페이스
- eBike, eScooter 및 소형 차량 대시보드
- 스마트 홈 컨트롤과 소형 터치 패널
- 휴대용 의료 또는 산업용 계측기
- 라벨 프린터, 스마트 배지, 전자 가격표
- 아이콘, 투명도, 애니메이션이 있는 LVGL 기반 HMI
실용적인 설계 지침¶
디스플레이와 사용자 경험 요구 사항에서 출발하여 그래픽 아키텍처를 역으로 설계하십시오.
중요한 질문은 다음과 같습니다.
- 디스플레이 해상도와 색 깊이는 어떻게 됩니까?
- 패널은 SPI, QSPI, 8080, RGB/DPI, MIPI DSI, EPD, JDI 중 무엇으로 업데이트합니까?
- 제품에 전체 화면 애니메이션이 필요합니까, 아니면 대부분 부분 업데이트입니까?
- UI 에셋은 내부 SRAM, 플래시, PSRAM 중 어디에 저장합니까?
- 드로우 버퍼나 프레임버퍼에 사용할 수 있는 메모리는 얼마입니까?
- 그래픽 드라이버가 ePicasso를 통해 가속할 수 있는 작업은 무엇입니까?
- CPU, ePicasso, 디스플레이 컨트롤러의 버퍼는 캐시 일관성이 유지됩니까?
많은 제품에서 최상의 결과는 하드웨어 가속 드로잉, 부분 리프레시, 압축 또는 최적화된 에셋, 세심한 버퍼 배치, 불필요한 전체 화면 재그리기를 피하는 UI 설계 등 여러 기법을 결합할 때 나옵니다.
핵심 요약¶
- ePicasso는 SF32 마이크로컨트롤러를 위한 SiFli의 2D/2.5D 그래픽 가속기입니다.
- 채우기, 복사, 블렌딩, 스케일링, 회전, 레이어 합성 같은 일반적인 픽셀 작업을 오프로드합니다.
- 디스플레이 컨트롤러와 함께 동작합니다. ePicasso는 픽셀 데이터를 준비하고, 디스플레이 컨트롤러는 이를 패널로 보냅니다.
- 메모리 이동, 블렌딩, 반복적인 픽셀 처리가 그렇지 않으면 상당한 CPU 시간을 소비할 UI 중심 제품에서 이점이 가장 큽니다.
- SF32 그래픽 드라이버가 지원되는 드로우 작업을 하드웨어에 매핑하면 LVGL과 다른 UI 프레임워크도 ePicasso의 이점을 얻을 수 있습니다.
- 실제 성능은 디스플레이 해상도, 메모리 배치, 픽셀 포맷, 버퍼 전략, 캐시 처리, 패널 인터페이스 대역폭에 따라 달라집니다.
최종 업데이트: