FPGA rettet Geltungsbereich aus dem Müllcontainer

Ich bin immer auf der Suche nach einer qualitativ hochwertigen Ergänzung zu meinem Labor, das mein striktes Budget respektieren würde. Ich habe vor kurzem die Hertz-Barriere mit jedem anderen Projekt, das ich tue, und somit verzweifelt einen hohen Bandbreiten-Umfang gewünscht. Leider werden erst kürzlich 70 MHz bis 100 MHz wirklich erschwinglich, während ein neues Quad-Kanal-Oszilloskop im 500-MHz-bis 1-GHz-Bereich noch ein Vermögen kostet. Meine einzige Möglichkeit bestand darin, ein absolutes Wunder in Form eines alten hohen Bandbreitenbereichs zu finden.

Es schien, als würden die Götter von Hand, dass die Electronics auf mich lächelte, als ich diesen Müllcontainer fand, denn der HP 54542C. Es schien in feenhafter Form zu sein, und war an seinem Tag der Top-Hunde. Aber etwas musste gebrochen werden? Sicher genug, der Bildschirm war eindeutig fehlerhaft und unleserlich. Möchten Sie wissen, wie ich es behoben habe? Vier Buchstaben: FPGA.

Das Problem
Einige flache Forschung zu diesem Bereich zeigten eine interessante Geschichte. Dies war angeblich den ersten High-End-Geltungsbereich von HP mit einem LCD und war auch der Vorläufer der Infiniium-Serie von Scopes, die den Markt auf dem Markt weitermachen würde. Das LCD fühlte sich jedoch angemeldet. Der Umfang hatte eine ansonsten ähnliche Variante mit einem CRT-Display, und die erfasste Version, die ich erworben habe, hatte einfach die CRT-Verdauungstrakte, die beseitigt wurden, und ein von HP installierter farbiger LCD. Ich hatte gehofft, dass der LCD fehlerhaft war und nicht die ASIC-Fahrt, dies schien eine gute Wette als sanfter Tap, als er in einigen Fällen den Bildschirm wieder aufleben würde!

Ich begann, die Ursache der Wurzel zu untersuchen, und begann mit der Abwehr des LCDs. Ich fand, dass etwas Flüssigkeit überall dort verschüttet worden war; Nichts hatte korrodiert, aber Reinigung und Neuinstallation hat keinen Unterschied gemacht. Die Wiedereinheit des Geltungsbereichs mit dem Müllcontainer war keine Option, denn abgesehen von der LCD fühlte sich der Umfang wie eine absolute Treasure-Thrunde an. Obwohl das Chauffeur-Board der LCD jetzt völlig unbrauchbar war, kam es von einer Zeit, als die Branche noch nicht auf den Subatomic Pin-Pitch auf Draht-Bord-Anschlüssen bewegte. Dies impliziert, dass ich bequem auf einem herkömmlichen 26-Pin-Farbband-Kabel-Fernseher löten konnte, um alle erforderlichen Signale abzutragen und den Prozess des Reverse Engineering das verwendete Protokoll zu beginnen.

Reverse Engineering Die LCD-Protokolle

Band Kabelfernsehen auf dem vorhandenen Stecker gelötet
Der erste Schritt des Prozesses bestand darin, die Signale auf dem Verbinder zu identifizieren. Ich war auf der Suche nach den am meisten generischen Set von Signalen, die erforderlich sind, um ein LCD zu fahren. Dies sollte einige streng periodische Signale einschließen, ein Paar etwas zufällige Signale und die typische Leistung und den Boden. Die periodischen Signale wären wahrscheinlich wahrscheinlich der Pixel-Takt und die Synchronisationssignale, die den Start einer neuen Linie und eines neuen Rahmens markieren würden; Andererseits wären die zufälligen Ausbildungssignale die eigentlichen Pixeldaten, die angezeigt werden sollen. Nach ihrem Alter wurde ein ziemlich einfaches Protokoll erwartet. Geführt von dieser Intuition begann ich, den Anschluss zu untersuchen, und bald hatte ich alle 25 Signale herausgefunden.

Ich habe nur zwei vollkommen periodische Signale gefunden: Eines, ein relativ niedriges 31,25-kHz-Signal, das mit einem verdächtigen 60 Hz, und die andere eine 25-MHz-Rechteckwelle. Ersteres musste ein integriertes Synchronisationssignal sein. Die 60 Hz war ein totes Giveaway, als es der nominalen Bildrate entsprach. Das zugrunde liegende Signal von 31,25 kHz sollte dann der horizontalen Leitungsrate innerhalb eines Rahmens entsprechen. Schließlich musste das 25-MHz-Signal die Uhr für das gesamte System sein, tatsächlich war es die Pixeluhr.

Als nächstes musste ich die zufälligen Signale ein Sinn machen, was offensichtlich die Pixeldaten waren. Erstens war das Bedürfnis nach einem 25-poligen Stecker eindeutig für eine Art parallele RGB-Konfiguration. Insgesamt fand ich neun solcher Signale, die perfekt durch drei Teile teilt und umwickelt, dass der LCD neun Bits pro Pixel und drei Bits pro Farbkanal R, G bzw. B verwendete.

Beispiel: VGA-Terrassenschema
Die Gestaltung des Schemas und des Pin-Outs war Teil der Herausforderung. Möglicherweise war möglicherweise viel wichtiger, dass die Zeitpunkte der verwendeten Signale herausgefunden wurden. Fast immer haben rohe Displaysignale, was als “Veranden” genannt wird. Diese können als Regionen in jedem Rahmen betrachtet werden, in denen Daten nicht geschrieben werden können. Diese stammten in den Tagen der CRT, an der der physische Strahl der Elektronen sich Zeit annahm, um vom Ende einer Zeile zum Anfang des anderen oder sogar vom Boden des Bildschirms nach oben zu fahren. Obwohl in modernen elektronischen Bildschirmen weniger ausgeprägt ist, gibt es noch immer diese Regionen, da der LCD-Controller Zeitverarbeitung nimmt und eingehende Daten schluft.

Bestimmen der Timings

Um die Timings zu extrahieren, versuchte ich, die Pixeldaten mit den Synchronisationssignalen zu korrelieren. Ich suchte nach Regionen, in denen die Pixel konsequent uneingestellt waren.

Horizontale Timings
Nachdem er die Daten einiger Zeit anstarrt, wurde klar, dass das LCD ein einfaches, einzelnes Terrassenschema auf dem horizontalen und vertikalen Abschnitt des integrierten Sync-Signals verwendete. Dies war leicht zu identifizieren, da die Pixel auf eingestellt wurdeneither all high or all low during this period. once I had pinpointed these regions, I used the cursors to measure their duration and translated that time to an equivalent number of pixels.

This was a vital piece of information that would guarantee a stable and appropriate reproduction on the VGA monitor. The plan was to feed these values as constants into Verilog, and use counters to “trip” the corresponding logic to achieve the required waveforms.

Vertical Timings
Lastly, the LCDs’s resolution had to be identified as I would have to run the replacement monitor at the same settings. This was done by simply measuring the various active periods and comparing them to other signals such as the pixel clock that had a period 40 ns. The horizontal active time was determined to be around 25.7 us, thus constituting of a total of 642.5 pixels and similarly the vertical active period was 15.42 ms and with a horizontal period of 30 us, that corresponds to 481 lines. clearly this was a conventional 640 x 480 display with a revitalize rate of 60 Hz.

Finding an able substitute

The 8 inch Saviour
So the existing display [turned out to be] pretty common in the end, and a replacement seemed entirely plausible. Unfortunately, the size was a bit odd; it’s easy to find seven-inch screens but eight? even though I could not find any fairly priced drop in replacement on the web, the size just happened to be the same as that used by numerous modern after market LCD installations on cars. These are good low-cost “EYOYO” top quality screens (£50) and accept literally all develops of video input from all Analog to VGA and even HDMI. They also support a much higher resolution of 1024 * 768. I’m amazed this screen is not massively popular within the Raspberry Pi community.

Finally, everything seemed to be clicking together. Not only could I replace the LCD with this VGA monitor, it would fit in perfectly as the scope even had enough room for a CRT!

So exactly, how does one carry out the LCD to VGA conversion? With an FPGA of course!

Signal conversion

At this point the only thing standing between me and a functioning 500 MHz scope was successfully convert the previously mentioned LCD signals to VGA. It was clear such relatively fast processing could only be done on an FPGA, but which one? My objective was to, at some point, leave the FPGA inside the scope with the screen, so I needed something small and cheap. Luckily, eBay seems to have a ton of these old Altera Cyclone II based development boards for a mind boggling £10! These are rather capable FPGA’s, holding about 4K logic elements and optimal for a small scale project like this.

A common way these display conversions are done are using frame buffers. The idea is to buffer a whole frame, carry out the conversion and spit it out at the other end. sadly this calls for a respectable sized external RAM on the FPGA. These FPGA boards are notorious for not having any external RAM, thus this scheme was out of the question. After a bit of thinking, I pertained to the realisation that the LCD signals and VGA were not that dissimilar after all. What if I could convert from one to the other on a line-by-line basis, and circumvent the need for a frame buffer at all?

Comparasion: VGA vs LCD. This diagram applies to both the horizontal and vertical segments
Zusammenfassend:

LCD has:

A Pixel clock

Combined synchronisation signals

Front patio only

whereas VGA has:

No Pixel clock

Separate synchronisation signals

Front and Back patio with a Synchronisation period

The integrated synchronisation signal
Going into detail of how VGA works is beyond the scope of this article, but I’ll fix that later. For now, if we simply examine the timing sketch, we see that the only difference between the two signals is the number of occurrences and locations of the porches and the placement of valid data.

The sketch makes the conversion look easy but is only valid if the two frames are in complete sync.  To tell the FPGA to start produce a corresponding LCD frame over VGA, we should first identify the start of a new frame coming from the LCD connector so that we could sync to it. This is possibly the trickiest part of the process, because merely examining the edges of the integrated synchronisation signal from the LCD is not sufficient.

We should instead measure the time between two edges and flag the occurrence of a new frame. The rest is a relatively straightforward set of logic gates that produces the above timing diagram. Lastly, as the LCD does not have a back patio or sync pulse, the incoming RGB data should be balance out in time using a tiny FIFO so that it aligns up perfectly where the VGA monitor expects it. once equating the above into Verilog was completed, I proceeded to deal with the hardware.

Hardware-Setup

The Hardware Setup
The hardware configuration was fortunately very minimalistic. HP was not quite utilising the LCD to its fullest potential. Inspecting the individual bits of eACH-Kanal zeigte viel Redundanz: Die verschiedenen Bits waren praktisch immer identisch, was auf eine sehr flache Nutzung der vollständigen Neun-Bit-Farbpalette angab. Dies war nicht schockierend, als HP meist Firmware aus der CRT-Version des Geltungsbereichs wiederverwendet hat. All dies implizierte, dass ich mit der Haftung des MSB jedes Farbkanals mit praktisch keinen Verlust im endgültigen Bild aufhielt. Dies speichert mich noch viel wertvollerer Erinnerung auf der FPGA.

Das wichtigste Problem war, dass das LCD 5 V-TTL-Signale verwendete. Die FPGA kann mit den besten 3,3-V-Signalen akzeptieren, so dass die Konvertierung der Pegelaufwand durchgeführt werden musste. Ich entschied mich, die Eingang-Klemmdioden in einigen der 74hc-Serie-Logikpuffer zu nutzen, um diese Konvertierung durchzuführen. Dies neigt dazu, die Anstiegs- / Fallzeiten erheblich zu zerstören. Zum Beispiel hat der 74hc4050 sogar Polysiliziumwiderstände in Reihe mit der Diode in der Matrize, was den Bedarf an einem externen Reihenwiderstand verschiebt. Ich spielte es sicher und fügte 1 kΩ-Reihenwiderstände an den Eingang dieses Puffers hinzu, und der Ausgang von wurde in die FPGA eingespeist. Die Ausgabe der HSYNC- und VSYNC-Ausgänge von FPGA wurde direkt an den Monitor angeschlossen, während die RGB-Linien über 330 Ω-Widerstände verknüpft wurden.

Erfolg

Erfolg!
Nach der Zähmung der 25-MHz-Pixel-Uhr, um sich auf einem Breadboard zu verhalten und die FPGA an das neue externe zu heben

Der VGA-Hafen des Monitors, der Umfang wurde in seine formale Ruhm zurückgebracht! Obwohl alles perfekt funktionierte, war dieses Setup ziemlich geräuschanfällig. Alles, was ich jetzt tun muss, ist eine Leiterplatte und gewähren den VGA-Monitor einen dauerhaften Aufenthalt innerhalb des Umfangs.

Also, was fragst du also? Nun, derzeit ist der einzige Weg, Screenshots zu speichern, durch ein datiertes Diskettenlaufwerk. Aber weil wir jetzt die LCD-Daten haben, die durch eine FPGA durchlaufen haben, wecken Sie das nicht auf eine SD-Karte?

Leave a Reply

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