Pagaliau kiek paaiškėjo kaip veikia LVDS SERDES (serializer- deserializer) sinchronizacija.
Iš pradžių, galvojau kad užtenka padaryti LVDS megafunkcija ir viskas išsispręs automatiškai. Deja, gavosi bet koks niekalas. Tada aptikom “rx_data_akign” piną. Trumpas impulsas perstumia gautą baitą per vieną bitą. Bet to neužteko. Tada atradom “rx_data_align_reset” piną, kuris nustato bitų postumį į standartinę padėtį. Bet ir šitas nepadėjo. Tada įjungiau “pll_areset” piną. Pinas, kuris pilnai rezetuoją LVDSin megafunkcijos PLLą. Gavosi maždaug toks monstras (dalis imtuvo schemos):
(didesnis paveiksliukas)
Kadangi naudojam 2 poras duomenim, vieną porą CLK ir x6 serializavimo faktorių, tai per vieną “pirstelėjimą” perduodam 12 bitų. 8 bitai naudingų duomenų (nors praktiškai užtenka 7 ar net 6 – akis nepastebi skirtumų, o ir nulinis bitas net teoriškai nedalyvauja matematikoje…) ir dar lieka 4 bitai sinchronizacijai.
Vienas bitas naudojamas kaip kadrų sinchronizacija (VSYNC, beja itariu, kad pas mane kadrų dažnis gavosi kraupiai didelis. Patikslinimas- vaizdas atnaujinamas 1000 fps greičiu. Gal kiek daugoka 🙂 ), o likusieji 3 bitai naudojami SERDES modulio sinchronizacijai.
Aš perskaičiau daugybe datasheetų apie gigabitinius ethernetus, optinius kabelius… Sužinojau apie Hummingo kodą, apie 8b10b kodavimą ir visokius kitokius IP. Bet viskas čia man pernelyg sudėtinga ir visai nereikalinga RGB matricai- nedidelė bėda, jei dėl trugdžio bus koks nors nedidelis atsitiktinis pasimirguliavimas.
Todėl sinchronizacija labai paprasta: jei neatinka 3 bitų seka, pastumiam bitus (inst:105, 101, 103, 106..). Jei per sakysim keliolika bandymų nepavyksta gauti rezultato, darom bitų postumio rezet (inst:110, 104, 102, 108, 109). Jei po keliolikos rezetų vistiek nepavyksta gauti vaizdelį- rezetuojam PLLą ir kartu visą LVDS modulį (inst:111, 112). Kodėl tiek daug bandymų iki pilno numetimo? Ogi todėl, kad kartais sugeba susisinchronizuotis su atsitiktiniu vaizdo gabalėliu ir vaizdas pasidaro stabilus, bet neteisingas. Todėl reikia kiek palaukti, kad pralėktu daugiau video informacijos ir suveiktu klaidų detektorius.
Va koks gavosi rezultatas. Čia įjungiu visą mašinerija ir smaukau UTP kabelį. Kai išjungiu kabeli kažkiek triukšmo ištrina matricos viršų. Kartais jungiant prisigaudo visokių gliukų, bet pilnai įsmeigus kabelį, vaizdas stabilizuojasi.
Žmonės sako, kad 6 bitų paneliuose labai matosi stambios juostos gradientuose, kurie šiaip turėtų būti tolygūs.
Jei nepaslaptis, kokiu softu ir kiek laiko uztruko programos sudarymas? Zinau, kad Alteros, bet vistiek domina 🙂 Atejo pagaliau man Spartan-3E devboardas, dabar bandau softa susimest, ko tai labai sudetinga po XP x64 :/
Nice work!
Kadangi naudojamos Alteros mikroschemos, softo pasirinkimas nėra didelis- Altera Quartus 8 SP1. Kažkoks tarpinis variantas tarp “web edition” ir “subscription edition” t.y. biški pahackintas. Po hackinimo, softas leidžia dirbti su visom Alteros mikroschemom. Tas ir apsprendė Alteros pasirinkimą, o ne Xylinx. Xylinx softas neleidžia naudoti didžiosios dalies mikroschemų be atitinkamos licenzijos.
Nežinau kiek laiko dariau, nes tarpai prie “prisėdimų” buvo labai dideli- aš labai tingus. Gal gryno laiko būtų kokia savaitė. Beveik visi moduliai parašyti Verilog kalba ir aiškų standartinės logikos biblioteka- nes dažnai pats nežinau kaip padaryti ir darau eksperimentus. Poto galima palaida logika optimizuoti iki vieno verilog modulio.
Blemba, tu monstras.
Ir jo su CPLD/FPGA bishki gaidynas – reikia pirkt mikres po simta baksu ir dar uz softa sumoket nk$.
Softas galima sakyti freeware- licenzija duodama keliems mėnesiams už dyką. Aš softa nulaužiau grynai dėl sportinio intereso ir kad paimtu vieną egzotišką mikroschemą.
FPGA čipus išlupau iš senos technikos- pirmoji CPLD mikroschema (Lattice) radau egzotikoje, o štai antroji- Altera FLEX buvo išlupta iš seno DSL modemo. O štai senuose Nokijose/Zyxel DSL modemuose stovi Xylinx čipai. Šį cikloną irgi išlupau. Beja esu pirkęs Altera FLEX čipą eBay aukcione- kainavo jis man su atsiuntimu apie 30Lt.
Dear Savel,
I found 4 of these -old- LED matrices, so I wanted to play with it.
Can you share more information? (Altera project, notes…)
Thanks a lot and nice blog (even if I don’t speak lituanian 🙂
I think everything is posted somewhere in this site. I dont know if there is any translation about this device in English version of the blog.