prenos 16 bitovych dat po seriovej linke
balu@home
daniel.valuch na orange.fr
Čtvrtek Prosinec 22 20:10:59 CET 2011
rozmyslam nad implementaciou jedneho problemu. Potreboval by som
prenasat data z AD prevodnika, asi najskor 12 bitove slova, tusim tam je
16 kanalov, par desiatok ksps na kanal. Celkovy datovy tok do 100Mbps,
prenos po jednom drate, resp. optickom kabli.
Primitivny problem, ale ked sa zamyslim nad detailami tak je tam par
otazok :-)
Ide o jednosmerny prenost bez akehokolvek handshake, t.j. linka by sa
mala vediet sama zasynchronizovat a obnovit po preruseni media.
Ak by som implementoval prenos na sposob uart tak by bol asi
najjednoduchsi. Neviem si ale predstavit synchronizaciu na zaciatok
packetu efektivnejsie ako ze sa vysle vela nul ("start bit" o dlzke min.
jedneho paketu) cim sa mi samozrejme znizi prenosova rychlost.
Ako sa to potom prijima? Posuvny register pozera ci je plny nul a na
prvu zmenu sa zasynchronizuje?
Velmi atraktivna varianta je pouzit 16b20b kodovanie, Xilinx dokonca
ponuka na stiahnutie koder aj dekoder. Otazka ale zostava, ako seriovy
prijimac vie kedy sa mu zacina packet? Pozera sa v posuvnom registri ci
tam najde comma character?
Ako sa z toho signalu zrekonstruuju hodiny ktore vzorkuju vstup? Na
oboch stranach bude rovnaky krystalovy oscilator ale faza je samozrejme
nedefinovana takze sa musi "nejak" zasynchronizovat.
Ku prevodniku je nalepene male cpld ktore by to malo zvladnut poslat.
Najjednoduchsie riesenie je pouzit dve vlakna a obdobu spi, ale ak by sa
to dalo vyriesit jednym za menej ako 2-3 tyzdne kodovania bolo by to
samozrejme efektivnejsie.
dik za nazory,
b.
Další informace o konferenci Hw-list