FPGA 기반 Ambilight 클론을 생성하는 방법은 무엇입니까?


10

빠른 배경 :
Ambilight 는 일부 Philips TV의 시스템으로 화면의 색상 정보를 분석 한 다음 디스플레이 뒷면의 일부 LED를 설정하여 화면 색상을 벽에 투사합니다. 꽤 멋진 효과입니다. PC를 사용하여 비디오를 처리하고 LED를 제어하는이 시스템의 복제본이 있습니다. 전체 기계를 사용하여 일부 LED를 춤추는 것이 약간 과잉

이라고 생각 합니다. 암호화되지 않은 처리 하기 위해 토끼의 NeTV 를 수정하고 싶습니다.HDMI 비디오 피드 및 일부 LED 구동. 나는 NeTV가 다른 목적으로 설계되었다는 것을 알고 있지만 목표를 달성하기 위해 수정할 수 있다고 생각합니다. 기본 Linux 하위 시스템, I2C 스푸핑, 비디오 오버레이 등은 신경 쓰지 않습니다.이 시점에서 HDCP 암호화 스트림을 사용하는 것에 대해서는 신경 쓰지 않습니다.

NeTV 회로도

NeTV 소스 코드

FPGA 블록 다이어그램 NeTV 블록 다이어그램
이것은 토끼의 프레젠테이션 슬라이드 중 하나의 블록 다이어그램입니다. 슬라이드 세트의 나머지는 여기에있다 .

HSYNC, VSYNC, PIXCLK를 보여주는 슬라이드
이 슬라이드는 비디오 픽셀이 실제로 디코딩 된 ( 암호화 되지는 않음 ) 것을 암시하는 것으로 보입니다 .

마지막으로 ... 내 생각과 질문 중 일부 :

  1. 원하는 하드웨어에서이 작업을 수행 할 수 있습니까? "예"이면 계속하십시오! "아니오"인 경우, 더 필요한 것이 무엇인지 알려주십시오!

  2. 외부 메모리없이 비디오 정보를 처리 할 수 ​​있습니까? 내가 알 수있는 한 FPGA가 직접 액세스 할 수있는 메모리는 없습니다. 이것은 아마도 비디오 데이터를 처리하는 데 사용하는 알고리즘에 달려 있습니다. 가능한 한 적은 FPGA 블록 RAM을 사용하려면 전체를 저장하는 대신 들어오는 픽셀의 '반복적 합산'을 사용하고 싶습니다. 사진 데이터의 프레임과 색상을 평균화합니다. 이 알고리즘의 구현에 관한 힌트가 있습니까? 이것을 시작하는 방법은 나의 가장 큰 장애물입니다.

  3. 비디오 데이터를 어디에서 '탭'해야하는지에 대한 소스 코드를 조사했습니다.
    이것은 적절한 지점처럼 보입니다.
    DVI 디코더의 블록 다이어그램
    이 이미지가 길다는 것을 알고 있습니다. 읽기 쉽도록 최선을 다합니다. 이를위한 자일링스의 도구!
    이것은 TMDS 데이터를 받아 각 색상에 대해 8 비트를 출력하는 것으로 보입니다.

  4. 나는 LED 드라이버를위한 일종의 상태 머신을 가져야한다-매 클럭 사이클마다 비디오 데이터를 처리하기 위해 내가 만든 모듈에서 픽셀 정보를 얻는다.

이것이 장황하거나 길면 미안합니다-철저히 노력하고 있습니다 ...이 문제를 해결하는 데 도움이 필요합니다. 이것은 FPGA 프로젝트에서 처음 시도한 것입니다. 일부는 초보자에게는 너무 어려울 수도 있지만 ... 어딘가에서 시작해야한다고 말합니다 :) 읽어 주셔서 감사합니다.


1
NeTV는 HDMI 스트림을 디코딩하지 않습니다. HDCP 협상 프로세스를 따르고 일치하도록 새 스트림을 암호화합니다. 나는 당신이 이것으로부터 비디오 정보를 얻을 수 있다고 생각하지 않습니다.
akohlsmith

관련 회로도를 게시 (링크) 할 수 있습니까? 또한 관련 HDL 모듈의 선언이 도움이 될 것입니다.
drxzcl

1
@AndrewKohlsmith, TV에서 오버레이가 완료 되었습니까? 와우, HDMI가 그렇게 할 줄 몰랐어요!
drxzcl

1
외부 메모리 프레임 버퍼를 사용하지 않고 필요한 모든 작업을 수행 할 수 있는지 잘 모르겠지만 어쨌든 어떤 색상 분석을 사용할 계획입니까? FFT 인 경우 시간이 걸리며 주변 광이 비디오 색상에 너무 늦지 않을지 확실하지 않습니다. 먼저 HDMI에서 데이터를 가져 와서 분석 할 수 있는지 확인하십시오. 예를 들어 저역 통과 필터를 수행하여 결과를 출력하십시오.
소크라테스

1
NeTV가 나왔을 때 이것을 다시 읽은 것을 기억 합니다. 그 게시물에 따르면, Bunnie는 소스 HDMI를 해독 할 필요가없는 까다로운 오버레이 방식을 사용합니다. 그는 필요할 때 다시 암호화 합니다. 암호화 된 스트림의 디코딩이 없습니다.
mng

답변:


7

나는 dvi_decoder 모듈 의 코드와 문서를 완전히 바탕으로 대답 하고 있으며 실제로 광고 된대로 작동한다고 가정합니다. 이 파일은 앱 노트 Spartan-3A FPGA에서 TMDS I / O를 사용한 비디오 연결 및 / 또는 Spartan-6 FPGA에서 TMDS 비디오 인터페이스 구현 에서 IP의 (수정 된) 사본 인 것 같습니다 . 이 응용 프로그램 노트는 중요한 세부 사항으로 가득 차 있으므로 자세히 읽으십시오.

질문에 표시된 것처럼 암호화되지 않은 스트림, 즉 비 HDCP 스트림을 처리한다고 가정합니다. NeTV 프로젝트의 정보가 HDCP를 해독하도록 조정될 수 있다고 확신하지만, 사소한 양의 추가 작업이 필요하며 귀하의 관할권에 따라 의심스러운 법적 근거가 될 것입니다.

dvi_decoder 블록의 출력에서 ​​필요한 데이터를 얻을 수있는 것처럼 보입니다. 블록 출력 24 비트 컬러 와이어를 이용하여 정보 red, greenblue화소 클록 동기화, pclk. 출력 hsyncvsync경보 각각 줄 / 화면의 마지막 사용자. 일반적으로 이러한 출력을 사용하여 평균화를 즉시 수행 할 수 있어야합니다.

당신은 번역하는 몇 가지 기본 논리가 필요합니다 hsync, vsync(X, Y) 위치에와 픽셀 클럭을. 에 대한 X하나와에 대한 하나의 두 카운터를 인스턴스화하십시오 Y. X모든 픽셀 클럭에서 증가합니다 . X에서 0으로 재설정하십시오 hsync. Y마다 증분 hsync. Y마다 0으로 재설정하십시오 vsync.

사용하여 red, green, blue, X그리고 Y, 당신은 비행 평균에 할 수 있습니다. 와 비교하여 X그리고 Y, 당신은 어떤 경우, 각 픽셀에 기여해야 상자 것을 확인할 수 있습니다. 색상 값을 누적 레지스터에 합산하십시오. 평균값을 얻으려면 레지스터의 값을 픽셀 수로 나눠야합니다. 당신이 똑똑하다면, 픽셀 수는 2의 거듭 제곱이어야합니다. 그런 다음 레지스터의 MSB를 원하는 드라이브에 연결하면됩니다.

축적하는 동안 디스플레이를 구동 시키려면 이중 버퍼링을 수행해야합니다. 따라서 컴포넌트 당 박스당 두 개의 레지스터가 필요합니다. 25 개 문자열을 사용하는 경우 25 * 3 * 2 = 150 개의 레지스터가 필요합니다. 그것은 상당히 약간이므로 레지스터 대신 블록 램을 사용하고 싶을 수도 있습니다. 그것은 당신의 정확한 요구 사항, 실험에 달려 있습니다!

원래의 adafruit 프로젝트 키트에 사용 된 것과 같은 LED 스트링을 운전할 것이라고 가정합니다 . SPI를 사용하여 레지스터의 값에서 드라이브를 구동하는 방법을 알아낼 수 있어야합니다.

dvi_decoder 모듈은 상당히 복잡한 키트입니다. 앱 노트를 자세하게 연구하는 것이 좋습니다.

또한이 프로젝트에 사용할 NeTV를 아직 구입하지 않은 경우 Digilent 's Atlys 보드도 살펴 보는 것이 좋습니다 . 2 개의 HDMI 입력과 2 개의 HDMI 출력으로 이런 종류의 프로젝트에 맞게 조정 된 것으로 보입니다.


NP, 멋진 질문에 감사드립니다. 이 프로젝트와 관련된 특정 문제가 발생하면 언제든지 다시 게시하십시오.
drxzcl

Btw, (그리고 이것은 문제의 범위를 벗어나는 것입니다) 상대적으로 강력한 마이크로 컨트롤러 시스템에서 물건을 운전하는 것을 고려 했습니까? RaspberryPi와 같은 것이 약 6 배 저렴하며 LED를 구동하고 동시에 비디오를 표시 할 수 있어야합니다.
drxzcl

여전히 JScope 도구가 들어 오기를 기다리고 있으므로 ChipScope로 디버깅 할 수 있습니다 ...이 답변을 수락하십시오. 이 문제를 해결하기위한 근본적인 접근법을 제시합니다. @drzxcl 나는 이미 소유하고있는 netv를 가지고있다. RaspPi는 흥미로운 제안이지만 비디오 소스로 hdmi를 사용하는 것은 불가능합니다.
dext0rb

이 작업을 수행 한 적이 있습니까? 쓰기 / 비디오를보고 싶습니다!
drxzcl

아니 정말. : | 나는 반 엉덩이 LED 드라이버 를 만들었지 만 더 많은 시간을 할애하지 못했습니다. 잘만되면 곧.
dext0rb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.