왜 HDMI 비디오 프로젝트에 FPGA가 자주 사용됩니까?


24

hackaday와 같은 사이트에서 hdmi 프로젝트 를 살펴보면 거의 모든 프로젝트에 FPGA가 포함되어 있음을 알 수 있습니다. FPGA를 사용하지 않은 HDMI 출력의 DIY 프로젝트를 본 적이 없다고 생각합니다.

그런데 왜? 내가 알 수 있듯이 FPGA는 약 $ 70- $ 100입니다. 35 달러에 Raspberry Pi와 비교하면 더 복잡한 작업을 수행하고 HDMI를 출력 할 수 있습니다. 왜 ARM을 사용하지 않습니까? 아니면 더 저렴한 마이크로 컨트롤러?

오래된 게임 시스템에서 비디오를 업그레이드하는 경우 로직은 저렴한 마이크로 컨트롤러가 처리 할 수 있는 더 복잡하지 않아야 하지만 HDMI는 FPGA에서만 처리 할 수없는 장애물로 계속보고 있습니다.


싸구려 G PUS도 찾을 수 있습니다 (RPi와 같이). 이 문제는 HDMI 라이센스를 위반하거나 일부 (DMCA) 국가에서 불법 인 일을하지 않을 것입니다. 어떤 프로젝트를 연결해야합니까? IP 코어 GPU를 구입하여 그러한 작업을 수행하도록 수정할 수 있습니다 .하지만 누가 당신을 위해 그것을 만들려고합니까? FPGA는 가난한 사람 (또는 해적) 팹입니다.
Fizz

답변:


66

기본적으로 마이크로 컨트롤러, 심지어 라즈베리 파이조차도 빠르지 않습니다. 라즈베리 파이에는 HDMI 출력을 생성하는 온보드 GPU가 있습니다. 그리고 그 외에, 라즈베리 파이의 I / O 기능은 엄청나게 제한되어 있습니다. HDMI를 제외하고 가장 높은 대역폭 인터페이스는 USB입니다. 많은 HDMI 변환 프로젝트는 이상한 비디오 포맷으로 또 다른 비디오 스트림을 가져와 HDMI를 통해 표준 HDTV로 전송할 수있는 것으로 재 작업합니다. 이를 위해서는 비디오 신호를 읽을 수있는 사용자 정의 인터페이스 로직, 다시 포맷하기위한 신호 처리 로직, HDMI TMDS 인코딩 로직 및 실제로 HDMI 포트를 구동하는 고속 시리얼 라이저가 필요합니다.

압축되고 압축되지 않은 고화질 비디오를 처리하려면 범용 CPU에서는 불가능한 엄청난 양의 데이터를 처리해야합니다. 초당 30 프레임의 1080p 비디오 신호는 초당 약 6 천 6 백만 픽셀을 갖습니다. 라즈베리 파이는 700 MHz에서 실행되므로 픽셀 당 11 개의 명령이 있습니다. 그리고 그것은 홀수 볼 비디오 형식으로 실시간으로 읽고, 크기를 조정하는 등의 11 가지 명령입니다. 불가능합니다. 기간.

FPGA에서는 클록 사이클 당 하나 이상의 픽셀을 처리 할 수있는 긴 처리 파이프 라인을 생성 할 수 있으며 픽셀 데이터가 HDMI를 통해 전송 될 준비가되도록 매우 결정적인 방식 (중단 또는 작업 전환 없음)으로 처리 할 수 ​​있습니다. 정확한 시간에. 모든 종류의 운영 체제를 실행하는 범용 CPU로 광범위하게 작업했다면 1 밀리 초 수준에서 정확한 타이밍을 얻는 것이 다소 불가능하지만 마이크로 초 수준에서는 거의 불가능합니다. HDMI의 경우 나노초 단위의 정밀도가 필요합니다. 범용 CPU에서는 불가능합니다. 또한 네오 지오의 HDMI 오디오 / 비디오 프로젝트를 살펴보십시오. 비디오 크기를 조정해야 할뿐만 아니라 오디오를 다시 샘플링하여 HDMI 비디오 스트림에 삽입해야합니다.

그리고 이것은 여전히 ​​당신이 가지고있는 입력 데이터 형식으로 읽는 데 필요한 사용자 정의 논리를 고려하지 않습니다. 이것을 해석하려면 커스텀 하드웨어가 필요합니다. 소프트웨어가 충분히 빠르거나 결정 론적이지 않습니다. 예를 들어, 일종의 USB 기반 스트림으로 다시 포맷 할 수는 있지만 어쨌든 맞춤형 디지털 로직이 필요하므로 HDMI를 직접 출력 할 수도 있습니다.

이 모든 것을 구현하기 위해 디지털 논리는 실제로 유일하게 실현 가능한 솔루션입니다. 디지털 로직을 수행하는 경우 FPGA가 유일한 솔루션입니다. 이산 7400 로직에 비해 너무 빠르고 너무 복잡하고 ASIC는 수십 배 더 비쌉니다.

또 다른 필수 구성 요소는 케이블로 전송되는 병렬 직렬 데이터 스트림을 생성하기위한 실제 고속 직렬 변환기 및 차동 드라이버입니다. 범용 CPU에서 초당 기가비트 순서로 직렬 데이터를 비트 뱅킹 할 수 없으므로 특수 하드웨어가 필요합니다. 라즈베리 파이에는이를 수행하는 온보드 GPU가 있지만 문서화 된 내용은 말할 것도없고 GPU의 기능에 따라 제한됩니다. 대부분의 FPGA에는 저해상도 비디오를 지원하기에 충분한 최소한의 필요한 차동 드라이버와 DDR 플립 플롭이 포함되어 있으며 풀 HD 스트림을 생성하는 데 필요한 시리얼 라이저 (예 : Xilinx OSERDES 블록)도 포함하고있는 FPGA도 있습니다. 시리얼 스트림이 '베이스 밴드'가 아님을 잊지 마십시오 실제 데이터가 일부 프레이밍 정보와 함께 그대로 전송되는 일반 직렬 포트와 같이 데이터는 실제로 TMDS (transition-minimized differential signalling)로 인코딩되어 신호에 전기적 특성을 부여합니다. 실제 고속 시리얼 라이저 외에이를 구현하려면 약간의 논리가 필요합니다. 이 모든 것은 ASIC 또는 FPGA에서 순수한 디지털 로직 (아직, 인코딩은 아날로그 또는 적어도 혼합 신호 임)에서 비교적 간단합니다.

실제로 전체 디지털 / 임베디드 시스템 설계 프로세스에서 소프트웨어의 어떤 부분을 소프트웨어로 구현할 수 있는지, 그리고 어떤 부분은 상용 특수 칩, FPGA, 커스텀 형태로 하드웨어를 필요로하는지 파악하는 것이 매우 중요합니다. ASIC, 하드 또는 소프트 IP (HDL, 넷리스트, GDSII) 등이 경우는 분명합니다. 비디오 신호 생성에는 특수 하드웨어가 필요합니다. 범용 CPU와 결합 된 GPU, 통합 하드가있는 FPGA 또는 소프트 CPU 코어 또는 외부 CPU와 쌍을 이루거나 더 전문화 된 것.

편집 : 방금 fpga4fun 사이트와 네오 지오 비디오 프로젝트가 풀 HD 대신 640x480에서 실행된다는 것을 깨달았습니다. 그러나 이것이 작동을 훨씬 간단하게 만드는 것은 아닙니다. 최소 픽셀 클럭은 25MHz이며 비트 클럭은 250MHz입니다. 즉, FPGA는 실제로 시리얼 라이저가 HDMI를 전송하기 위해 시리얼 라이저를 필요로하지 않으며 DDR 플립 플롭 만 의미합니다. 그래도 여전히 비디오 데이터를 읽는 문제를 완화하지는 않습니다. 하드웨어 지원없이 라즈베리 파이에서이 작업을 수행하려면 GPIO에서 25MHz로 지속적으로 읽어야합니다. 어느 것이 175 지침마다 읽습니다. 가능성의 영역에 들어가지만, 작업을 수행 할 수있는 유일한 방법은 수작업으로 조립 된 베어 메탈 (Linux 없음)에 있습니다.


2
이제 7400 로직을 언급 했으므로 개별 로직으로 HDMI 신호를 생성 할 수 있는지 궁금합니다. fpga4fun 사이트에는 250Mbit / sec 또는 125MHz DDR의 비트 전송률을위한 25MHz HDMI 클럭을 가진 640x480 비디오의 예가 있습니다. 개별 로직 칩으로 할 수있을 정도로 높지는 않습니다. 누군가에게 흥미로운 프로젝트가 될 수 있습니다.
alex.forencich

픽셀 당 11 개의 명령어-해당 숫자를 어떻게 계산 했습니까? 클럭 틱당 하나의 명령을 가정하고 있습니까?
gronostaj

700 MHz / 62 Mpps = 11.3. 단일 코어 CPU에 대한 클록주기 당 1 CPU의 야구장 가정.
alex.forencich

그리고 내가 언급하지 않은 다른 가정은 입력 비디오 신호가 하드웨어 지원없이 GPIO 핀에 비트 뱅킹 될 것이므로 그 지침은 어떻게 든 올바른 타이밍으로 인터리브되어야한다는 것입니다.
alex.forencich

15
TL; DR : 하드웨어에서 수행해야합니다. 소프트웨어가 너무 느립니다.
JS.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.