- Glider는 저지연·고주사율 EPD 모니터를 위한 오픈소스 프로젝트로, 이 저장소는 하드웨어 설계와 펌웨어를 담고 FPGA에서 동작하는 게이트웨어는 별도 오픈소스 Caster EPDC 설계를 사용함
- 지원 대상은 병렬 인터페이스를 가진 전기영동 디스플레이 패널이며, 흑백 패널과 Kaleido 같은 컬러 필터 배열 기반 컬러 화면을 모두 다룰 수 있음
- 보드는 Xilinx Spartan-6 LX16 FPGA, DDR3-800 프레임버퍼, STM32H750 MCU, USB-C DisplayPort Alt Mode 또는 DVI 입력, 최대 ±15V 레일에서 1A 피크 전류를 내는 E-paper 전원을 포함함
- Caster는 픽셀마다 독립 업데이트 영역처럼 처리하고 early cancellation을 적용해, 처리 지연을 20µs 미만으로 낮추며 바이너리·4단계 그레이스케일 모드에서 낮은 지연을 목표로 함
- 낮은 지연 설계는 더 큰 메모리 대역폭과 DVI·DisplayPort 같은 실제 저지연 영상 인터페이스를 요구하며, 1080p 예시에서 전통 방식 120MB/s 대비 Caster 방식은 540MB/s가 필요함
Glider와 Caster의 역할
- Glider는 저지연 EPD 모니터를 위한 오픈소스 하드웨어 프로젝트임
- 이 저장소에는 하드웨어 설계와 펌웨어 소스가 있으며, FPGA에서 실행되는 RTL은 별도 저장소의 Caster EPDC 설계임
- README는 Glider뿐 아니라 E Ink 패널, 파형, 컬러 표시, 디더링, 호환 화면에 대한 내용을 함께 담고 있음
- 보드 구매에 관심 있는 사용자는 Modos Paper Monitor Crowd Supply 제품 페이지를 확인할 수 있음
- E Ink 관련 상표와 내용은 E Ink Corporation의 보증을 받은 것이 아니며, 공개 정보와 자체 연구를 기반으로 해 오류나 부정확성이 있을 수 있음
주요 기능
- Glider/Caster 조합은 저지연·고주사율 EPD 모니터를 위한 완성형 솔루션을 목표로 함
- 지원 기능
- 병렬 인터페이스를 가진 EPD 패널 지원
- E Ink, OED, DES 계열 패널 지원
- 흑백 화면과 Kaleido 같은 CFA 기반 컬러 화면 지원
- 20µs 미만의 처리 지연
- 바이너리, 4단계 그레이스케일, 16단계 그레이스케일 출력 모드
- 지연 최적화 바이너리·4단계 그레이스케일 구동 모드
- 자동 바이너리·16단계 그레이스케일 하이브리드 모드
- 호스트 소프트웨어가 런타임에 영역 업데이트와 모드 전환을 제어 가능
- 추가 지연 없는 하드웨어 Bayer 디더링, blue-noise 디더링, 오류 확산 디더링
- 표준 HVsync 입력
- 보드 레벨에서 USB-C DisplayPort Alt Mode와 DVI 입력 지원
하드웨어 구성
- 보드는 KiCad로 설계되었으며, 소스 파일을 열려면 최신 안정 버전 KiCad가 필요할 수 있음
- 주요 구성
- Xilinx Spartan-6 LX16 FPGA에서 Caster 실행
- DDR3-800 프레임버퍼 메모리
- PTN3460 DP-LVDS 브리지를 통한 Type-C DisplayPort Alt Mode 입력
- ADV7611 디코더를 통한 microHDMI 커넥터 기반 DVI 입력
- 대형 패널을 지원하는 E-paper 전원부
- ±15V 레일에서 최대 1A 피크 전류
- VCOM kick-back 전압 측정 지원
- USB 통신과 펌웨어 업그레이드를 위한 STM32H750 MCU
- 오류 확산 디더링 활성화 시 최대 133MP/s 처리율
- 디더링 비활성화 시 200MP/s 초과 처리율
E Ink 패널과 컨트롤러 구조
- E Ink는 종이 같은 전기영동 디스플레이 계열의 브랜드이며, 입자에 전기장을 걸어 흑백 또는 중간 상태를 만드는 방식으로 동작함
- EPD는 LCD와 달리 전기장이 제거된 뒤에도 상태를 유지하는 쌍안정성을 가지며, 픽셀이 완전히 구동될 때까지만 갱신하면 됨
- EPD의 장점과 단점
- 빛을 방출하지 않고 반사하므로 전력 소비가 낮고 야외 사용이 가능함
- 전원 제거 후에도 이미지를 유지함
- 현대 IPS LCD와 비교하면 표시 품질, 색역, 응답 시간 측면에서 불리함
- 예시 수치에서 흑백 EPD는 약 17:1 대비, 약 150ms 응답 시간을 가짐
- CFA 기반 컬러 EPD는 약 14:1 대비, 약 1.5% sRGB 색역, 약 150ms 응답 시간을 가짐
- E Ink 컨트롤러는 LCD 시스템의 디스플레이 컨트롤러와 타이밍 컨트롤러에 가까운 역할을 하며, 원본 이미지 데이터를 패널 구동 신호로 바꿈
- 컨트롤러는 현재 픽셀 상태와 목표 상태에 따라 전압을 정하고, 보통 파형(waveform)이라는 LUT를 사용해 상태 전환별 구동 시퀀스를 선택함
컨트롤러 내장 패널과 비내장 패널
- E-paper 패널은 컨트롤러 내장 여부에 따라 크게 두 부류로 나뉨
- 컨트롤러 내장 패널
- SPI나 I2C 같은 일반 인터페이스로 MCU에 연결 가능
- 전원부가 통합된 경우가 많아 시스템 비용이 낮음
- 전체 업데이트 지연이 100ms에서 수 초까지 걸릴 수 있음
- 컨트롤러 없는 패널
- 전용 컨트롤러, E Ink 컨트롤러 내장 SoC, 빠른 MCU/SoC의 소프트웨어 TCON으로 구동 가능
- 전용 컨트롤러는 IoT, 전자책, 휴대폰, E Ink 모니터, E Ink 노트북 가능성까지 폭넓게 적용 가능함
- 빠른 구동 구조를 설계할 수 있지만 시스템 설계가 낮은 지연을 보장해야 함
- 기존 오픈소스 전용 컨트롤러 예시에는 Caster + Glider, Paperback 데스크톱 E-paper 모니터, FPGA E Ink 컨트롤러가 포함됨
- Caster + Glider는 FPGA 기반 컨트롤러로, 여러 업데이트 모드, 초저지연 처리, 넓은 화면 지원 범위를 제공함
파형과 그레이스케일
- 파형(waveform) 은 E Ink 컨트롤러가 픽셀을 어떻게 구동할지 결정하는 조회 테이블임
- LUT 입력은 프레임 번호, 출발 그레이스케일 레벨, 목표 그레이스케일 레벨로 구성됨
- 컨트롤러는 모든 픽셀에 대해 매 프레임 LUT를 조회하고, 픽셀이 완전히 구동될 때까지 프레임 카운터를 증가시키며 반복함
- 파형 파일은 단일 픽셀 전환만 다루므로 해상도와 독립적임
- 저장소는 여러 파형 형식 작업을 위한 도구를 제공함
iwf에서 i.MX6/7 EPDC용fw로 변환:./mxc_wvfm_asm v1/v2 input.iwf output.fwfw에서iwf로 변환:./mxc_wvfm_dump v1/v2 input.fw output_prefixwbf에서iwf로 변환:./wbf_wvfm_dump input.wbf output_prefix
- E Ink와 DES 패널은 벤더 제공 파형 기준으로 보통 최대 16단계 그레이스케일을 지원함
- 그레이스케일은 프레임 시간을 바꾸거나, 고정 프레임율에서 적용 프레임 수를 바꾸는 방식으로 만들 수 있음
- 상용 구현의 그레이스케일 구동은 흑백 표시보다 느리고, 갱신 중 깜빡임이 나타날 수 있음
컬러 EPD와 디더링
- 컬러 EPD 구현은 주로 컬러 필터 배열(CFA) 또는 다중 안료 컬러 디스플레이로 나뉨
- CFA 방식
- E Ink Kaleido, E Ink Triton, color DES가 이 방식에 속함
- 저수준 구동은 그레이스케일 패널과 같아 100~200ms 수준의 갱신 시간과 16단계 그레이스케일을 사용할 수 있음
- 16단계 그레이스케일은 16³ = 4096색으로 이어짐
- 컬러 필터가 빛을 걸러 화면이 어두워지는 단점이 있음
- Glider/Caster는 color DES, E Ink Triton, E Ink Kaleido를 지원함
- 다중 안료 컬러 디스플레이
- E Ink Gallery와 E Ink Spectra 계열이 포함됨
- CFA가 없어 해상도 감소와 광 손실이 없고, 더 높은 반사율과 채도를 얻을 수 있음
- 구동이 더 어렵고 느리며, 1·2세대 Gallery는 30초 갱신, Spectra 6 Plus 기기는 7초 갱신으로 소개됨
- 디더링은 제한된 그레이스케일이나 바이너리 표시에서 더 나은 이미지를 만들기 위해 사용됨
- ordered dithering은 이미지에 미리 계산된 텍스처나 노이즈를 더한 뒤 임계값 처리를 함
- error-diffusion dithering은 반올림 오류를 주변 픽셀로 전달함
- Bayer, blue-noise, Floyd-Steinberg, Stucki, Sierra 같은 방식이 다뤄짐
- CFA 기반 컬러 화면에서는 인접 픽셀의 색을 고려하지 않는 일반 오류 확산이 잘 맞지 않을 수 있으며, 같은 색 픽셀로 오류를 보내도록 커널을 조정할 수 있음
- 감마 보정도 중요하며, sRGB 공간에서 단순 반올림하면 가장 가까운 색 선택과 오류 계산이 잘못될 수 있음
Caster/Glider 아키텍처
- FPGA 게이트웨어는 여러 모듈로 나뉘며,
caster.v가 EPDC 코어의 최상위 설계임 - 전체 이미지 처리 시스템은
top.v아래에서 추가 컴포넌트를 연결해 구성함 - 주요 클록 도메인
clk_vi: 입력 비디오 클록 도메인, 픽셀 속도의 1/2clk_epdc: EPDC 클록 도메인, 픽셀 속도의 1/4clk_mem: 메모리 클록 도메인, 메모리 전송 속도의 1/4
- 픽셀 처리 흐름
memif가 DDR SDRAM에서 로컬 픽셀 상태를 읽어bi_fifo에 넣음- 입력 영상 스트림은
vi_fifo에 들어감 - EPDC의 로컬 타이밍 생성기가 픽셀 출력을 준비하면 영상 입력과 상태 값을 함께 꺼내 처리함
- 8비트 입력 이미지는 1비트와 4비트로 디더링됨
- 16단계 그레이스케일 모드에서 파형 조회가 수행됨
- 새 상태와 전압 선택 값이 결정됨
- 새 상태는
bo_fifo로 들어가고, 전압 선택 값은 화면으로 전송됨
- EPDC는 클록당 4픽셀을 항상 처리하며, 화면 인터페이스 폭이 다르면 출력 뒤에 rate adapter가 붙음
MCU 펌웨어 기능
- MCU는 FreeRTOS를 사용해 보드의 housekeeping 기능을 담당함
- EPD 전원 관리
- 공통 전원, 소스 전원, 게이트 전원을 제공함
- VCOM 전압 조정과 설치된 패널의 최적 VCOM 전압 측정을 수행함
- 전원 모니터링
- 여러 레일의 전압과 전류를 감시하고 예상 범위 안에 있는지 확인함
- FPGA 비트스트림 로딩
- FPGA에는 자체 플래시가 없으며, 전원 인가 시 MCU가 SPI로 비트스트림을 FPGA에 전송함
- FPGA 비트스트림과 MCU 펌웨어를 함께 묶어 업데이트할 수 있음
- USB-C 협상
- USB-C DisplayPort Alt Mode로 보드 전원과 영상 입력을 지원함
- USB PD 프로토콜로 영상 입력 기능을 소스 장치에 알림
- 케이블 방향에 따라 Type-C 신호 mux를 제어함
- 비디오 디코더 초기화
- FPGA가 DisplayPort나 DVI 같은 고속 영상 인터페이스에 직접 연결할 고속 deserializer를 갖지 않으므로, 전용 디코더 칩을 초기화함
- PC 통신
- Caster는 업데이트 모드와 강제 업데이트·클리어를 픽셀 단위로 적용할 수 있음
- MCU는 TinyUSB를 사용해 HID 장치로 동작하고, 호스트 PC와 FPGA 사이 메시지를 전달함
저지연 구동 방식
- 기존 기본 구동 방식은 전역 카운터로 파형 테이블을 조회해, 이전 업데이트가 끝난 뒤에야 새 이미지를 받는 제한이 있음
- 업데이트가 약 100ms 걸리면 이미지율은 10Hz가 되고, 새 이미지가 컨트롤러에서 처리되기 전까지 최대 100ms를 기다릴 수 있음
- Caster는 모든 픽셀을 독립 업데이트 영역처럼 취급함
- 소프트웨어가 문자 경계에 맞춰 영역을 설정하거나 제한된 영역 수를 재할당할 필요가 없음
- 이미 업데이트 중인 픽셀이 다시 바뀌면 early cancellation을 적용함
- 픽셀이 완전히 구동될 때까지 기다리지 않음
- 새 요청 상태 쪽으로 구동하고, 새로 계산한 구동 시간에 따라 프레임 카운터를 갱신함
- 두 기법을 결합해 저지연 바이너리와 4단계 그레이스케일 모드를 구현함
- Caster는 프레임율과 대비율의 트레이드오프도 더 이상 관련 없으며, 높은 프레임율과 높은 대비율을 자동으로 달성한다고 밝힘
하이브리드 그레이스케일 모드와 한계
- Caster는 빠른 바이너리 모드와 느린 그레이스케일 모드를 픽셀 단위로 자동 전환함
- 입력 이미지가 바뀌면 바이너리 모드로 업데이트하고, 이미지가 한동안 바뀌지 않으면 그레이스케일로 다시 렌더링함
- 이 방식은 더 큰 메모리 대역폭을 요구함
- 1080p 패널 예시에서 약 120MP/s로 계산함
- 전통 방식은 픽셀당 1바이트 읽기로 120MB/s가 필요함
- Caster는 픽셀 상태 버퍼만 픽셀당 2바이트 읽기와 2바이트 쓰기가 필요하고, 새 이미지 값 읽기에 픽셀당 0.5바이트가 더 필요함
- 결과적으로 120MP/s × 4.5B/pixel = 540MB/s가 필요함
- Glider 하드웨어는 더 높은 해상도를 위해 DDR3-800 메모리를 사용함
- 컨트롤러가 PC의 CPU/GPU 일부가 아니라 모니터 내부에 있을 때는 USB나 I80/SPI 같은 단순하지만 느린 인터페이스 대신 DVI나 DP 같은 실제 저지연 영상 인터페이스가 필요함
- 이러한 기법은 책 읽기 같은 사용 사례에는 도움이 되지 않으므로, 상용 전자책 솔루션이 이를 구현할 이유가 적다고 밝힘
빌드와 플래싱
- PCB는 KiCad 8.0으로 설계되었으며, 권장 4층 스택업은 1080 PP 레이어임
- FPGA 비트스트림 빌드
- Xilinx ISE 14.7이 필요함
- 최신 운영체제를 공식 지원하지 않으며, Xilinx의 공식 RHEL 가상 머신 사용이 권장됨
- Caster 저장소는
git clone --recursive https://gitlab.com/zephray/Caster.git로 받을 수 있음 rtl/spartan6/top.v의COLORMODE는MONO,RGBW,DES중 선택함rtl/defines.vh의OUTPUT_16B는 16비트 패널 사용 시 정의함- Modos 6인치와 13인치 키트는 기본값인
MONO, 8비트 설정이 맞음
- MCU 펌웨어 빌드
- STM32CubeIDE가 필요함
- Glider 저장소는
git clone --recursive https://gitlab.com/zephray/Glider.git로 받을 수 있음 Glider/fw를 STM32CubeIDE 프로젝트로 열어 빌드함
- 플래싱
dfu-util을 설치하고 USB 포트 가까운 버튼을 누른 상태로 USB 케이블을 연결함- 제공 플래싱 도구는 Python 3와
hidapi패키지를 사용함 - 수동 방식은
dfu-util로 MCU 펌웨어를 쓰고, 보드 셸에서 XMODEM으로 FPGA 비트스트림을 전송함
호환 화면과 성능 제한
- Modos Dev Kit는 13.3인치 1600×1200과 6인치 1404×1072 화면 옵션을 제공함
- 보드는 다른 패널도 구동할 수 있지만, 화면마다 커넥터가 달라 어댑터가 필요함
- 메인보드는 50핀 + 16핀 커넥터를 사용함
- 단일 50핀 커넥터는 8비트·16비트 화면에 충분함
- 16핀 커넥터는 LVDS 화면과 32비트·64비트 화면 지원을 추가함
- 지원 가능한 화면은 입력 프로토콜, 처리율, 메모리 인터페이스에 제한받음
- 디더링 활성화 처리율: 133MP/s
- 디더링 비활성화 처리율: 280MP/s
- 8-wide 설계의 추정 처리율: 500MP/s
- ADV7611 기반 DVI 최대 픽셀율: 165MP/s
- PTN3460 기반 DisplayPort 최대 픽셀율: 224MP/s
- DDR2/3-800 ×16 메모리 인터페이스 예시: 360MP/s
- 일반 해상도별 피크 픽셀율 예시
- 1600×1200 13.3인치 60Hz: 125MP/s
- 1600×1200 13.3인치 85Hz: 178MP/s
- 2200×1650 13.3인치 60Hz: 232MP/s
- 2560×1920 13.3인치 60Hz: 313MP/s
- 3200×1800 25.3인치 60Hz: 364MP/s
- 그레이스케일 렌더링에는 화면을 85Hz로 새로고침해야 하며, 85Hz는 E Ink가 지원하는 새로고침 주파수임
- 보드는 연결된 화면 해상도를 자동 감지하지 못하므로, 보드 셸에서 수동 설정하거나 구성 생성 도구를 사용해야 함
- 수동 계산에는 Video Timings Calculator by Tom Verbeure를 사용할 수 있음
라이선스와 참고 자료
- 문서는 명시된 별도 라이선스가 있는 참고 자료를 제외하고 퍼블릭 도메인으로 공개됨
- 하드웨어 설계는 CERN Open Source Hardware License strongly-reciprocal variant인 CERN-OHL-S로 공개됨
- 펌웨어 코드는 MIT 라이선스이며, USB PD 라이브러리는 Chromium OS 프로젝트와 reclamier labs에서 파생되어 BSD 라이선스를 따름
- 참고 자료에는 EPD 구동 역공학 자료, 초기 E Ink DIY 프로젝트, STM32 기반 그레이스케일 드라이버, ESP32 기반 EPDiy, WBF 파일 형식 도구와 파서가 포함됨