FPGA RESCUES scope FROM THE DUMPSTER
I’m always on the lookout for a quality addition to my lab that would respect my strict budget. A közelmúltban úgy találtam magam, hogy a Hertz gátot minden más projektrel tesszük, és így kétségbeesetten nagy sávszélességet kapok. Sajnos csak a közelmúltban 70 MHz-tól 100 MHz-ig lehet nagyon megfizethetővé válik, míg egy új négycsatornás oszcilloszkóp az 500 MHz-es és 1 GHz-es tartományban még mindig szerencsés lesz. Az egyetlen lehetőségem volt, hogy egy abszolút csodát találjunk egy régi nagy sávszélesség formájában.
Úgy tűnt, hogy az istenek, az Elektronika mosolygott rám, amikor megtaláltam ezt a dumpstert a HP 54542C-t. Úgy tűnt, hogy a tündér jó formában volt, és a napi felső kutya volt. De valami meg kellett törni? Persze, a képernyő egyértelműen hibás és olvashatatlan volt. Szeretné tudni, hogyan rögzítettem? Négy betű: FPGA.
A probléma
Néhány sekély kutatás ezen a hatókörben néhány érdekes történetet mutattak ki. This was supposedly HP’s first high end scope with an LCD and was also the precursor to the Infiniium series of scopes that would go on to guideline the market. Az LCD egy utógondozásnak érezte magát. The scope had an otherwise similar variant with a CRT display, and the version I acquired simply had the CRT digestive tracts eliminated and a colour LCD installed by HP. Reméltem, hogy az LCD hibás volt, és nem az ASIC vezetése, ez úgy tűnt, mint egy jó tét, mint egy szelíd csap, bizonyos esetekben visszahozza a képernyőt az életre!
Elkezdtem vizsgálni a gyökér okát, és elkezdtem szétválasztani az LCD-t. Találtam néhány folyadékot egészen kiömlött; Semmi sem volt korrodált, de a tisztítás és az újratelepítés nem tett különbséget. A szubkiterrel való átszerelés a Dumpster nem volt lehetőség, mert az LCD-től eltekintve, a hatókör úgy érezte, mint egy abszolút kincses trova. Annak ellenére, hogy az LCD-ja sofőr testülete teljesen haszontalan volt, egy olyan időből származott, amikor az iparág még nem költözött a subatomi pólusú pályára a vezetékes csatlakozókon. Ez azt jelentette, hogy kényelmesen forraszthatom egy hagyományos 26 pólusú szalagkábelt televízión, hogy kinyissa az összes szükséges jelet, és kezdje el a használatban lévő protokoll fordított mérnöki folyamatát.
Fordított mérnöki az LCD protokollok
A meglévő csatlakozó tetején forrasztott szalagkábeltelevízió
A folyamat első lépése az volt, hogy azonosítsuk a csatlakozó jeleit. A Look-out voltam, hogy a legtöbb generikus jelzés szükséges az LCD vezetéséhez. This should include a few strictly periodic signals, a couple somewhat random signals and ofcourse the typical power and ground. The periodic signals would many likely be the pixel clock and the synchronisation signals which would mark the start of a new line and frame; Másrészt a véletlenszerű megjelenítési jelek a tényleges képpont adatok jelennek meg. Az életkorának megítélése, meglehetősen könnyű protokoll várható. Ezzel az intuícióval elkezdtem a csatlakozót, és hamarosan eléggé voltam, hogy mind a 25 jelet kitaláltam.
Csak két tökéletesen periodikus jelet találtam: az egyik, egy viszonylag alacsony 31,25 kHz jel gyanús 60 Hz-en, a másik pedig 25 MHz-es négyzethullámban. Az előbbinek integrált szinkronizálási jelnek kellett lennie. A 60 Hz halott giveaway volt, mivel megfelel a névleges képsebességnek. A 31,25 kHz-es mögöttes jelnek meg kell felelnie a keretben lévő vízszintes vonalsebességnek. Végül a 25 MHz-es jelnek az egész rendszer órájának kellett lennie, valójában ez volt a pixel óra.
Ezután értelmeztem a véletlenszerűen megjelenő jeleket, amelyek nyilvánvalóan a pixeladatok voltak. Először is, a 25 pólusú csatlakozó szükségessége egyértelműen párhuzamos RGB konfigurációra utal. Összesen kilenc olyan jelet találtam, amelyek tökéletesen megoszthatók három és becsomagolva, hogy az LCD-t egy pixelenként és három színkínenként, R, G és B típusonként három bitet használta.
Példa: VGA Patio Scheme
A rendszer és a pin-out a kihívás részét képezte. Lehetséges, hogy sokkal inkább lényegesebb volt a használatban lévő jelek időzítéseit. Szinte mindig, a nyers kijelző jelek, amit “tornácoknak” neveznek. Ezek az egyes kereteken belüli régióknak tekinthetők, ahol az adatok nem írhatók. Ezek a CRT napjaiban származnak, ahol az elektronok fizikai gerenda időt vett igénybe, hogy egy vonal végétől visszahúzza a másik végéig, vagy akár a képernyő alján a tetejére. Bár a modern elektronikus képernyőkön kevésbé kimondott, ezek a régiók még mindig léteznek, mert az LCD-vezérlő időbeli feldolgozást és bevonó adatokat vet fel.
Az időzítés meghatározása
Az időzítés kivonásához megpróbáltam korrelálni a pixeladatokat a szinkronizálási jelekkel. Bármely olyan régiót kerestem, ahol a pixeleket folyamatosan nem kezelték.
Horizontal Timings
After staring at the data for a while, it was clear the LCD was using a simple, single patio scheme on both the horizontal and vertical portion of the integrated sync signal. This was easy to identify because the pixels were set toeither 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
Összefoglalva:
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 csatorna sok redundanciát mutatott ki: a különböző bitek gyakorlatilag mindig azonosak voltak, jelezve a teljes kilenc bites színpaletta nagyon sekély kihasználását. Ez nem volt sokkoló, mivel a HP többnyire a firmware-t a CRT változatából állították fel. Mindez azt jelentette, hogy elmentem az egyes színes csatornák MSB-vel, gyakorlatilag nem veszteséggel a végső képen. Ez még sokkal értékes memóriát takarított meg az FPGA-n.
A legjelentősebb probléma az volt, hogy az LCD 5 V TTL jeleket használt. The FPGA can accept at best 3.3 V signals so level conversion had to be performed. Úgy döntöttem, hogy kihasználom a bemeneti rögzítő diódákat a 74HC sorozatú logikai pufferek egy részében, hogy elvégezzék ezt az átalakítást. Ez azonban jelentősen elpusztítja / őszi idõket. For example the 74HC4050 even has polysilicon resistors in series with the diode in the die, displacing the need for an external series resistor. Biztonságos voltam, és 1 kΩ-os sorozat ellenállást adtam a puffer bemenetéhez, és a kimenetet az FPGA-ba táplálták. The output of the FPGA’s HSYNC and VSYNC outputs were hooked up directly to the monitor whilst the RGB lines were linked through 330 Ω resistors.
Siker
Siker!
Miután megszüntette a 25 MHz-es pixel órát, hogy egy kenyérlemezen viselkedjen, és felemelje az FPGA-t az új külsőre
monitor’s VGA port, the scope was brought back to its formal glory! Bár minden tökéletesen dolgozott, ez a beállítás meglehetősen zajt jelentett. Mindössze annyit kell tennem, hogy most egy PCB-t készítsen, és adja meg a VGA monitor állandó tartózkodási helyét.
Szóval mi a következő? Nos, jelenleg az egyetlen módja annak, hogy megmentse a képernyőképeket egy dátumú floppy meghajtón keresztül. De azért, mert most már az FPGA-n keresztül haladunk az LCD-adatok, miért nem írjuk meg ezt az SD kártyára?