วิธีการสร้าง Ambilight แบบอิง FPGA ได้อย่างไร


10

พื้นหลังอย่างรวดเร็วบางอย่าง:
Ambilightเป็นระบบของทีวี Philips บางรุ่นที่วิเคราะห์ข้อมูลสีบนหน้าจอจากนั้นตั้งค่า LED บางส่วนที่ด้านหลังของจอแสดงผลเพื่อฉายภาพสีของหน้าจอลงบนผนัง มันเป็นเอฟเฟกต์สวย ๆ มีโคลนของระบบนี้ในตอนนี้ที่ใช้พีซีเพื่อประมวลผลวิดีโอและควบคุมไฟ LED ฉันคิดว่านี่น่าจะเกินความจริงนิดหน่อย - โดยใช้ทั้งเครื่องเพื่อเต้นรำ LED บางตัว ...

ฉันต้องการที่จะดัดแปลงNeTV ของ bunnyเพื่อประมวลผลการเข้ารหัสฟีดวิดีโอ HDMI และขับ LED บางตัว ฉันรู้ว่า NeTV ได้รับการออกแบบมาเพื่อวัตถุประสงค์อื่น แต่ฉันรู้สึกว่ามันสามารถปรับเปลี่ยนได้เพื่อให้บรรลุเป้าหมายของฉัน ฉันไม่สนใจระบบย่อยของ Linux, การปลอมแปลง I2C, การซ้อนทับวิดีโอ ฯลฯ ณ จุดนี้ฉันไม่เกี่ยวข้องกับการทำงานกับสตรีมเข้ารหัส HDCP

แผนงาน NeTV

รหัสที่มา NeTV

FPGA Block Diagram แผนภาพบล็อก NeTV
นี่คือแผนภาพบล็อกจากหนึ่งในสไลด์การนำเสนอของ bunnie ส่วนที่เหลือของชุดสไลด์อยู่ที่นี่

สไลด์โชว์ HSYNC, VSYNC, PIXCLK
สไลด์นี้ดูเหมือนจะบ่งบอกว่าพิกเซลวิดีโอในความเป็นจริงการถอดรหัส (ไม่จำเป็นต้องถอดรหัส )

ในที่สุด ... บางความคิดและคำถามของฉัน:

  1. สามารถทำได้บนฮาร์ดแวร์ที่ฉันต้องการหรือไม่ หาก "ใช่" ให้ทำต่อไป! ถ้า "ไม่" บอกฉันว่าต้องการอะไรอีก!

  2. ฉันจะสามารถประมวลผลข้อมูลวิดีโอโดยไม่มีหน่วยความจำภายนอกหรือไม่ ไม่มีหน่วยความจำที่ FPGA สามารถเข้าถึงได้โดยตรงเท่าที่ฉันสามารถบอกได้ อาจขึ้นอยู่กับอัลกอริทึมที่ฉันใช้ในการประมวลผลข้อมูลวิดีโอ - เพื่อใช้เป็น FPGA Block RAM น้อยที่สุดเท่าที่จะเป็นไปได้ฉันคาดเดาว่าฉันต้องการใช้ 'การรวมซ้ำวนซ้ำ' ของพิกเซลที่เข้ามาแทนที่จะเก็บทั้งหมด เฟรมของข้อมูลรูปภาพจากนั้นเฉลี่ยสี มีคำแนะนำใดบ้างเกี่ยวกับการใช้อัลกอริทึมนี้? วิธีเริ่มต้นด้วยสิ่งนี้คือสิ่งกีดขวางที่ยิ่งใหญ่ที่สุดของฉัน

  3. ฉันตรวจสอบซอร์สโค้ดว่าฉันควรจะ 'แตะลงใน' ข้อมูลวิดีโอได้อย่างไร
    ดูเหมือนว่าเป็นจุดที่เหมาะสม:
    บล็อกไดอะแกรมของตัวถอดรหัส DVI
    ฉันรู้ว่าภาพนี้ยาว - มันดีที่สุดที่ฉันสามารถทำได้ในขณะที่อ่านให้ชัดเจน ตำหนิเครื่องมือของ Xilinx!
    ดูเหมือนว่าจะใช้ข้อมูล TMDS และเอาต์พุต 8 บิตสำหรับแต่ละสี

  4. ฉันควรมีเครื่องสถานะบางอย่างสำหรับไดรเวอร์ LED - ทุกรอบนาฬิกาจะได้รับข้อมูลพิกเซลจากโมดูลใดก็ตามที่ฉันสร้างเพื่อประมวลผลข้อมูลวิดีโอ

ขออภัยถ้านี่เป็นคำพูดหรือยาว - ฉันพยายามที่จะอย่างละเอียด ... ฉันแค่ต้องการความช่วยเหลือในการลงจากพื้นด้วย นี่เป็นความพยายามครั้งแรกของฉันที่โครงการ FPGA บางคนอาจบอกว่ามันยากเกินไปสำหรับผู้เริ่มต้น แต่ฉันบอกว่า ... ต้องเริ่มต้นที่ไหนสักแห่ง :) ขอบคุณสำหรับการอ่าน


1
NeTV ไม่ได้ถอดรหัสสตรีม HDMI มันเป็นไปตามกระบวนการเจรจา HDCP และเข้ารหัสสตรีมใหม่เพื่อให้ตรงกับ; ฉันไม่คิดว่าคุณจะสามารถรับข้อมูลวิดีโอจากสิ่งนี้ได้
akohlsmith

คุณช่วยกรุณาโพสต์ (ลิงก์ไปยัง) แผนงานที่เกี่ยวข้องได้ไหม? นอกจากนี้การประกาศของโมดูล HDL ที่เกี่ยวข้องจะช่วยได้เช่นกัน
drxzcl

1
@AndrewKohlsmith ดังนั้นการวางซ้อนจึงเสร็จสิ้นในตอนท้ายของทีวี ว้าวฉันไม่รู้เลยว่า HDMI จะทำเช่นนั้นได้!
drxzcl

1
ฉันไม่แน่ใจว่าคุณจะสามารถทำทุกสิ่งที่คุณต้องการโดยไม่ต้องใช้บัฟเฟอร์เฟรมหน่วยความจำภายนอก แต่อย่างไรก็ตามคุณวางแผนที่จะใช้การวิเคราะห์สีอะไร หากเป็น FFT แล้วจะใช้เวลาสักครู่และฉันไม่แน่ใจว่าแสงโดยรอบจะไม่สายเกินไปสำหรับสีของวิดีโอ ฉันว่าก่อนอื่นลองรับข้อมูลจาก HDMI และตรวจสอบว่าคุณสามารถวิเคราะห์ได้ เช่นทำตัวกรองความถี่ต่ำและส่งออกผลลัพธ์
โสกราตีส

1
ฉันจำได้ว่าอ่านข้อความนี้เมื่อ NeTV ออกมา ตามโพสต์นั้นบันนี่ใช้รูปแบบการวางซ้อนที่ไม่จำเป็นต้องถอดรหัส HDMI ต้นทาง เขาเพิ่งเข้ารหัสใหม่เมื่อจำเป็น ไม่มีการถอดรหัสของสตรีมที่เข้ารหัส
mng

คำตอบ:


7

ฉันใช้คำตอบของฉันอย่างสมบูรณ์ในรหัสและเอกสารของโมดูล dvi_decoderและสมมติว่ามันใช้งานได้จริงตามที่โฆษณาไว้ แฟ้มนี้ดูเหมือนว่าจะเป็น (แก้ไข?) คัดลอกของทรัพย์สินทางปัญญาในบันทึก app ที่เชื่อมต่อวิดีโอโดยใช้ TMDS I / O ในสปาร์ตัน-3A FPGAsและ / หรือการใช้อินเตอร์เฟซวิดีโอ TMDS ในสปาร์ตัน-6 FPGA แอพโน้ตเหล่านี้เต็มไปด้วยรายละเอียดที่สำคัญและฉันแนะนำให้คุณอ่านอย่างละเอียด

ตามที่คุณระบุในคำถามฉันจะถือว่าคุณกำลังทำการรักษาสตรีมที่ไม่ได้เข้ารหัสซึ่งเป็นสตรีมที่ไม่ใช่ HDCP ฉันค่อนข้างแน่ใจว่าข้อมูลในโครงการ NeTV สามารถดัดแปลงเพื่อถอดรหัส HDCP ได้ แต่จะเกี่ยวข้องกับงานเพิ่มเติมจำนวนเล็กน้อยและอยู่ในพื้นที่ทางกฎหมายที่น่าสงสัยขึ้นอยู่กับเขตอำนาจของคุณ

ดูเหมือนว่าคุณจะสามารถรับข้อมูลที่คุณต้องการจากผลลัพธ์ของบล็อก dvi_decoder บล็อกเอาท์พุทข้อมูล 24 บิตสีโดยใช้สายไฟred, greenและblue, pclkซิงค์กับนาฬิกาพิกเซล เอาต์พุตhsyncและvsyncแจ้งเตือนผู้ใช้ถึงจุดสิ้นสุดของบรรทัด / หน้าจอตามลำดับ โดยทั่วไปคุณควรจะสามารถทำได้โดยเฉลี่ยโดยใช้เอาต์พุตเหล่านี้

คุณจะต้องมีตรรกะพื้นฐานในการแปลhsync, vsyncและนาฬิกาพิกเซลเป็นที่ตั้ง (X, Y) เพียง instantiate สองเคาน์เตอร์หนึ่งและหนึ่งสำหรับX Yเพิ่มขึ้นXทุกนาฬิกาพิกเซล รีเซ็ตให้เป็นศูนย์ที่X hsyncเพิ่มขึ้นYทุกhsyncๆ รีเซ็ตYเป็นศูนย์ทุกvsync

การใช้red, green, blue, XและYคุณสามารถทำในค่าเฉลี่ยการบิน เมื่อเปรียบเทียบกับXและYคุณสามารถกำหนดว่าแต่ละพิกเซลควรมีส่วนร่วมในกล่องใดถ้ามี รวมค่าสีลงในการลงทะเบียนการสะสม ในการรับค่าเฉลี่ยคุณจะต้องหารค่าในการลงทะเบียนด้วยจำนวนพิกเซล หากคุณฉลาดคุณจะต้องแน่ใจว่าจำนวนพิกเซลคือกำลังสอง จากนั้นคุณสามารถต่อสาย MSB ของการลงทะเบียนกับสิ่งที่คุณต้องการขับ

เนื่องจากเราต้องการแสดงผลในขณะที่ทำการสะสมเราจะต้องทำการบัฟเฟอร์สองครั้ง ดังนั้นเราจะต้องลงทะเบียนสองครั้งต่อกล่องต่อองค์ประกอบ หากคุณกำลังใช้สตริงที่นำ 25 ซึ่งหมายความว่าคุณจะต้องมีการลงทะเบียน 25 * 3 * 2 = 150 ค่อนข้างน้อยดังนั้นคุณอาจต้องการใช้ block ram แทนการลงทะเบียน ทุกอย่างขึ้นอยู่กับความต้องการที่แน่นอนของคุณทดลอง!

ผมถือว่าคุณจะขับรถสตริงนำเช่นหนึ่งที่ใช้ในชุดโครงการ adafruit เดิม คุณควรจะรู้วิธีการขับจากค่าในรีจิสเตอร์ด้วย SPI ได้อย่างง่ายดาย

โมดูล dvi_decoder เป็นชุดที่ค่อนข้างซับซ้อน ฉันแนะนำให้คุณศึกษารายละเอียดแอพอย่างละเอียด

เช่นกันถ้าคุณยังไม่ได้ซื้อ NeTV สำหรับการใช้งานในโครงการนี้ผมขอแนะนำให้คุณยังมีลักษณะที่คณะกรรมการ Atlys Digilent ของ ด้วยอินพุต HDMI สองชุดและเอาท์พุท HDMI สองตัวดูเหมือนว่าจะเหมาะสำหรับโครงการประเภทนี้


NP ขอบคุณสำหรับคำถามเจ๋ง ๆ หากคุณพบปัญหาใด ๆ กับโครงการนี้โปรดโพสต์อีกครั้ง
drxzcl

Btw, (และนี่คือ cmpeletely นอกขอบเขตของคำถาม) คุณเคยลองขับสิ่งนี้จากระบบไมโครคอนโทรลเลอร์ที่ค่อนข้างอ้วนหรือไม่? บางอย่างเช่น RaspberryPi มีราคาถูกกว่าถึง 6 เท่าและน่าจะสามารถขับ led และแสดงวิดีโอได้ในเวลาเดียวกัน
drxzcl

ยังคงรอให้เครื่องมือ JTAG ของฉันเข้ามาเพื่อให้ฉันสามารถดีบักด้วย ChipScope ... จะยอมรับคำตอบนี้ มันวางแนวทางพื้นฐานในการแก้ปัญหานี้ @drzxcl ฉันได้รับ netv ไว้ในครอบครองแล้ว RaspPi เป็นคำแนะนำที่น่าสนใจ แต่เป็นไปไม่ได้ที่จะใช้ hdmi เป็นแหล่งวิดีโอ
dext0rb

คุณเคยได้รับสิ่งนี้ในการทำงานหรือไม่? ฉันชอบที่จะเห็นการเขียน / วิดีโอ!
drxzcl

ไม่ไม่ได้จริงๆ : | ฉันทำไดร์เวอร์ LEDแบบครึ่งทางแต่ไม่ได้มีเวลามากพอ หวังว่าเร็ว ๆ นี้
dext0rb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.