FPGA kapsamını çöplükten kurtarır

Ben her zaman katı bütçeme saygı duyacak olan laboratuvarımın kaliteli bir eklenmesini sağlar. Son zamanlarda, kendimi her bir proje engelini yaptığım her projeyle iterdim ve böylece umutsuzca bir bant genişliği kapsamı arzu etti. Ne yazık ki, sadece yakın zamanda 100 MHz ila 100 MHz’ye sahip olmak gerçekten uygun olursa, 500 MHz’teki yeni bir dört kanal osiloskopu 1 GHz aralığında hala bir servete mal oluyor. Tek seçeneğim, eski bir bant genişliği kapsamı şeklinde mutlak bir mucize bulmaktı.

HP 54542C’yi bulduğumda beni aşağı elimden aşağı elektronik tanrıları bana gülümsüyor gibiydi. Peri iyi durumda olduğu ortaya çıktı ve günündeki en iyi köpek oldu. Ama bir şey doğru kırılmak zorunda kaldı? Elbette yeterince, ekran açıkça hatalı ve okunaksızdı. Nasıl düzelttiğimi bilmek ister misin? Dört harf: FPGA.

Sorun
Bu kapsam üzerinde bazı sığ araştırmalar bazı ilginç tarihler ortaya çıkardı. Bunun sözde HP’nin bir LCD ile ilk yüksek son kapsamıydı ve aynı zamanda piyasayı yönlendirmek için devam edecek Infinium of Infinium dizi kapsamına öncülüydü. LCD, sonradan bir şey gibi hissetti. Kapsam, bir CRT ekranı ile başka türlü benzer bir varyant vardı ve elde ettiğim sürüm sadece CRT sindirim sistemleri ortadan kaldırdı ve HP tarafından yüklü bir renkli LCD’ye sahipti. LCD’nin hatalı olduğunu umduğum ve ASIC’in sürdüğünü umdum, bu, nazik bir musluk gibi iyi bir bahis gibi görünüyordu, bazı durumlarda ekranı hayata geri getirecek!

Kök nedenini araştırmaya başladım ve LCD’yi ayırarak başladı. Biraz sıvının her yerinde döküldüğünü gördüm; Hiçbir şey paslanmamış, ancak temizlik ve yeniden yüklemek hiçbir fark yaratmadı. Kapsamın çöp kutusundaki bir yeniden birikme bir seçenek değildi, çünkü LCD’nin yanı sıra, kapsam mutlak bir hazine trove gibi hissetti. LCD’nin şoför kurulu şimdi tamamen işe yaramaz olsa da, sektörün todato-levhere konnektörlerinde henüz subatomik pin perdesine geçmediği bir zamandan geldi. Bu, gerekli tüm sinyallere dokunmak için geleneksel bir 26 pinli kurdele kablo televizyonuna rahatça lehimliydim ve kullanımdaki protokolü ters mühendislik işlemine başlayabilirim.

LCD protokollerini tersine çevir

Mevcut konnektörün üstüne lehimlenmiş şerit kablosu televizyon
Sürecin ilk adımı, konektördeki sinyalleri tanımlamaktı. Herhangi bir LCD sürmek için gereken en genel sinyal kümesi için aranıyordum. Bu, birkaç kesinlikle periyodik sinyal, bir çift biraz rastgele sinyal ve tipik güç ve zemini içermelidir. Periyodik sinyaller birçok muhtemelen piksel saati ve yeni bir çizginin ve çerçevenin başlangıcını işaret edecek senkronizasyon sinyalleri olabilir; Öte yandan, rastgele görünümlü sinyaller, görüntülenecek gerçek piksel verileri olacaktır. Yaşına göre yargılamak, oldukça kolay bir protokol bekleniyordu. Bu sezgi tarafından rehberlik, konnektörü araştırmaya başladım ve yakında her zaman 25 sinyalin tamamını çözdüm.

Ben sadece iki mükemmel periyodik sinyal buldum: biri, şüpheli bir 60 Hz’de ve diğer bir 25 MHz kare dalga içinde nispeten düşük 31.25 kHz sinyalini açtı. Eski, entegre bir senkronizasyon sinyali olmak zorunda kaldı. 60 Hz, nominal kare hızına karşılık geldiği için ölü bir hediye oldu. 31.25 KHz altta yatan sinyal daha sonra bir çerçeve içindeki yatay çizgi hızına karşılık gelmelidir. Son olarak, 25 MHz sinyali tüm sistem için saat olmak zorunda kaldı, aslında piksel saatiydi.

Sonra, açıkça piksel verileri olan rastgele görünümlü sinyalleri anlamamıştım. İlk olarak, bir 25 pinli konektöre olan ihtiyaç, bir tür paralel RGB konfigürasyonuna açıkça hafifletildi. Toplamda, üçe kadar mükemmel bir şekilde bölünen ve LCD’nin piksel başına dokuz bit kullandığını ve renk kanalının R, G ve B başına üç bit kullanıldığını ve sarılmış bu tür sinyalleri buldum.

Örnek: VGA veranda şeması
Şemayı ve pimoyu bulmak zorluğun bir parçasıydı. Muhtemelen çok daha esastır, kullanımdaki sinyallerin zamanlamalarını çözdü. Neredeyse her zaman, ham ekran sinyalleri “sundurma” olarak adlandırılır. Bunlar, verilerin yazılamadığı her çerçevede bölgeler olarak düşünülebilir. Bunlar, fiziksel elektronların fiziksel kirişinin, bir çizginin sonundan diğerinin başlangıcına kadar veya hatta ekranın altından üstüne kadar süpürmek için zaman kazandığı CRT günlerinde ortaya çıktı. Modern elektronik ekranlarda daha az belirgin olmasına rağmen, LCD kontrolörün zaman işleme ve karıştırılması zaman alır, çünkü bu bölgeler hala mevcuttur.

Zamanlamaların belirlenmesi

Zamanlamaları çıkarmak için, piksel verilerini senkronizasyon sinyalleriyle ilişkilendirmeye çalıştım. Piksellerin sürekli olarak kalıcı olduğu herhangi bir bölgeyi arıyordum.

Yatay zamanlamalar
Bir süre verilere baktıktan sonra, LCD’nin, entegre senkronizasyon sinyalinin hem yatay hem de dikey kısmında basit, tek bir veranda şeması kullanıyordu. Bu, piksellerin ayarlandığı için tanımlanması kolaydı.Bu süre zarfında hepsi yüksek veya hepsi düşük. Bu bölgeleri tam olarak belirlediğimde, imleçleri süreleri ölçmek için kullandım ve bu zamanı eşdeğer sayıda piksel için tercüme ettim.

Bu, VGA monitöründe istikrarlı ve uygun bir çoğaltmayı garanti edecek hayati bir bilgi parçasıydı. Plan, bu değerleri verilog olarak sabit olarak beslemek ve gerekli dalga formlarını elde etmek için karşılık gelen mantığı “gezi” için sayaçları kullanın.

Dikey zamanlamalar
Son olarak, LCD’lerin kararı, değiştirme monitörünü aynı ayarlarda çalıştırmak zorunda kalacağım için tanımlanmalıdır. Bu, sadece çeşitli aktif periyotları ölçerek ve bunları 40 NS’ye sahip olan piksel saat gibi diğer sinyallerle karşılaştırarak yapıldı. Yatay aktif zamanın yaklaşık 25.7 civarında olduğu tespit edildi, böylece toplam 642.5 piksel oluşturur ve benzer şekilde dikey aktif periyot 15.42 ms ve 481 satıra karşılık gelen 30 ABD’nin yatay bir süresine sahipti. Açıkçası, bu, 60 Hz’lik canlandıran bir 640 x 480 ekran oldu.

Yetenekli bir ikame bulmak

8 inç kurtarıcı
Böylece mevcut ekran sonunda oldukça yaygın olan ve bir değiştirme tamamen makul görünüyordu. Ne yazık ki, boyut biraz garipti; Yedi inçlik ekranları bulmak kolaydır, ancak sekiz? Web’de yedek olarak oldukça fiyatlı bir düşüş bulamamış olsam da, büyüklük sadece otomobillerde Pazar LCD kurulumlarından sonra çok sayıda modern tarafından kullanılanla aynı olmuştur. Bunlar, iyi düşük maliyetli “Eyoyo” En İyi Kalite Ekranları (£ 50) ve kelimenin tam anlamıyla tüm analogdan VGA ve hatta HDMI’den tüm video girişinin geliştiğini kabul eder. Ayrıca, 1024 * 768’in daha yüksek bir çözünürlüğünü de destekliyorlar. Bu ekran ahududu PI topluluğu içinde büyük ölçüde popüler değil.

Sonunda, her şey bir araya tıklıyor gibiydi. Sadece LCD’yi bu VGA monitörüyle değiştiremez miyim, kapsamın bir CRT için yeterli odaya sahip olduğu için mükemmel bir şekilde uyar!

Dolayısıyla, LCD’yi VGA dönüşümüne nasıl taşır? Elbette bir FPGA ile!

Sinyal dönüşümü

Bu noktada benimle 500 MHz kapsamı arasında duran tek şey, daha önce belirtilen LCD sinyallerini VGA’ya başarıyla dönüştürdü. Böyle nispeten hızlı işlemenin yalnızca bir FPGA üzerinde yapabileceği açıktı, ama hangisi? Amacım, bir noktada, FPGA’yı ekranla kapsamın içinde bırak, bu yüzden küçük ve ucuz bir şeye ihtiyacım vardı. Neyse ki, eBay, bu eski Altera Cyclone II tabanlı gelişme panolarının bir tonuna sahip gibi görünüyor 10 £ ‘lık bir zihin için! Bunlar oldukça yetenekli FPGA’lar, yaklaşık 4K mantık elemanları ve bunun gibi küçük ölçekli bir proje için optimal tutuyor.

Bu ekran dönüşümlerinin yapıldığı ortak bir yol çerçeve tamponları kullanıyor. Fikir, tam bir kareyi tamponlamak, dönüşümü yerine getirmek ve diğer ucunda tükürmektir. Ne yazık ki bu, FPGA’da saygın boyutlu bir dış ram için çağırır. Bu FPGA panoları, herhangi bir harici ram olmaması için ünlüdür, bu da bu şema sorunun dışındaydı. Biraz düşündükten sonra, LCD sinyallerinin ve VGA’nın her şeyden önce farklı olmadığı gerçeğine verdim. Birinden diğerinden diğerine satır bazında dönüştürebilseydim ve bir çerçeve tamponuna ihtiyacım olanı atlayabilseydim?

Karşılaştırma: VGA VS LCD. Bu şema hem yatay hem de dikey bölümler için geçerlidir.
Özetle:

LCD:

Bir piksel saati

Kombine senkronizasyon sinyalleri

Yalnızca ön veranda

Oysa VGA:

Piksel saati yok

Ayrı senkronizasyon sinyalleri

Senkronizasyon dönemi ile ön ve arka veranda

Entegre senkronizasyon sinyali
VGA çalışmalarının bu makalenin kapsamının ötesinde olduğu ayrıntılarıyla gidiyor, ancak bunu daha sonra düzelteceğim. Şimdilik, zamanlama krokunu incelememiz durumunda, iki sinyal arasındaki tek farkın, verandaların oluşumları ve yerleri olduğu ve geçerli verilerin yerleştirilmesinin sayısı olduğu görüyoruz.

Eskiz dönüşümün kolay görünmesini sağlar, ancak yalnızca iki kare tamamen senkronizasyondaysa geçerlidir. FPGA’ya, VGA’nın üzerinde karşılık gelen bir LCD kare üretmeye başlamasını söylemek için, önce LCD konektörden gelen yeni bir çerçevenin başlangıcını, böylece senkronize edebiliriz. Bu muhtemelen işlemin en kötü kısmıdır, çünkü yalnızca entegre senkronizasyon sinyalinin kenarlarının LCD’den incelenmesi yeterli değildir.

Bunun yerine iki kenar arasındaki zamanı ölçmeliyiz ve yeni bir çerçevenin oluşumunu işaretlemeliyiz. Gerisi, yukarıdaki zamanlama diyagramını üreten nispeten basit bir mantık kapısı setidir. Son olarak, LCD’nin bir arka veranda veya senkronizasyon darbesi olmadığı için, gelen RGB verileri, VGA monitörünün beklediği yerde mükemmel bir şekilde hizalanması için, minik bir FIFO kullanarak zaman içinde dengelenmelidir. Yukarıdakilere Verilog’a eşitlendikten sonra, donanımla başa çıkmaya başladım.

Donanım Kurulumu

Donanım Kurulumu
Donanım yapılandırması neyse ki çok minimalistti. HP, LCD’yi en dolu potansiyeline tam olarak kullanmıyordu. E bireysel bitlerini incelemekACH kanalı çok fazla yedeklilik gösterdi: çeşitli bitler, tam dokuz bit renk paletinin çok sığ bir şekilde kullanılmasını gösteren, pratik olarak her zaman aynıdı. Bu, HP’nin çoğunlukla ürün yazılımını kapsamın CRT versiyonundan yeniden kullandığı için şok edici değildi. Bunların hepsi, her renk kanalının MSB’sini nihai görüntüde pratik olmayan bir şekilde kaybetme ile bağladığımı ima etti. Bu, FPGA’da beni daha değerli bir hafıza kurtardı.

En önemli sorun, LCD’nin 5 V TTL sinyalini kullanmasıydı. FPGA, en iyi 3.3 V sinyallerini kabul edebilir, böylece seviye dönüşümünün yapılması gerekiyordu. Bu dönüşümü yapmak için 74HC serisi mantık tamponların bazılarında giriş sıkma diyotlarını kaldırmayı seçtim. Bu, yükseliş / düşme sürelerini önemli ölçüde yok etme eğilimindedir. Örneğin, 74HC4050 bile, harici bir seri direnç ihtiyacını yerine getirerek, kalıptaki diyotla seride polisilikon dirençleri vardır. Güvenli oynadım ve bu tamponun girişine 1 KΩ serisi direnç ekledim ve çıktısı FPGA’ya beslendi. FPGA’nın HSYNC ve VSYNC çıkışlarının çıktısı, RGB hatları 330 Ω direnç ile bağlanırken doğrudan monitöre bağlandı.

Başarı

Başarı!
25 MHz piksel saatini bir breadboard üzerinde davranmak ve FPGA’yı yeni dışa bağlayacak şekilde evcilleştirdikten sonra

Monitörün VGA limanı, kapsam resmi zaferine geri getirildi! Her şey mükemmel çalışsa da, bu kurulum oldukça gürültü oldu. Şimdi yapmam gereken tek şey bir PCB yapmak ve VGA monitörünün kapsamın içindeki kalıcı bir konut verin.

Peki sırada ne sordun? Şu anda ekran görüntülerini kaydetmenin tek yolu, tarihli bir disketten geçiyor. Ancak, şimdi bir FPGA’dan geçen LCD verileriniz var, neden bir SD karta yazmıyorsunuz?

Leave a Reply

Your email address will not be published. Required fields are marked *