FPGA'lar neden HDMI video projeleri için bu kadar sık ​​kullanılıyor?


24

Eğer aracılığıyla bakacak olursak hackaday gibi bir sitede hdmi projelerde , onlara o hemen her biri bir FPGA içeren bulacaksınız. FPGA kullanmayan HDMI çıkışı olan herhangi bir DIY projesi gördüğümü sanmıyorum.

Ama neden? Söyleyebileceğim kadarıyla, FPGA'lar pahalı, 70-100 $ civarında. Bunu 35 dolarlık bir Raspberry Pi ile karşılaştırın, daha karmaşık şeyler yapabilir ve HDMI çıkışı elde edebilirsiniz. Bir ARM neden kullanılmıyor? Veya daha ucuz bir mikrodenetleyici?

Videoyu eski oyun sistemlerinde yükseltmek durumunda, mantık daha ucuz olmamalı , ucuz bir mikrodenetleyicinin idare edebileceği bir durum olmamalı , ancak HDMI'yi sadece FPGA'lar tarafından ele alınan imkansız bir engel olarak görüyorum.


Siz de ucuz G PUS (RPI'daki gibi) bulabilirsiniz. Buradaki sorun, HDMI lisansını ihlal eden veya bazı (DMCA) ülkelerde tamamen yasa dışı olan şeyleri yapmayacaklarıdır. Bağlantı yaptığınız projelerin çoğu budur. Bir IP çekirdeği GPU'su satın alabilir ve bu tür şeyleri yapmak için onu değiştirebilirsiniz ... Ama sizin için kim yetiştirecek? FPGA fakir bir adamdır (veya korsan).
Fizz

Yanıtlar:


66

Temel olarak, hiçbir mikroişlemci, hatta ahududu pi, yeterince hızlı değildir. Ahududu pi, HDMI çıkışını üreten yerleşik bir GPU'ya sahiptir. Bunun dışında ahududu pi'nin G / Ç özelliği inanılmaz derecede sınırlıdır - HDMI'dan farklı olarak en yüksek bant genişliği arayüzü USB'dir. HDMI dönüştürme projelerinin çoğu, garip bir formatta başka bir video akışı almayı ve bunu HDMI üzerinden standart bir HDTV'ye gönderilebilecek bir şey haline getirmeyi içerir. Bu, video sinyalinde okumak için bazı özel arayüz mantığı, onu yeniden biçimlendirmek için işlem yürütme mantığı, HDMI TMDS kodlama mantığı ve ardından HDMI portunu sürmek için yüksek hızlı seri hale getiriciler gerektirir.

Akış, sıkıştırılmamış, yüksek tanımlı videolarla çalışmak, genel amaçlı bir CPU'da mümkün olmayan büyük miktarda veriyi işlemeyi gerektirir. Saniyede 30 kare hızında olan bir 1080p video sinyali saniyede 62 milyon piksele sahiptir. Ahududu pi 700 MHz'de çalışır, böylece piksel başına 11 talimatınız vardır. Ve tuhaf video formatında gerçek zamanlı olarak okumak, yeniden boyutlandırmak vb. 11 talimat. Bu mümkün değil. Dönemi.

Bir FPGA'da, saat döngüsü başına bir veya daha fazla pikseli işleyebilen ve bunu çok belirleyici bir şekilde (kesintiler veya görev değiştirme!) Yapabilen, böylece piksel verilerinin HDMI üzerinden iletime hazır olması için uzun bir işlem hattı oluşturmak mümkündür. tam olarak doğru zamanda. Herhangi bir işletim sistemini çalıştıran genel amaçlı CPU'larla yoğun bir şekilde çalıştıysanız, bir milisaniyelik seviyede doğru zamanlamanın elde edilmesinin neredeyse veya daha az yapılabilir olduğunu bileceksiniz, ancak mikrosaniye düzeyinde neredeyse imkansız olduğunu anlayacaksınız. HDMI için nanosaniye ölçek hassasiyetine ihtiyacınız var. Genel amaçlı bir işlemcide yapılamaz. Ayrıca, neo geo için HDMI ses / video projesine bakın. Bu videoyu yalnızca yeniden ölçeklendirmekle kalmaz, aynı zamanda sesi yeniden örneklemeli ve HDMI video akışına yerleştirmelidir.

Bu da, sahip olduğunuz giriş verisi biçiminde okumak için gereken özel mantığı göz önüne almaz. Bunu yorumlamak için özel donanıma ihtiyacınız olacak. Yazılım yeterince hızlı veya yeterince belirleyici değil. Bunu bir tür USB tabanlı akışta yeniden biçimlendirmek mümkün olabilir, ancak bu yine de özel bir dijital mantık gerektirecektir, bu yüzden doğrudan HDMI çıkışı da yapabilirsiniz.

Tüm bunları uygulamak için, dijital mantık gerçekten uygulanabilir tek çözümdür. Ve eğer dijital mantık yapıyorsanız, ayrık 7400 mantığı için çok hızlı ve çok karmaşık olduğu için FPGA'ler mümkün olan tek çözümdür ve ASIC'ler büyük oranda daha büyük siparişlerdir.

Gereken bir diğer bileşen, gerçek yüksek hızlı serileştiriciler ve kablodan gönderilen paralel seri veri akışlarını üreten diferansiyel sürücülerdir. Seri bir veriyi genel amaçlı bir işlemciden saniyede bir gigabit sırasına göre ayarlamak mümkün değildir, bu özel bir donanım gerektirir. Ahududu pi, bunu yapan bir GPU'ya sahiptir, ancak belgelenmiş olandan bahsetmek yerine, GPU'nun yapabilecekleri ile sınırlıdır. Çoğu FPGA, en azından gerekli diferansiyel sürücüleri ve düşük çözünürlüklü videoyu desteklemek için yeterli olan DDR flip flop'larını içerir ve full HD akışları oluşturmak için gerekli serileştiricileri (yani Xilinx OSERDES blokları) da içeren oldukça az sayıda FPGA vardır. Seri akışın 'temel bant' olmadığını unutmayın gerçek verilerin bazı çerçeveleme bilgileriyle sözlü olarak gönderildiği normal bir seri bağlantı noktası gibi, ancak veriler sinyale belirli elektriksel özellikler kazandırmak için aslında TMDS (geçişi en aza indirgemiş diferansiyel sinyalizasyonu) ile kodlanmıştır. Gerçek yüksek hızlı serileştiricilere ek olarak bunu uygulamak için bir miktar mantık gerekir. Bunların hepsi, bir ASIC veya bir FPGA üzerinde saf dijital mantıkta (her neyse, yine de kodlayıcı - seri hale getiriciler muhtemelen analog veya en azından karışık sinyaller) yapmak için oldukça kolaydır.

Bu, bir sistemin hangi parçalarının yazılımda uygulanabileceğini ve hangilerinin kullanıma hazır özel cipsler, FPGA'lar, özel biçimler halinde donanım gerektirdiğini bulmak, genel dijital / gömülü sistem tasarım sürecinin çok önemli bir parçasıdır. ASIC'ler, sert veya yumuşak IP (HDL, netlists, GDSII), vb. Bu durumda net bir şekilde anlaşılır: video sinyali üretimi özel bir donanım gerektirir, genel amaçlı bir CPU ile eşleştirilmiş bir GPU, bir bütünleşik sert veya bir FPGA Yumuşak CPU çekirdeği veya harici bir CPU ile eşleştirilmiş veya daha özel bir şey.

Düzenleme: Sadece fpga4fun sitesi ve neo geo video projesinin full HD yerine 640x480'de çalıştığını gördüm. Ancak, bu işlem gerçekten çok daha basitken gerçekleşmez. Minimum piksel saati 25 MHz, bit saati 250 MHz'dir. Bu, FPGA'nın HDMI, sadece DDR flip flopları iletmek için serileştirici gerektirmediği anlamına gelir. Bu yine de video verilerini okuma konusunu hafifletmiyor. Ahududu pi üzerinde donanım desteği olmadan bunu yapmak istiyorsanız, GPIO'dan sürekli olarak 25 MHz'de okumak zorunda kalacaksınız. 175 talimatın her birini okuyun. Olasılık alanına girmek, ancak bu işi yapmanın tek yolu, el kodlu düzene sahip çıplak metaldir (Linux yok).


2
Şimdi 7400 mantığından bahsettiğimde ... Ayrık mantıkla bir HDMI sinyali oluşturmanın mümkün olup olmadığını merak ediyorum. Fpga4fun sitesi, 250 Mbit / sn veya 125 MHz DDR bit hızı için 25 MHz HDMI saatli 640x480 video örneğine sahiptir. Ayrık mantık yongaları ile yapılabilecek kadar yüksek değil. Birisi için ilginç bir proje olabilir.
alex.forencich 09:15

Piksel başına 11 talimat - bu sayıyı nasıl hesapladınız? Saat tik başına bir talimat mı alıyorsunuz?
gronostaj

700 MHz / 62 Mpps = 11.3. Tek çekirdekli işlemciler için saat döngüsü başına 1 CPU olan ballpark varsayımı
alex.forencich 09:15

Ve bahsetmediğim diğer varsayım, giriş video sinyalinin donanım yardımı olmadan GPIO pinlerine çarpacağını, bu nedenle talimatların bir şekilde doğru zamanlama ile birleştirilmesi gerektiğidir.
alex.forencich 09:15

15
TL; DR: Donanımda yapılması gerekiyor. Yazılım çok yavaş.
JS.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.